Внешние ключи дизайна базы данных - PullRequest
0 голосов
/ 20 сентября 2010

В моей базе данных две таблицы:

[Employee] Table:
 Id (Primary Key, Autoincrement)
 FirstName
 LastName
 Status

[Status] Table:
 Status (Primary Key)

Статус имеет одно из следующих значений: «FullTime», «Исполнитель», «Завершено»,

Как [Сотрудник] .Статус должен ссылаться на [Статус] .Статус как внешний ключ? Я вижу два способа сделать это:

  1. [Сотрудник]. Статус указывает непосредственно на [Статус]. Статус
  2. Я добавляю столбец Id в таблицу [Status] и делаю его PK / Autoincrement. Затем [Employee] .Status указывает на [Status] .Id. Это означает, что я должен сделать соединение, чтобы получить текст статуса.

Другие таблицы также могут ссылаться на таблицу состояния. Является ли один из двух методов «правильным» способом ведения дел или оба являются вопросом дизайна?

Ответы [ 2 ]

4 голосов
/ 20 сентября 2010

Это в основном вопрос дизайна, но обычно лучше добавить поле ID в таблицу Status.Это позволяет вносить изменения в значения статуса (исправление орфографии, языковой перевод, изменение термина для уточнения значения и т. Д.) Без необходимости обновления данных в таблицах, которые на него ссылаются.

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

0 голосов
/ 20 сентября 2010

третий вариант в более сложных таблицах, в которых вы хотите удалить записи и обновить имена без потери ссылки, будет выглядеть примерно так:

[Employee] Table:
 Id (Primary Key, Autoincrement)
 FirstName
 LastName
 StatusNumber

[Status] Table:
Id (PK)
Number
Name
...