如何在MySQL中引用来自不同表的多个fks

时间:2017-01-05 20:39:58

标签: mysql foreign-keys relational-database primary-key

我一直在环顾四周,我找不到正确的方法在sql中执行此操作当前的方式我编码它只是导致我的第三个表失败但其余的代码工作很好,直到第三个表,我只是需要第三个表来包含前两个表中的fks

第一张表

SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS Customer;
CREATE TABLE Customer
(
CustomerNumber int NOT NULL,
CustomerName varchar(255),
CustomerAddress varchar(255),
CustomerPhoneNumber varchar(255),
JoinDate varchar(255),
PetName varchar(255),
PayScheme varchar(255),
PremiumPayDate varchar(255),
PRIMARY KEY (CustomerNumber, PetName)
);

第二张表

DROP TABLE IF EXISTS Policies;    
CREATE TABLE Policies
(
PolicyID int NOT NULL,
PolicyNumber int NOT NULL,
PetType varchar(255),
CustomerNumber int NOT NULL, 
PetName varchar(255),
EffectiveDate varchar(255),
PRIMARY KEY (PolicyID),
    CONSTRAINT fk_CustomerNumber_PetName
    FOREIGN KEY (CustomerNumber, PetName)
    REFERENCES Customer(CustomerNumber, PetName)
);

第三表

DROP TABLE IF EXISTS Claims;    
CREATE TABLE Claims
(
ClaimsID int NOT NULL,
AmountForReimbursement varchar(255),
PolicyID int NOT NULL,
PetName varchar(255),
    PRIMARY KEY (ClaimsID),
    CONSTRAINT fk_PolicyID_PetName
    FOREIGN KEY (PolicyID, PetName)
    REFERENCES Policies(PolicyID), Customer(PetName)        
);

1 个答案:

答案 0 :(得分:0)

您应该考虑浏览MySQL文档。您为Claims再次创建了表格错误。它应该像下面的

CREATE TABLE Claims
(
ClaimsID int NOT NULL,
AmountForReimbursement varchar(255),
PolicyID int NOT NULL,
PetName varchar(255),
CustomerNumber int NOT NULL,
    PRIMARY KEY (ClaimsID),
    CONSTRAINT fk_PolicyID_PetName
    FOREIGN KEY (PolicyID) REFERENCES Policies(PolicyID), 
    FOREIGN KEY (CustomerNumber, PetName) REFERENCES Customer(CustomerNumber, PetName)        
);

总是推荐它,你应该实际引用PK列,因为你已经定义了复合PK