У меня вопрос об использовании значения NULL или значения по умолчанию для столбцов внешнего ключа в базе данных. Я нашел много противоположных мнений о значениях null и значениях по умолчанию при разработке баз данных, но не только о внешних ключах (каковы основные плюсы и минусы).
В настоящее время я разрабатываю новую базу данных, в которой будет храниться много данных для различных веб-приложений и других систем с различными подходами к доступу к данным (ORM, хранимые процедуры), и я хочу реализовать общие правила на самом низком уровне (база данных). (Так что не беспокойтесь об этих правилах позже в приложениях).
В качестве примера скажем, что у меня есть таблица пользователей User
со столбцом внешнего ключа для его национальности NationalityID
, которая является первичным ключом CountryID
для таблицы Country
.
Теперь у меня есть два / три варианта:
A: Я разрешаю столбцу NationalityID
(и всем другим аналогичным столбцам внешнего ключа в базе данных) иметь значение NULL и просто придерживаюсь общего подхода проверки всегда и везде на значение NULL (применение правил в приложении)
or
B: Я назначаю значение по умолчанию для каждого внешнего ключа, скажем, «-1», и помещаю в каждую таблицу отношений дополнительный столбец с «-1» в качестве ключа, а все другие данные - как «Нет данных» (для этого примера в Country
table я помещаю столбец с CountryID "-1" и для CountryName
я устанавливаю "Нет данных"). Таким образом, каждый раз, когда я захочу узнать национальность пользователей, я всегда буду получать результат без дополнительных правил кода (мне не нужно проверять, является ли он нулевым или нет).
or
C: Я могу запретить нулевое значение для внешних ключей. Но это действительно то, чего я хочу избежать. (Мне нужно иметь возможность хранить хотя бы основные данные (имя пользователя), если не дополнительные данные (национальность пользователя))
Итак, B - хороший подход или нет? Что мне здесь не хватает? Теряю ли я больше, чем получаю при таком подходе? Какие проблемы могут возникнуть у меня (помимо того, что нужно всегда иметь дополнительный столбец в реляционных таблицах со значением ID «-1», что означает «Нет данных»)?
Каков ваш хороший / плохой опыт работы со значениями по умолчанию внешнего ключа?
Спасибо