Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Ограничения.

Поговорим немного об ограничениях, которые Вы накладываете на таблицы, что бы они удовлетворяли условиям ссылочной целостности или содержали в полях значения, удовлетворяющие определенным правилам. Одно такое ограничение уже упоминалось. Это поле rdb$null_flag из таблицы rdb$relation_fields, которое информирует Вас о том, может ли столбец таблицы содержать значение NULL.

  select RDB$CONSTRAINT_NAME, RDB$CONSTRAINT_TYPE, RDB$INDEX_NAME
  from rdb$relation_constraints
  where rdb$relation_name = quot;EMPLOYEE";

Этот запрос возвращает информацию почти обо всех ограничениях, наложенных на таблицу. Поле RDB$CONSTRAINT_NAME - это имя ограничения. RDB$INDEX_NAME - имя индекса для ограничений типа UNIQUE, PRIMARY KEY и FOREIGN KEY. Достаточно легко получить список ограничений определенного типа, например:

  SELECT RDB$CONSTRAINT_NAME
  FROM RDB$RELATION_CONSTRAINTS
  WHERE (RDB$RELATION_NAME = "EMPLOYEE") and (rdb$constraint_type = "CHECK");

Этот запрос выдает список имен CHECK ограничений. Рассмотрим подробнее каждый тип ограничения.

CHECK ограничения базируются на триггерах. Эти триггеры создаются InterBase сервером автоматически при создании соответствующего CHECK ограничения. Однако можно посмотреть, какие триггеры работают при обработке ограничения.

  select rdb$trigger_name
  from rdb$check_constraints
  where rdb$constraint_name = "INTEG_30";

В условии отбора указывается имя ограничения, полученное предыдущим SQL запросом. Нужно заметить, что для ограничений этого типа создается два триггера типа BEFORE INSERT и BEFORE UPDATE.

О том, как получить информацию о триггерах, мы поговорим ниже.

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

  SELECT RDB$CONSTRAINT_NAME, RDB$INDEX_NAME
  FROM RDB$RELATION_CONSTRAINTS
  WHERE (RDB$RELATION_NAME = "EMPLOYEE") AND
        (RDB$CONSTRAINT_TYPE = "FOREIGN KEY");

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

Индексы 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. Эти поля можно убрать и тогда Вы получите просто таблицу связей между таблицами.

Назад | Содержание | Вперед

 

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...