Заметки о системных таблицах InterBase


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


Имея имя индекса, можно просмотреть на базе каких полей построен этот индекс, активен ли он и т.д. Об этом мы поговорим чуть позже.

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

select rdb$relation_name , rdb$index_name from rdb$indices where rdb$index_name in (select rdb$foreign_key from rdb$indices where rdb$index_name = "RDB$FOREIGN9");

Учитывая, что таблица RDB$REF_CONSTRAINTS содержит список всех вторичных ключей с поставленными в соответствие первичными ключами, то можно попробовать определить пары таблиц master-detail.

SELECT a.RDB$RELATION_NAME,a.RDB$INDEX_NAME, c.RDB$RELATION_NAME, c.RDB$INDEX_NAME FROM RDB$RELATION_CONSTRAINTS a, RDB$REF_CONSTRAINTS b, RDB$RELATION_CONSTRAINTS c WHERE (a.RDB$CONSTRAINT_NAME = b.RDB$CONSTRAINT_NAME) and (b.RDB$CONST_NAME_UQ = c.RDB$CONSTRAINT_NAME) order by a.RDB$RELATION_NAME;

Этот SQL-запрос, кроме пар таблиц master-detail, возвращает и имена соответствующих индексов PRIMARY KEY и FOREIGN KEY. Эти поля можно убрать и тогда Вы получите просто таблицу связей между таблицами.

| |

 




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