Первичные и внешние ключи - PullRequest
1 голос
/ 05 июля 2011

Простой вопрос, похоже, не могу найти ответ в Google.Я нормализую базу данных и преобразовываю одну из таблиц во 2-ую нормальную форму.Вопрос: может ли первичный ключ таблицы быть внешним ключом в той же таблице?

Если это облегчает понимание, я пытаюсь устранить частичные зависимости в таблице (но это, вероятно, было очевидно, так как я упомянул 2-ую нормальную форму).

У меня есть таблицаЭлемент JobItem, который выглядит следующим образом:

Job No (PK), Item Code (PK), PO Num, Item Description, Item Type, Vendor, Job Name

Job Name частично зависит от компонента Job No ключа.Item Description, Item Type and Vendor зависит от компонента Item Code.PO Num зависит от всего ключа.

То, что я спрашиваю, состоит в том, чтобы, как только я вычеркну частичные зависимости в свои собственные таблицы, компоненты моего ключа также станут внешними ключами для ссылки на новые таблицы?

РЕДАКТИРОВАТЬ: конкретизировать пример, чтобы быть немного более уместным.

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Как то так?

enter image description here

1 голос
/ 05 июля 2011

Вы получите лучшие ответы, если опубликуете DDL таблицы.(Разместите скрипт CREATE TABLE.) Как правило, всегда публикуйте операторы DDL и INSERT для примеров данных.

Вопрос: может ли первичный ключ таблицы быть внешним ключом вта же таблица?

Да, но это не описывает вашу ситуацию.Ваш первичный ключ находится в одной таблице (таблица B), а внешний ключ - в другой таблице (таблица A).

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

На самом деле, вы можете найти довольно много проектов для SO - и не просто для SO - которые используют внешние ссылки с самообращающимися ссылками, когда они действительно не должны.Это еще одна веская причина для публикации DDL.

Позже

То, что я спрашиваю, как только я уберу частичные зависимости в свои собственные таблицы, станут ли компоненты моего ключа чужими ключамиссылаться на новые таблицы?

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

...