正如标题所报告的那样,我有一个子表(Contracts
),其中有两列,每列都引用父表(Clients
)中的相同键列。
我做出这种设计选择的原因是父表包含客户端,但同时客户端可能是另一个客户的提供商公司。
我遇到的问题是:表是正确创建的,但是外键(仅与这两个表相关)似乎在子表(合同 - 它们应该保留的位置)和在客户端(不知道为什么他们也在这里显示)。当我打开SSMS关系设计器时,我可以看到这个副本,我在两个表中都看到了两个外键的存在。
下面是生成这个问题的代码(将出现此处未提及的其他表,因为它们不会产生问题): 表客户:
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)
);
表合同:
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
字段相关的外键重复吗?
谢谢。
答案 0 :(得分:0)
我在这里回答KumarHarsh的问题(因为在评论中我没有发布图像)。 在图像中将显示表tblContracts的屏幕截图,其中可以看到正确地为该表定义的两个外键。 并且表tblClients的屏幕截图中可以看到两个相同的外键,在我看来,这些外键不正确地存在于表tblClients中。
我希望这有助于找到问题。 谢谢。