Первичный ключ - это атрибут или набор атрибутов, которые однозначно идентифицируют строку в таблице. Но первичный ключ должен быть не только уникальным, но и минимальным. Почему это необходимо?Почему первичный ключ должен быть минимальным?
ответ
Причина, по которой важно идентифицировать минимальные ключи, заключается в обеспечении отсутствия избыточности в зависимостях от этих ключей. Избыточность может вызывать аномалии и неправильные результаты.
Минимум является по существу семантическим веществом, а не просто структурным признаком, поэтому он не обязательно требуется для реализации базы данных. Например, SQL позволяет вам создать «ПЕРВИЧНЫЙ КЛЮЧ» на любом суперкласте, который не может быть неприводимым суперключем.
Минимум не имеет никакого отношения к размеру хранения, поскольку минимальные средства неприводимы, это не значит наименьшее.
Первичные ключи должны быть минимальными, так как они должны быть достаточно большими, чтобы уникально определить строку. Все остальное - это отходы в терминах используемого пространства указателей.
Другими словами, если у меня есть уникальная колонка username
вместе с другим уникальным столбцом student_id
, первичный ключ, построенный из обоих, является отходами. Обычный способ справиться с этим был бы одним из них в качестве первичного ключа, а затем с уникальным ограничением/индексом.
- 1. SQL: где должен быть задан первичный ключ
- 2. Должен ли первичный ключ быть постоянным int?
- 3. Первичный ключ таблицы памяти должен быть HASH, почему?
- 4. Почему первичный ключ дубликат
- 5. MySQL первичный ключ должен быть записан в скобках
- 6. Должен ли первичный ключ быть включен в обычные индексы
- 7. SQLite исключение ограничений первичный ключ должен быть уникальным
- 8. INFORMATION_SCHEMA.COLUMNS: и должен быть Первичный ключ: запрос Mysql
- 9. «INSERT INTO» внезапно возвращает ошибку «ПЕРВИЧНЫЙ КЛЮЧ должен быть уникальным»
- 10. Каким должен быть ключ?
- 11. Должен ли я использовать Первичный ключ здесь?
- 12. Должен ли первичный ключ MySQL быть просто INTEGER или должен быть UNSIGNED INTEGER (соответствующего размера)?
- 13. Джанго модель не возвращает первичный ключ, почему первичный ключ ни
- 14. varchar() первичный ключ или int первичный ключ?
- 15. Почему первичный ключ быстрее индекса?
- 16. Dynamodb: Почему первичный ключ не может быть частью выражения фильтра?
- 17. Постоянный объект Hibernate должен иметь первичный ключ
- 18. Составной первичный ключ против автоинкрементируемого Первичный ключ
- 19. postgresql: изменить первичный ключ
- 20. Почему SQLite не увеличивает мой первичный ключ?
- 21. Почему единственный первичный ключ лучше составных?
- 22. Symfony2 и Doctrine2: Идентификатор/первичный ключ, определенные для объекта «X». У каждого объекта должен быть идентификатор/первичный ключ
- 23. Grails: внешний ключ как первичный ключ?
- 24. Почему mysql обрабатывает столбец как первичный ключ?
- 25. составной первичный ключ и столбец автоинкремент, но НЕ первичный ключ
- 26. Первичный ключ postgres synchornized
- 27. Почему первичный ключ и вторичный ключ в концентраторе Azure IoT?
- 28. Constraint первичный ключ
- 29. Нет идентификатора/первичный ключ, указанный для лица (...) Каждый объект должен иметь идентификатор и/первичный ключ
- 30. Первичный ключ на колонке
«экземпляр SQL позволяет создавать ПЕРВИЧНЫЙ КЛЮЧ на любой супер-клавише, что может быть неприводимым суперключем». На самом деле SQL * не может * помешать вам сделать это, потому что минимальность - это теоретическое свойство, определение которого относится ко всем возможным значениям. СУБД не может знать, что вы собираетесь хранить в таблице, поэтому невозможно определить, является ли ваш уникальный ключ минимальным или нет - он может только сказать вам, если он не уникален. – sleske
sleske: СУБД может в принципе сказать, когда суперключ не минимален, если есть дополнительные ограничения. Например, в следующем случае предполагаемый «первичный» ключ (a, b) явно НЕ минимален: CREATE TABLE t1 (INT NOT NULL UNIQUE, b INT NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ (a, b)); – sqlvogel