русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Определение первичного и внешнего ключей


Дата добавления: 2013-12-24; просмотров: 1109; Нарушение авторских прав


Кроме определений столбцов таблицы, в инструкции CREATE TABLE указывается информация о первичном ключе таблицы и ее связях с другими таблицами базы данных. Эта информация содержится в предложениях PRIMARY KEY и FOREIGN KEY. Большинство основных реляционных СУБД поддерживает эти предложения.

В предложении PRIMARY KEY задается столбец, или столбцы, которые образуют первичный ключ таблицы. Как уже говорилось, этот столбец (или комбинация столбцов) служит в качестве уникального идентификатора строк таблицы. СУБД автоматически следит за тем, чтобы первичный ключ каждой строки таблицы имел уникальное значение. Кроме того, в определениях столбцов первичного ключа должно быть указано, что они не могут содержать значения NULL (имеют ограничение NOT NULL).

В предложении FOREIGN KEY задается внешний ключ таблицы и определяется связь, которую он создает для нее с другой таблицей (таблицей-предком). В нем указываются:

• столбец или столбцы создаваемой таблицы, которые образуют внешний ключ; таблица, связь с которой создает внешний ключ – это таблица – предок, а определяемая таблица в данном отношении является потомком;

• необязательное имя для этого отношения; оно не используется в инструкциях SQL, но может появляться в сообщениях об ошибках и потребуется в дальнейшем, если будет необходимо удалить внешний ключ;

• необязательное правило удаления для данного отношения (CASCADE, как описывалось в предыдущем разделе), которое определяет действие, предпринимаемое при удалении строки-предка;

• необязательное правило обновления для данного отношения (эти правила описаны в предыдущем разделе), которое определяет действие, предпринимаемое при обновлении первичного ключа в строке-предке;

Вообще правил удаления всего четыре, однако правила SET NULL и SET DEFAULT некоторыми основными СУБД не поддерживаются, поэтому они и не указаны в синтаксической диаграмме, а правило RESTRICT не нуждается в явном указании, так как в большинстве СУБД воспринимается по умолчанию. Правил обновления также четыре, однако например даже в такой мощной среде как ORACLE ни одно из них, за исключением запрещающего, не работает. На синтаксической диаграмме для наглядности задания директивы CREATE TABLE, правило каскадного обновления (ON UPDATE CASCADE) всё же включено, что, однако не делает его “рабочим” в некоторых системах.



В качестве примера рассмотрим инструкцию CREATE TABLE для создания таблицы сделанных заказов (ORDERS) базы данных, структура которой изображена на рисунке 14 со всеми внешними ключами и именованными связями посредством них созданными.

Создать таблицу ORDERS с первичными и внешними ключами

create table orders (order_n integer not null,

ord_date date not null,

cust_n integer,

sale_n integer,

prod_n varchar2(10),

qty intrger,

amount integer,

primary key (order_n),

constraint placed_by foreign key (cust_n) references customers on delete cascade,

constraint taken_by foreign key (sale_n) references salesreps,

constraint is_for foreign key (prod_n) references products);

 

Когда СУБД выполняет инструкцию CREATE TABLE, она сравнивает определение каждого внешнего ключа с определениями связанных таблиц. СУБД проверяет, соответствуют ли друг другу внешний ключ и первичный ключ в связанных таблицах, как по числу столбцов, так и по типу данных. Для того чтобы такая проверка была возможна, связанная таблица уже должна быть определена.

Если две или более таблиц образуют ссылочный цикл, то для первой создаваемой таблицы невозможно определить внешний ключ, так как связанная с нею таблица еще не существует. СУБД откажется выполнять инструкцию CREATE TABLE, выдав сообщение о том, что в определении таблицы присутствует ссылка на несуществующую таблицу. В этом случае необходимо создать таблицу без определения внешнего, ключа и добавить данное определение с помощью инструкции ALTER TABLE, которая рассматривается ниже в настоящем разделе.



<== предыдущая лекция | следующая лекция ==>
Определения столбцов | Добавление и удаление столбца


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.188 сек.