Что означает / должно означать NULL вместе с отношениями FK - База данных - PullRequest
16 голосов
/ 18 марта 2009

Мне было трудно создавать отношения FK в моей реляционной базе данных SQL, и после краткого обсуждения на работе мы поняли, что у нас есть пустые столбцы, которые, скорее всего, способствуют возникновению проблемы. Я всегда рассматривал NULL как значение неназначенное, не указано, пусто и т. Д. И действительно никогда не видел проблемы с этим.

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

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

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

Ответы [ 12 ]

2 голосов
/ 18 марта 2009

Я не вижу проблемы со значениями NULL, если поле может быть пустым. Злоупотребление допускает нулевые значения, когда в этом поле должна быть информация.

0 голосов
/ 18 марта 2009

Таблица соединения является правильным методом.

Нули в ключах указывают на плохой дизайн базы данных.

Нулевое значение не неназначено / пусто / пусто / и т. Д., Данные отсутствуют / неизвестны.

Использование пустых значений в поле внешнего ключа не означает «нет связи», это означает «я не знаю, есть ли связь или нет», что явно плохо.

...