Является ли NULL подходящим значением для применимого, известного ненулевого значения в записи?(то есть известно, что значение равно «нет значения») - PullRequest
0 голосов
/ 04 июля 2011

Википедия говорит, что NULL предназначена для представления "недостающей информации и неприменимой информации".

Я всегда недооценивал NULL, чтобы подходить для представления «Неизвестной» информации, так как в поле применимо к записи, это просто неизвестное значение.

Учитывая проблемы, которые NULL вводит в запросы (3-точечная логика и тонны исключений, которые необходимо учитывать), если NULL все еще будет использоваться в записях для полей, которые не применимы к запись? Или его следует использовать только для соответствующих полей, значения которых неизвестны для данной записи?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Я тоже принимаю null в значении «неизвестно», но «неприменимо» подходит, например, при сохранении записи сотрудника генерального директора, мы устанавливаем employee_manager_id = null, поскольку у генерального директора нет менеджера.

Один из способов избежать проблем с нулями - использовать вместо этого специальное значение, например, сохранить -1 для person.age, но тогда вам придется немного сложнее проверить это значение. При использовании специального значения для внешнего ключа (как в примере с идентификатором менеджера) вам фактически нужно создать фиктивную запись, например, с id = 0, и это может создать проблемы при обработке «всех сотрудников» - вы должны пропустить фиктив запись.

Лично я думаю, что вещи остаются чище, просто используя null и испытывая трудности с более сложным SQL - по крайней мере, все знают, что происходит.

1 голос
/ 04 июля 2011

На самом деле Null означает не «неизвестный», а просто «нет данных».Он используется в SQL (и других средах), где данные просто отсутствуют для данного поля.

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

Если Null просто неприемлемо (то есть вы не можете иметь свою структуру данных без-null value), тогда вам лучше вообще избегать понятий «неизвестно» и «нет данных».Сделайте поле обязательным, установив значение Null для столбца SQL в значение false;это делает так, что Null не может быть введено как допустимое значение.Например,

CREATE TABLE foo (bar INT NOT NULL);
...