Да, существуют различные подходы для моделирования отсутствующей информации без использования нулей.
Вы можете выбрать значение для представления отсутствующей.Это довольно сложно реализовать, поэтому вот несколько примеров.Для атрибута end_date
в открытом периоде (т. Е. Начался, но находится в процессе и еще не завершен), используйте дату в далеком будущем, например 9999-12-31
.Для атрибута person_middle_name
Джо Селко предлагает поместить значения метаданных в двойные фигурные скобки, например, {{NK}}
для «неизвестно», {{NA}}
для «не применимо» и т. Д.
Еще один несколько интуитивный подход длямоделирование недостающей информации осуществляется по отсутствию строки в таблице.Если работник не оплачивается, не добавляйте для него строку в таблице Payroll
, что отличает его от наемного сотрудника, который в настоящее время не получает заработную плату, представленную нулевым значением salary_amount
в таблице Payroll
.
Еще один подход заключается в наличии строки в таблице.Вы можете иметь таблицы для Salaried
, Unsalaried
и SalaryUnknown
и убедиться, что у каждого сотрудника есть одна строка в одной из этих таблиц (возможно, в MySQL применяется триггеры и / или процедуры).