Продвижение сайта по поисковым запросам, контекстная реклама, качественный копирайтинг и рерайтинг, создание сайта под ключ, QA процедуры и аудит в ИТ, бизнес анализ в Киеве, Украина.

Поиск

Админ

Первичный ключ как уникальный внешний ключ sql


Первичный ключ как уникальный внешний ключ sql

Ссылка ваших внешних ключей только на первичные ключи, как мы это делали в типовых таблицах, — хорошая стратегия. Когда вы используете внешние ключи, вы связываете их не просто с родительскими ключами, на которые они ссылаются; вы связываете их с определенной строкой таблицы, где этот родительский ключ будет найден. Сам по себе родительский ключ не обеспечивает никакой информации, которая бы не была уже представлена во внешнем ключе. Смысл, например, поля snum как внешнего ключа в таблице Заказчиков — это связь, которую он обеспечивает, не к значению поля snum, на которое он ссылается, а к другой информации в таблице Продавцов, такой, например как имена продавцов, их местоположение, и так далее. Внешний ключ — это не просто связь между двумя идентичными значениями; это — связь, с помощью этих двух значений, между двумя строками таблицы указанной в запросе.

Это поле snum может использоваться чтобы связывать любую информацию в строке из таблицы Заказчиков со ссылочной строкой из таблицы Продавцов — например, чтобы узнать, живут ли они в том же самом городе, кто имеет более длинное имя, имеет ли продавец кроме данного заказчика каких-то других заказчиков, и так далее.

Так как цель первичного ключа состоит в том, чтобы идентифицировать уникальность строки, это более логичный и менее неоднозначный выбор для внешнего ключа. Для любого внешнего ключа, который использует уникальный ключ как родительский ключ, вы должны создать внешний ключ который бы использовал первичный ключ той же самой таблицы для того же самого действия. Внешний ключ который не имеет никакой другой цели кроме связывания строк, напоминает первичный ключ, используемый исключительно для идентификации строк, и является хорошим средством сохранить структуру вашей базы данных ясной и простой, и, следовательно создающей меньше трудностей.

Ограничения внешнего ключа

Внешний ключ, в частности, может содержать только те значения, которые фактически представлены в родительском ключе или пустые (NULL). Попытка ввести другие значения в этот ключ будет отклонена.

Вы можете объявить внешний ключ как NOT NULL, но это необязательно, и в большинстве случаев нежелательно. Например, предположим, что вы вводите заказчика, не зная заранее, к какому продавцу он будет назначен. Лучший выход в этой ситуации будет, если использовать значение NOT NULL, которое должно быть изменено позже на конкретное значение.

Что случится, если вы выполните команду модификации

Давайте условимся, что все внешние ключи, созданные в наших таблицах примеров, объявлены и предписаны с ограничениями внешнего ключа следующим образом:

CREATE TABLE Salespeople (
snum  integer NOT NULL PRIMARY KEY,
sname char(10) NOT NULL,
city  char(10),
comm  decimal);

CREATE TABLE Customers (
cnum   integer NOT NULL PRIMARY KEY,
cname  char(10) NOT NULL,
city   char(10),
rating integer,
snum   integer,
FOREIGN KEY (snum) REFERENCES Salespeople,
UNIQUE (cnum, snum));

CREATE TABLE Orders (
cnum  integer NOT NULL PRIMARY KEY,
amt   decimal,
odate date NOT NULL,
cnum  integer NOT NULL
snum  integer NOT NULL
FOREIGN KEY (cnum, snum) REFERENCES
CUSTOMERS (cnum, snum));

Популярность: 13%




Оставить комментарий или два


Навигация

Блог / Главная / Разработка / Первичный ключ как уникальный внешний ключ sql

Инфо

Запись опубликовал admin 29 апреля 2010 года и разместил в рубрике Разработка.   Запись имеет метки:   К статье пока нет комментариев. Вы можете быть первым.  

Случайные записи

Подзапросы в предложении HAVING sql Отсутствие описания ошибочного и ожидаемого поведения нестандартные средства SQL Использование агрегатных функций в подзапросах