Ошибка на стороне NOT NULL. В какой-то момент вам придется решить, что означает «NULL» в вашем приложении - скорее всего, для разных столбцов это будет по-разному. Некоторые из распространенных случаев: «не указано», «неизвестно», «неприменимо», «еще не произошло» и т. Д. Вы будете знать, когда вам нужно одно из этих значений, а затем вы можете соответствующим образом разрешить столбец NULLable и код логики вокруг него.
Разрешение случайным вещам быть NULL, рано или поздно, всегда IME кошмара. Используйте NULL осторожно и экономно - и знайте, что это значит в вашей логике.
Edit: Кажется, есть идея, что я спорю о NO пустых столбцах, когда-либо. Это нелепо. NULL полезен, но только там, где ожидается.
Хороший пример - пример Le Dorfier DateOfDeath. NULL DateOfDeath будет означать «еще не произошло». Теперь я могу написать представление LivingPersons WHERE DateOfDeath IS NULL
.
Но что означает NULL OrderDate? Что заказ еще не сделан? Даже если есть запись в таблице заказов? Как насчет пустого адреса? Именно эти мысли должны пройти через вашу голову, прежде чем вы позволите NULL быть значением.
Назад к DateOfDeath - запрос лиц WHERE DateOfDeath > '1/1/1999'
не будет возвращать записи NULL - даже если мы логически знаем, что они должны умереть после 1999 . Это то, что вы хотите? Если нет, то вам лучше включить OR DateOfDeath IS NULL
в этот запрос. Если вы разрешите все столбцы иметь значение NULL, вам придется думать об этом каждый раз, когда вы пишете запрос . IME, это слишком много для умственного налога для 10% или около того столбцов, которые на самом деле имеют законное значение, когда они равны NULL.