Clé primaire créée sur SQL Server non identifiée

CREATE TABLE sampProduct ( Product_ID VARCHAR(15) NOT NULL, Supplier_ID INT NOT NULL, Category_ID INT NOT NULL, Unit_Price DECIMAL(10, 2) PRIMARY KEY(Product_ID) ) CREATE TABLE sampMachine ( M_Product_ID VARCHAR(15) NOT NULL, Serial_No VARCHAR(15) NOT NULL, Machine_Model VARCHAR(20), PRIMARY KEY(M_Product_ID, Serial_No), FOREIGN KEY(M_Product_ID) REFERENCES sampProduct(Product_ID) ) CREATE TABLE sampService ( Service_ID VARCHAR(15) NOT NULL, Serial_No VARCHAR(15) NOT NULL, Complaint VARCHAR(40) NOT NULL, PRIMARY KEY(Service_ID), FOREIGN KEY(Serial_No) REFERENCES sampMachine(Serial_No) ) 

La machine est un sous-type de produit. M_ProductID fait reference à la key primaire de la table parent Produit par cette key. Et Serial_No est utilisé pour identifier de manière unique une machine. Le problème est, je veux créer une key étrangère de Serial_No dans la table de service, puisque je veux suivre les numéros de série de la machine (parce que, par exemple, nous pouvons avoir beaucoup de machine pour chaque model ou type, mais chaque d'entre eux a leurs numéros de série uniques), mais il y a une erreur pour la création. Pouvez-vous m'aider?

L'une des conditions requirejses pour créer une key étrangère est que la table que vous reference doit avoir une key unique sur les colonnes que vous souhaitez referencer. Donc, dans votre exemple, pour que cela fonctionne, vous auriez besoin d'une key unique sur sampMachine (Serial_No) afin de pouvoir créer des foreign keys avec Serial_No. La façon dont vous l'avez maintenant, vous devez utiliser M_Product_Id dans la table sampService et l'append à la définition de key étrangère.

 create table sampService( M_Product_ID varchar(15) not null, Service_ID varchar(15) not null, Serial_No varchar(15) not null, Complaint varchar(40) not null, primary key (Service_ID), foreign key (Serial_No) references sampMachine(m_Product_Id, Serial_No) )