Logo Host-telecom.com — профессиональный хостинг в Европе! Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
ATLEX Выделенные серверы: в Европе / в России.

Виртуальные серверы: в Европе / в России.

Партнерская программа

Ваш сайт в 8 раз быстрее конкурентов. Хостинг от $2.95

VPS: SSD, KVM, бесплатные бэкапы и администрирование

Все необходимое для вашего сайта и лучшая техподдержка 24/7

хостинг сайтов ГиперХост — хостинг сайтов который Вы искали.

Виртуальный хостинг, Аренда VPS серверов, рация доменных имен, SSL сертификаты

💰 Самые низкие цены на домены

🔒 Отличный хостинг на SSD c бесплатными SSL

💻 Огромнейший выбор dedicated выделенных серверов

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

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

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

 

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

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

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

VDS хостинг Облачный сервер в Нидерландах и Украине

Аренда виртуального сервера от $7.91

Партнёрская программа
$20 за клиента

Wildcard сертификаты от $74,97 в год.

Дешевые ssl сертификаты для домена

Sectigo сертификаты от $7,67 в год.

хостинг Украина Виртуальный хостинг для сайта от $4,87

Регистрация домена от $2 в год

Партнерская программа – $20 за клиента

VPS с гибкой конфигурацией: за 1€

Мощные выделенные сервера: от 25€

Собственный Дата-Центр
Поддержка 24/7

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

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

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

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

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

Последние комментарии:

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

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