InterBase - статьи


Ограничения - часть 2


Ограничения, типа PRIMARY KEY, FOREIGN KEY и UNIQUE, базируются на индексах. Следующий пример запроса позволяет выбрать такие ограничения вместе с наименованиями индексов, на которых они базируются.

SELECT RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME, RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE, RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME, RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME FROM RDB$RELATION_CONSTRAINTS WHERE (RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY') or (RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY') or (RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'UNIQUE') ORDER BY RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME;

Таблица RDB$INDICES содержит связи между индексами PRIMARY KEY и FOREIGN KEY. Используя, эту информацию можно написать запрос, который покажет связи между таблицами, а также индексы, участвующие в формировании этих связей.

SELECT RDB$INDICES.RDB$RELATION_NAME, RDB$INDICES.RDB$INDEX_NAME, RDB$INDICES1.RDB$RELATION_NAME, RDB$INDICES1.RDB$INDEX_NAME FROM RDB$INDICES INNER JOIN RDB$INDICES RDB$INDICES1 ON (RDB$INDICES.RDB$FOREIGN_KEY = RDB$INDICES1.RDB$INDEX_NAME) ORDER BY RDB$INDICES.RDB$RELATION_NAME;

Изменив предыдущий запрос, а именно добавив в него таблицу RDB$RELATION_CONSTRAINTS, можно получить пары master-detail с информацией об индексах, участвующих в организации связи, и наименованиях ограничений.

SELECT RDB$INDICES.RDB$RELATION_NAME, RDB$INDICES.RDB$INDEX_NAME, RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME, RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE, RDB$INDICES1.RDB$RELATION_NAME, RDB$INDICES1.RDB$INDEX_NAME, RDB$RELATION_CONSTRAINTS1.RDB$CONSTRAINT_NAME, RDB$RELATION_CONSTRAINTS1.RDB$CONSTRAINT_TYPE FROM RDB$INDICES INNER JOIN RDB$INDICES RDB$INDICES1 ON (RDB$INDICES.RDB$FOREIGN_KEY = RDB$INDICES1.RDB$INDEX_NAME) INNER JOIN RDB$RELATION_CONSTRAINTS RDB$RELATION_CONSTRAINTS1 ON (RDB$INDICES1.RDB$INDEX_NAME = RDB$RELATION_CONSTRAINTS1.RDB$INDEX_NAME) INNER JOIN RDB$RELATION_CONSTRAINTS ON (RDB$INDICES.RDB$INDEX_NAME = RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME) ORDER BY RDB$INDICES.RDB$RELATION_NAME;




- Начало -  - Назад -  - Вперед -