Как лучше всего использовать составной PRIMARY KEY?

У меня есть таблица, в которой я сделал два столбца составными PRIMARY KEY. Теперь у меня путаница.

Скажем, у меня есть следующая таблица:

ColA         ColB

X            NULL
X            NULL

Обе строки «X NULL» и «X NULL» объединены в PRIMARY KEY.

Так возможна ли эта вставка? Поскольку значение NULL отличается, и, соответственно, обе строки должны представлять новую комбинацию данных.

Просьба уточнить.


person Samarth    schedule 24.08.2018    source источник
comment
Нет. Нулевые значения не допускаются в столбцах первичного ключа.   -  person jarlh    schedule 24.08.2018
comment
Чем именно X, NULL отличается от X, NULL?   -  person David    schedule 24.08.2018
comment
Прежде всего, в первичном ключе не допускаются нулевые значения. И если 2 значения одинаковы для 2 столбцов, которые будут частью первичного ключа, как X, Y и еще один X, Y, это также не разрешено, потому что это совсем не другое, это одно и то же.   -  person YLG    schedule 24.08.2018
comment
Пожалуйста, отредактируйте свой вопрос и добавьте оператор create table для рассматриваемой таблицы, включая все индексы и ограничения. . Столбцы первичного ключа не могут содержать нулевые значения, поэтому я предполагаю, что вы создали только уникальный индекс, а не ограничение первичного ключа.   -  person a_horse_with_no_name    schedule 24.08.2018
comment
Какой продукт СУБД вы используете? SQL — это просто язык запросов, а не название конкретного продукта базы данных. Добавьте тег для продукта базы данных, который вы используете postgresql, oracle, sql-server, db2,...   -  person a_horse_with_no_name    schedule 24.08.2018
comment
Возможный дубликат SQL Server, не может вставить нуль в первичный ключ поле?   -  person philipxy    schedule 24.08.2018
comment
Привет. Это часто задаваемые вопросы. Пожалуйста, всегда гуглите много четких, кратких и конкретных версий/формулировок вашего вопроса/проблемы/цели с вашими конкретными строками/именами и без них и читайте много ответов. Добавьте релевантные ключевые слова, которые вы обнаружите, в свои поиски. Если вы не найдете ответ, опубликуйте его, используя один вариант поиска для вашего заголовка и ключевых слов для ваших тегов. См. текст при наведении курсора мыши на стрелку вниз.   -  person philipxy    schedule 24.08.2018


Ответы (1)


Первичные ключи имеют три свойства:

  • Ключ (комбинация) однозначно идентифицирует каждую строку.
  • Никакой компонент ключей не может быть NULL.
  • Таблица имеет только один первичный ключ.

Таким образом, по этому определению вы не можете объявить два столбца первичным ключом.

В общем, я не сторонник составных первичных ключей. Я рекомендую использовать автоматически увеличивающийся первичный ключ для таблицы (синтаксис зависит от базы данных).

Одной из приятных особенностей числового идентификатора является то, что он фиксирует порядок вставки значений в таблицу. Кроме того, многие базы данных группируют данные по первичному ключу, вызывая фрагментацию на inserts и updates.

person Gordon Linoff    schedule 24.08.2018