[英]No unique constraint matching given keys for referenced table with multiple primary keys
我正在嘗試鏈接這兩個表,但收到錯誤:
沒有與引用表“幫凶”的給定鍵匹配的唯一約束。
注意Robberies
是另一張桌子。
我用它來創建“共犯”表(這是發生錯誤的時間):
CREATE TABLE info.Accomplices (
RobberID INTEGER,
BankName VARCHAR,
City VARCHAR,
RobberyDate DATE,
Share DECIMAL NOT NULL,
PRIMARY KEY(RobberID, BankName, City, RobberyDate),
FOREIGN KEY(BankName, City, RobberyDate)
REFERENCES info.Robberies(BankName, City, RobberyDate)
);
並以此創建強盜表:
CREATE TABLE info.Robbers (
RobberID INTEGER,
Nickname VARCHAR,
Age INTEGER,
NoYears INTEGER,
PRIMARY KEY(RobberID),
FOREIGN KEY(RobberID) REFERENCES info.Accomplices(RobberID),
CONSTRAINT AgeCheck CHECK (Age > NoYears)
);
Robbers
表中的外鍵是否需要匹配構成Accomplices
表中的主鍵的所有組件?
強盜表中的外鍵是否需要匹配構成共犯表中的主鍵的所有組件?
不完全是。 它不一定是PK。 FK約束要求在引用表的(一組)列上具有任何 UNIQUE
或PRIMARY KEY
約束。 如果不是唯一的,則FK無法引用它。 從理論上講,您可以向accomplices
添加UNIQUE
約束:
CREATE TABLE info.Accomplices (
robberid integer,
bankname varchar,
city varchar,
robberydate date,
share decimal not null,
PRIMARY KEY(robberid, bankname, city, robberydate),
UNIQUE(robberid),
FOREIGN KEY ...
);
從設計的角度來看,這沒有什么意義,但是它顯示了robbers
給定FK約束的要求。
我懷疑您的數據庫設計存在邏輯問題。
有關:
CREATE TABLE info.Robberies (
BankName VARCHAR,
City VARCHAR,
RobberyDate DATE,
Amount DECIMAL NOT NULL,
PRIMARY KEY(BankName, City, RobberyDate),
FOREIGN KEY(BankName, City) REFERENCES info.Banks(BankName, City)
);
CREATE TABLE info.Robbers (
RobberID INTEGER,
Nickname VARCHAR,
Age INTEGER,
NoYears INTEGER,
PRIMARY KEY(RobberID),
--FOREIGN KEY(RobberID) REFERENCES info.Accomplices(RobberID),
CONSTRAINT AgeCheck CHECK (Age > NoYears)
);
CREATE TABLE info.Accomplices (
RobberID INTEGER,
BankName VARCHAR,
City VARCHAR,
RobberyDate DATE,
Share DECIMAL NOT NULL,
PRIMARY KEY(RobberID, BankName, City, RobberyDate),
FOREIGN KEY(RobberID) references info.Robbers(RobberID),
FOREIGN KEY(BankName, City, RobberyDate) REFERENCES
info.Robberies(BankName, City, RobberyDate)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.