Я должен не согласиться с Иэн. Логика с тремя значениями так же жизнеспособна, как и логика с двумя значениями. Человек за столом жив или мертв, или вы не знаете, жив он или мертв. Если бы у Майка был свой путь, ты не мог бы использовать немного здесь. Вам понадобится FK для таблицы состояния, 1 = живой, 2 = мертвый, 3 = неизвестный.
Целью бита является экономия места. Вы всегда можете сделать столбец CHAR (1) с ограничением, ограничивающим значения T или F, Y или N (или U).
Но я думаю, что Иэн неверно истолковывает то, что говорит Майк. Майк не препятствует использованию Null, в конце концов он думает, что столбец EndDate должен быть нулевым, пока процесс не будет завершен. Он просто говорит: не наполняйте пустое значение в столбце мистическими свойствами ... как будто это ключ к знанию, находится ли процесс в определенном состоянии.
На самом деле, Null в базе данных имеет некоторые очень полезные побочные эффекты. Oracle (возможно, другие базы данных) не индексирует нули. Поэтому если у вас есть столбец, в котором важно только одно значение, например, у вас есть список сотрудников, который вы никогда не чистите, и битовый столбец Is_Active_Employee, который проиндексирован. В этом случае для установленного бизнеса число сотрудников, которое вы имели, составляет >>>, чем количество сотрудников, которые у вас есть сейчас. Скажем, у вас есть 1% 1 и 99% 0.
Этот индекс в 99 раз больше, чем нужно. Он индексирует все 1, что хорошо, так как они составляют 1% от таблицы, но он также загружен 0 для строк, которые НИКОГДА НЕ МОЖЕТЕ использовать этот индекс для поиска. Если вы хотите, чтобы все неактивные сотрудники были проиндексированы, они игнорировались и выполнялась FTS. Так что 1 и NULL были бы НАМНОГО более эффективными с точки зрения базы данных.