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