Когда нам не нужен первичный ключ для нашей таблицы? - PullRequest
12 голосов
/ 31 марта 2011

Когда-нибудь случится, что мы создадим таблицу, для которой не нужен первичный ключ?

Ответы [ 4 ]

20 голосов
/ 31 марта 2011

номер

Первичный ключ делает много вещей за кулисами, даже если ваше приложение никогда не использует его.

Например: кластеризация повышает эффективность (потому что таблицы кучи беспорядок).

Не говоря уже о том, что ЛЮБОМ когда-либо приходится делать что-то на вашем столе, требующее вытягивания определенной строки, а у вас нет первичного ключа, вы плохой парень.

8 голосов
/ 31 марта 2011

Да.

Если у вас есть таблица, которая всегда будет выбираться полностью и на которую ссылаются ноль других таблиц, таких как какие-то автономные настройки или таблица конфигурации, то нет смысла иметь первичный ключ и аргумент Некоторые могут предположить, что добавление PK в этой ситуации будет обманом при обычном использовании такой таблицы.

Это редко , и, вероятно, когда это чаще всего делается, это делается неправильно , но они существуют, и такие случаи могут быть действительными.

3 голосов
/ 31 марта 2011

Зависит.

Что такое первичный ключ / уникальный ключ?

При проектировании реляционной базы данных уникальный ключ может однозначно идентифицировать каждую строку в таблице и тесно связан с концепцией Superkey. Уникальный ключ содержит один столбец или набор столбцов. Никакие две отдельные строки в таблице не могут иметь одинаковое значение (или комбинацию значений) в этих столбцах, если значения NULL не используются. В зависимости от конструкции таблица может иметь произвольно много уникальных ключей, но не более одного первичного ключа.

Итак, когда вам не нужно различать (однозначно идентифицировать) каждую строку,
вам не нужно использовать первичный ключ

Например, большая таблица для бревен,
без использования первичного ключа вы можете получить данные меньшего размера и быстрее для вставки

1 голос
/ 31 марта 2011

Первичный ключ не обязателен, но не рекомендуется создавать таблицы без первичного ключа.СУБД создает автоматический индекс на PK, но вы можете сделать столбец уникальным и индексировать его, например, столбец user_name в таблице users обычно делается уникальным и индексируется, поэтому вы можете пропустить PK здесь.Но это все еще плохая идея , потому что PK может использоваться как внешний ключ для ссылочной целостности.

В общем, вы почти всегда должны иметь PK в таблице, если у вас нет веских оснований оправдывать отсутствие PK.

Таблицы связей (во многих отношениях со многими) могут не иметь первичного ключа.Но мне лично нравится, что в этих таблицах есть и PK.

...