Установить несколько «первичных ключей» на один AccountID

Это кажется простой проблемой. Тем не менее, я заблокирован.

У меня есть 6 идентификаторов продукта: 1001 , 1002 , 1003 , 1004 , 1005 , 1006 .

В таблице у меня также есть список идентификаторов учетных записей. Каждый идентификатор учетной записи может иметь один из многих идентификаторов продукта (1-6), но не может иметь дубликатов.

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

Пример таблицы:

Хороший стол

Account_ID  ProductID
138777  100004
138777  100003
--------------
21252   100003
138778  100003
138779  100004
138780  100003
138781  100001
138782  100004

Плохой стол

Account_ID  ProductID
138777  100003
138777  100003
---------------
21252   100003
138778  100003
138779  100004
138780  100003
138781  100001
138782  100004

Какой самый логичный способ реализации этого ограничения?

Всего 1 ответ


Вы можете создать composite primary key в столбцах Account_ID и ProductID .

Вы можете узнать из этого поста SO Как определить составной первичный ключ в SQL?

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

ALTER TABLE < YourTableName > ADD CONSTRAINT [name of PK, e.g. PK_AccountProduct] PRIMARY KEY (
    Account_ID
    ,ProductID
    )

Это можно сделать в студии управления SQL Server, открыв таблицу в режиме конструктора, выбрав столбцы, щелкнув правой кнопкой мыши и установив составной / первичный ключ.

В SSMS это выглядит так, как показано ниже:

введите описание изображения здесь


Есть идеи?

10000