Вопрос: если [product_number]
в вашей таблице Parts
можно сделать уникальным с помощью уникального ограничения - почему это не первичный ключ сам по себе ??
Чувство моей интуиции: [product_number]
inParts
на самом деле не уникален - только комбинация (part_number, product_number)
, который является первичным ключом, действительно уникальна.
Если вы можете создать UNIQUE INDEX
на *Один столбец 1013 *, вы должны иметь возможность создать ограничение FK - попробуйте это:
CREATE UNIQUE INDEX UIX01_Parts ON dbo.Parts(product_number)
ALTER TABLE dbo.Order_Items
ADD CONSTRAINT FK_OrderITems_Parts
FOREIGN KEY(product_number) REFERENCES dbo.Parts(product_number)
Это работает?Если нет - какую ошибку вы получите и где ??
Если это не сработает, и только (part_number, product_number)
действительно уникален, то вам нужно сослаться на оба столбца в ограничении внешнего ключа:
ALTER TABLE dbo.Order_Items
ADD CONSTRAINT FK_OrderItems_Parts
FOREIGN KEY(part_number, product_number)
REFERENCES dbo.Parts(part_number, product_number)
и, конечно, это также означает, что вам нужно иметь оба этих столбца в таблице Order_Items
, чтобы иметь возможность работать с ограничением внешнего ключа.
Просто как сторонапримечание: наличие составного первичного ключа из двух VARCHAR(50)
столбцов и создание кластеризованного индекса для вашей таблицы Parts
не является оптимальным.Если возможно, попытайтесь сделать одно или оба из этих «чисел» действительно числовым типом - например, столбец INT.Или, если это невозможно, подумайте о наличии суррогатного столбца PartID
(INT, IDENTITY) в вашей таблице Parts
- это также облегчит ограничение FK!