Определение ключей и ссылочных целостностей
Создание таблиц Для создания таблиц используется оператор CREATE TABLE. Его формат: CREATE TABLE <Имя_таблицы> [EXTERNAL [FILE] «<имя_файла>»] (<опр_столбца> [, <опр_столбца> | <ограничение> ...]); Здесь: <опр_столбца> – определение столбца БД. Определение столбца имеет такой формат: <опр_столбца> = <имя_столбца> {<тип_данных> | COMPUTED [BY] (<выражение>) | <домен>} [DEFAULT {<литерал> | NULL | USER}] [NOT NULL] [<огранич_столбца>] [COLLATE collation] Здесь: · <тип_данных> – тип столбца; · <домен> – имя домена; · DEFAULT – определяет значение, которое по умолчанию заносится в столбец при вставке новой записи; · <огранич_столбца> – ограничения, накладываемые на значения столбца; · COLLATE collation – определяет порядок сортировки символов (для символьных столбцов). Внешние и временные таблицы С помощью спецификатора EXTERNAL [FILE] «имя_файла» можно создать внешнюю (т. е. расположенную вне БД) таблицу. При создании внешних таблиц все содержащиеся в таблице данные помещаются во внешний файл, однако сама таблица остается связанной с той БД, которая была активна на момент создания внешней таблицы. Сервер разрешает вставлять в нее записи, но отказывается их изменять или удалять. При удалении таблицы оператором DROP TABLE внешний файл не уничтожается. Для внешней таблицы нельзя создать индексы. Основное назначение внешних таблиц – обмен данными между разными БД. В реальной работе с БД часто возникает необходимость создания временных таблиц – для обработки статистических данных, проведения сложных сортировок и т. д. После использования временной таблицы она удаляется оператором DROP TABLE. Вычисляемые столбцы С помощью спецификатора COMPUTED [BY] в таблице можно создать вычисляемый столбец. Вычисление выражения осуществляет не клиентская программа, а сервер. Пример. Определим столбец PRVS (пропуски «всего») в таблице PROPUSKU: ALTER TABLE PROPUSKU ADD PRVS COMPUTED (PRUV+PRNUV) Здесь: · PRUV – пропуски «уважительные»; · PRNUV – пропуски «неуважительные». Определение ключей и ссылочных целостностей С помощью спецификатора PRIMARY KEY можно указать столбец (столбцы), по которому (которым) в таблице будет построен первичный ключ. Если в первичный ключ входит единственный столбец, спецификатор ставится при определении столбца: CREATE TABLE MyTable( Col1 INT NOT NULL PRIMARY KEY, Col2 VARCHAR(20) ); Если в состав первичного ключа должны входить несколько столбцов, спецификатор ставится после определения всех столбцов: CREATE TABLE MyTable( Col1 INT NOT NULL, Col2 VARCHAR(20) NOT NULL, PRIMARY KEY(Col1, Col2) ); Столбцы, по которым строится первичный ключ, не могут быть пустыми. Поэтому при их определении указывается спецификатор NOT NULL. Внешний ключ создается для обеспечения ссылочной целостности в дочерней таблице с помощью спецификатора FOREIGN KEY, который имеет такой формат: FOREIGN KEY(<сп_столбцов_дочерней_табл>) REFERENCES <имя_родит_табл>[<сп_столбцов_ родит_табл>] [ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}] [ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}] Здесь: § <сп_столбцов_дочерней_табл> – список столбцов дочерней таблицы, которые входят во внешний ключ; § <имя_родит_табл> – имя родительской таблицы; § <сп_столбцов_родит_табл> – список столбцов родительской таблицы, которые являются ключевыми для связи таблицы (список можно опускать, если связь с родительской таблицей устанавливается по первичному ключу); § необязательные параметры ON DELETE и ON UPDATE указывают, что должен делать сервер при соответственно удалении и изменении первичного ключа родительской таблицы:
Пусть в БД созданы две таблицы: P – родительская и C – дочерняя. CREATE TABLE P( P_ID INT NOT NULL PRIMARY KEY, P_Other INT ); CREATE TABLE C( C_Number INT, C_Other INT, FOREIGN KEY(C_Number) REFERENCES P ON UPDATE CASCADE ON DELETE NO ACTION ); Сервер отслеживает ссылочную целостность этих таблиц.
Рис. 1. Родительская (а) и дочерняя (б) таблицы до изменения первичного ключа
Рис. 2. Родительская (а) и дочерняя (б) таблицы после изменения первичного ключа Удаление записи из родительской таблицы, в которой объявлена ссылочная целостность ON DELETE NO ACTION, возможно только в двух случаях: § в дочерней таблице нет записей, ссылающихся на удаляемое значение первичного ключа; § для родительской таблицы определен триггер BEFORE DELETE, в котором удаляются все детальные записи дочерней таблицы (триггер BEFORE DELETE срабатывает до серверной проверки ссылочной целостности): CREATE TRIGGER BEF_DEL FOR P BEFORE DELETE AS BEGIN DELETE FROM C WHERE C_Number=OLD.P_ID; END Ссылочную целостность, объявляемую внешним ключом можно именовать. Для этого используется спецификатор CONSTRAINT <Имя_ссылочной_целостности>. Например: CREATE TABLE C( C_Number INT, C_Other INT, CONSTRAINT Cons_C FOREIGN KEY(C_Number) REFERENCES P ON UPDATE CASCADE ON DELETE NO ACTION ); Именование ссылочной целостности не влияет на работу сервера, однако именованную целостность впоследствии можно удалить без переопределения всей таблицы, сославшись не ее имя.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (537)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |