2015-01-12 3 views
0

У меня есть таблица "Position" Wich Allready существуетНормализация базы данных: внешний ключ = первичный ключ?

  • PositionID (PK) INT
  • PositionText
  • ...

Теперь я должен создать новую таблицу "PositionComment" (Мне не разрешено редактировать позицию в таблице, поэтому мне нужно создать новую). Соотношение 1: 0..1 (оно застраховано через код, что 1 позиция может содержать только 1 комментарий).

Так что я должен иметь первичный ключ в новой таблице - но:

Для правил нормализации:

Должен ли я сделать внешний ключ = первичный ключ, потому что 1: 0..1 например:

  • PositionID (PK, FK для позиционно-таблицу)
  • CommentText

ИЛИ

Должен ли я сделать собственный первичный ключ например:

  • CommentID (PK)
  • PositionID (FK для позиционно-таблицу)
  • CommentText

Разница в том, что из-за того, что в первом предложении я использую другой ПК как ПК во второй таблице ... Но во втором предположении я имею двойную идентификацию ifme, потому что CommentID и PositionID будут уникальными для 1 строки ...

Как это сделать для нормализации и почему?

+8

Что касается администраторов баз данных, то «гарантированный с помощью кода» _exactly_ равнозначен «не гарантируется вообще» :-) Однако, если вы сделаете его первичным ключом новой таблицы, оно будет гарантировано. Через БД. Где это должно быть. – paxdiablo

+0

Я бы пошел со вторым вариантом. Что делать, если в будущем изменения меняются в зависимости от одного-двух сценариев? – danish

ответ

0

Please take a look at this.

Кажется, что кто-то еще задал аналогичный вопрос раньше.

Внешние ключи почти всегда «Разрешают дубликаты», что сделало бы их непригодными в качестве Первичного ключа.

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

Единственным исключением из этого являются таблицы с отношением «один к одному», где внешний ключ и первичный ключ связанной таблицы являются одними и теми же.

Но вы должны также рассмотреть это:

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

3

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

Смежные вопросы