Простой вопрос проектирования базы данных о внешних ключах - PullRequest
3 голосов
/ 22 декабря 2010

У меня простой вопрос о разработке базы данных ...

Допустим, у нас есть Table Customer с некоторыми полями:

(PK) Id, 
Firstname, 
Lastname, 
Address, 
City, 
(FK) Sex_Id...

Итак ...

Было бы неплохо иметь дополнительную таблицу Table Sex, в которую будут сохраняться данные о сексе ('M', 'W')?

Sex_Id,
Value

или Sex значения ('M' или 'W') должны быть сохранены непосредственно в таблицу Customer? А как насчет скорости запросов и т. Д.?

Заранее спасибо, С наилучшими пожеланиями.

Ответы [ 5 ]

2 голосов
/ 22 декабря 2010

Или можно использовать существующий стандарт.ISO 5218 охватывает четыре кода:

0 = Not Known
1 = Male
2 = Female
9 = Not applicable (lawful person such as corporation, organization etc)

ISO 5218 является юридической кодировкой и не применяется в медицинском / биологическом аспекте.

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

Измерения и стандарты данных Джо Селко в SQL - отличное (хотя и скучное) чтение.

1 голос
/ 22 декабря 2010

Вы можете попробовать многозначный атрибут , но я предпочитаю делать это: если есть только 2 значения, вы можете рассмотреть возможность использования типа BOOL для этого атрибута в вашей БД и сделать 0 = Male и 1= Женщина (комментируя, конечно, чтобы избежать путаницы).Когда данные вводятся во внешнюю программу (если она есть), вы можете просто выполнить быстрое отображение, где, если они проверяют «мужской», атрибут равен 0 в БД, а если они проверяют «женский», значение атрибута равно1 в БД.

0 голосов
/ 22 декабря 2010

в вашем примере дополнительная таблица ничего не покупает.

@ marc_s имеет правильную идею, чтобы добавить хорошее CHECK CONSTRAINT, чтобы убедиться, что локальные значения находятся в правильном подмножестве.

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

0 голосов
/ 22 декабря 2010

Вы можете использовать символ для столбца, сохраняя «M» или «W», а также использовать внешний ключ в таблице (первичный ключ символа), если вам нужно сохранить какие-либо дополнительные сведения об этой вещи;Вы получаете преимущество простых в написании / чтении запросов (не требуется объединение) для базовых элементов, но при этом у вас есть возможность добавлять больше данных позже.Sex таблица, вы, вероятно, вообще не могли бы создать ее сейчас и добавить позже, когда вам это действительно нужно.

0 голосов
/ 22 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...