Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск неиндексированных внешних ключей.  [new]
dos23
Member

Откуда:
Сообщений: 1
Помогите решить задачку!

Есть следующие таблицы в которых описана структура базы данных:

User_tables – список таблиц
Имя поляТип данныхОписание
table_nameVARCHAR2(30)Имя таблицы (PK)


User_constraints – список ограничений целостности
Имя поляТип данныхОписание
table_nameVARCHAR2(30)Имя таблицы
constraint_nameVARCHAR2(30)Имя ограничения целостности (PK)
constraint_typeCHAR(1)Тип ограничения целостности: R – ссылочное ограничение целостности P – первичный ключ U – уникальный ключ
r_constraint_nameVARCHAR2(30)Имя ограничения целостности на которое ссылается данное ограничение целостности.


User_cons_columns – список столбцов ограничений целостности
Имя поляТип данныхОписание
table_nameVARCHAR2(30)Имя таблицы
constraint_nameVARCHAR2(30)Имя ограничения целостности (PK)
column_nameVARCHAR2(30)Имя столбца
PositionNUMBER(2)Порядковый номер столбца в ограничении целостности. Возможные значения – от 1 до 16 включительно. (PK)


User_indexes – список индексов
Имя поляТип данныхОписание
table_nameVARCHAR2(30)Имя таблицы
index_nameVARCHAR2(30)Имя индекса (PK)


User_ind_columns – список столбцов индексов
Имя поляТип данныхОписание
table_nameVARCHAR2(30)Имя таблицы
index_nameVARCHAR2(30)Имя индекса (PK)
column_nameVARCHAR2(30)Имя столбца
column_positionNUMBER(2)Порядковый номер столбца в ограничении целостности. Возможные значения – от 1 до 16 включительно. (PK)


Пояснения
Внешний ключ считается индексированным, если есть хотя-бы один индекс, в который входят все столбцы внешнего ключа в том же порядке, что и во внешнем ключе, без пропусков, начиная с первого столбца индекса.
Внешний ключ считается неиндексированным, если нет индексов, в который входят все столбцы внешнего ключа в том же порядке, что и во внешнем ключе, без пропусков, начиная с первого столбца индекса.
Максимально возможное количество столбцов в ключах и индексах считать равным 10.

В вышеописанных таблицах будут следующие данные:

User_tables:
Table_name
agreement
Bill


User_constraints:
table_nameconstraint_nameconstraint_typeR_constraint_name
agreementPK_agreementP
BillPK_billP
BillFK1_billRPK_agreement


User_cons_columns:
table_nameconstraint_namecolumn_nameposition
agreementPK_agreementId_agree1
BillPK_billId_billdoc2
BillPK_billId_agree1
BillFK1_billId_agree1


User_indexes
Table_nameIndex_name
agreementI1_agreement
BillI1_bill


User_ind_columns
table_nameIndex_namecolumn_namecolumn_position
agreementI1_agreementId_agree1
BillI1_billId_billdoc2
BillI1_billId_agree1


Задача
Написать SQL-запрос, возвращающий список неиндексированных внешних ключей (названий внешних ключей – ограничений целостности). Результат надо получить при помощи одного запроса (пусть и большого).

Например, если в вышеприведенном примере отсутствовал бы индекс I1_bill, то ограничение целостности FK1_agreement должно было бы попасть в данный список.

Согласно определению индексированного и неиндексированного внешнего ключа если есть индекс состоит из двух столбцов (как в вышеприведенном примере – индекс I1_bill по столбцам id_agree и id_billdoc), и первые n столбцов в том же порядке входят в ограничение целостности, то такой набор столбцов считается индексированным и в результат попадать не должен (в примере столбец id_agree входит в индекс I1_bill и входит в ограничение целостности FK1_bill и поскольку для операций со столбцом bill.id_agree можно использовать индекс I1_bill, то при наличии индекса I1_bill ограничение целостности FK1_bill не считается неиндексированным).
16 авг 12, 18:42    [13022649]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить