Как следует из заголовка, у меня есть дочерняя таблица (Contracts
), в которой есть два столбца, каждый из которых ссылается на один и тот же ключевой столбец в родительской таблице (Clients
).
причина, по которой я сделал этот выбор дизайна, состоит в том, что родительская таблица содержит клиентов, но в то же время клиент может быть компанией-поставщиком другого клиента.
Проблема, с которой я сталкиваюсь, заключается в следующем: таблицасоздается правильно, но внешние ключи (относящиеся только к этим двум таблицам), похоже, дублируются как в дочерней таблице (Контракты - место, где они должны находиться), так и в Клиентах (не знаю, почему они также показаны здесь).Я вижу этот дубликат, когда открываю конструктор отношений SSMS и вижу в обеих таблицах наличие двух внешних ключей.
Ниже приведен код, вызывающий эту проблему (будут присутствовать другие таблицы, не упомянутые здесь).потому что они не создают проблем): Table Clients:
CREATE TABLE tblClients
(
VAT_Number NVARCHAR(30) NOT NULL PRIMARY KEY,
Country_EID NVARCHAR(5) NOT NULL,
User_EID NVARCHAR(50) NOT NULL,
Is_Company_Group BIT NOT NULL,
Recording_Date SMALLDATETIME NOT NULL
CONSTRAINT DF_tblClients_Recording_Date DEFAULT CONVERT(SMALLDATETIME, GETDATE()),
General_Notes NVARCHAR(300),
CONSTRAINT tblClients_Country_EID_FK
FOREIGN KEY (Country_EID) REFERENCES tblCountryLkp(Country_ID),
CONSTRAINT tblClients_User_EID_FK
FOREIGN KEY (User_EID) REFERENCES tblUsers(User_ID)
);
Table Contracts:
CREATE TABLE tblContracts
(
Contract_ID_Old NVARCHAR(30) NOT NULL,
Contract_ID_New NVARCHAR(15) NOT NULL,
EVAT_Client NVARCHAR(30) NOT NULL,
Billing_Type_EID INT NOT NULL,
User_EID NVARCHAR(50) NOT NULL,
Type_EID INT NOT NULL,
EVAT_Company NVARCHAR(30) NOT NULL,
Status_EID INT NOT NULL,
Recording_Date SMALLDATETIME NOT NULL
CONSTRAINT DF_tblContracts_Recording_Date DEFAULT CONVERT(SMALLDATETIME, GETDATE()),
PRIMARY KEY (Contract_ID_Old, Contract_ID_New),
CONSTRAINT tblContracts_Billing_Type_EID_FK
FOREIGN KEY (Billing_Type_EID) REFERENCES tblBillingTypeLkp(Billing_Type_ID),
CONSTRAINT tblContracts_User_EID_FK
FOREIGN KEY (User_EID) REFERENCES tblUsers(User_ID),
CONSTRAINT tblContracts_Type_EID_FK
FOREIGN KEY (Type_EID) REFERENCES tblContractTypeLkp(Contract_Type_ID),
CONSTRAINT tblContracts_Status_EID_FK
FOREIGN KEY (Status_EID) REFERENCES tblStatusLkp(Status_ID),
CONSTRAINT tblContracts_EVAT_Client_Company_FK
FOREIGN KEY (EVAT_Client) REFERENCES tblClients(VAT_Number),
CONSTRAINT tblContracts_EVAT_Company_FK
FOREIGN KEY (EVAT_Company) REFERENCES tblClients(VAT_Number)
);
Может кто-нибудь помочь мне найти проблему и избежать дублирования внешних ключейсвязанные с полями EVAT_Client
и EVAT_Company
созданы?
Спасибо.