NULL разрешен в первичном ключе - почему и в какой СУБД?

В дополнение к моему вопросу «Зачем использовать« не нулевой первичный ключ »в TSQL?» ...

Как я понял из других обсуждений, некоторые СУБД (например, SQLite, MySQL ) допускают "уникальный" NULL в первичном ключе.

Почему это разрешено и чем это может быть полезно?

Справочная информация: Я считаю, что для общения с коллегами и специалистами по базам данных полезно знать различия в фундаментальных концепциях, подходах и их реализациях в разных СУБД.

Примечания

  • MySQL восстанавливается и возвращается в список «NOT NULL PK».
  • SQLite был добавлен (благодаря Полу Хэдфилду) в список «NULL PK»:

В целях определения уникальности значений первичного ключа, значения NULL считаются отличными от всех других значений, включая другие NULL.

Если оператор INSERT или UPDATE пытается изменить содержимое таблицы так, чтобы две или более строк содержали идентичные значения первичного ключа, это является нарушением ограничения. Согласно стандарту SQL PRIMARY KEY всегда должно подразумевать NOT NULL. К сожалению, из-за давнего надзора за кодированием в SQLite это не так.

Если столбец не является INTEGER PRIMARY KEY SQLite допускает значения NULL в столбце PRIMARY KEY . Мы могли бы изменить SQLite, чтобы он соответствовал стандарту (и мы можем сделать это в будущем), но к тому времени, когда была обнаружена недоработка, SQLite был настолько широко использован, что мы опасались взломать устаревший код, если исправим проблему.

Итак, пока мы решили продолжить разрешать NULL в столбцах PRIMARY KEY.Однако разработчики должны знать, что в будущем мы можем изменить SQLite, чтобы он соответствовал стандарту SQL, и должны соответствующим образом разрабатывать новые программы.

- SQL в понимании SQLite: СОЗДАТЬ ТАБЛИЦУ

19
задан Community 23 May 2017 в 12:34
поделиться