В дополнение к моему вопросу «Зачем использовать« не нулевой первичный ключ »в TSQL?» ...
Как я понял из других обсуждений, некоторые СУБД (например, SQLite, MySQL ) допускают "уникальный" NULL в первичном ключе.
Почему это разрешено и чем это может быть полезно?
Справочная информация: Я считаю, что для общения с коллегами и специалистами по базам данных полезно знать различия в фундаментальных концепциях, подходах и их реализациях в разных СУБД.
В целях определения уникальности значений первичного ключа, значения NULL считаются отличными от всех других значений, включая другие NULL.
Если оператор INSERT или UPDATE пытается изменить содержимое таблицы так, чтобы две или более строк содержали идентичные значения первичного ключа, это является нарушением ограничения. Согласно стандарту SQL PRIMARY KEY всегда должно подразумевать NOT NULL. К сожалению, из-за давнего надзора за кодированием в SQLite это не так.
Если столбец не является INTEGER PRIMARY KEY SQLite допускает значения NULL в столбце PRIMARY KEY . Мы могли бы изменить SQLite, чтобы он соответствовал стандарту (и мы можем сделать это в будущем), но к тому времени, когда была обнаружена недоработка, SQLite был настолько широко использован, что мы опасались взломать устаревший код, если исправим проблему.
Итак, пока мы решили продолжить разрешать NULL в столбцах PRIMARY KEY.Однако разработчики должны знать, что в будущем мы можем изменить SQLite, чтобы он соответствовал стандарту SQL, и должны соответствующим образом разрабатывать новые программы.