由于某种原因,我的代码中出现错误*。我对 PostgreSQL 很陌生,对 SQL 也很陌生。是什么导致了这个错误?
*没有与引用表“tech”的给定键匹配的唯一约束。
BEGIN;
CREATE TABLE Person (
person_id SERIAL PRIMARY KEY,
firstname VARCHAR(128),
lastname VARCHAR(128),
email_adr VARCHAR(128),
UNIQUE(person_id, email_adr)
);
CREATE TABLE Phone (
person_id INT REFERENCES Person(person_id),
phone_nr INT PRIMARY KEY,
UNIQUE(phone_nr)
);
CREATE TABLE Tech (
tech_id INT REFERENCES Person(person_id),
username VARCHAR(80) PRIMARY KEY,
password VARCHAR(80) NOT NULL,
location Varchar(128),
UNIQUE(username, tech_id)
);
CREATE TABLE Customer (
customer_id INT REFERENCES Persons(person_id),
addresse VARCHAR(255) NOT NULL,
UNIQUE(customer_id)
);
CREATE TABLE Task (
task_id SERIAL PRIMARY KEY,
payment MONEY,
tech INT REFERENCES Tech(tech_id) NOT NULL,
customer INT REFERENCES Customer(customer_id) NOT NULL,
start_date DATE NOT NULL,
end_dato DATE,
UNIQUE(tech, customer, start_date, end_date)
);
COMMIT;
最佳答案
在表Task
中,您尝试通过tech_id
引用表Tech
。为此,您必须将 UNIQUE CONSTRAINT
添加到 Tech
中的 tech_id
。
现在,在表 Tech
中,您有 UNIQUE(username, tech_id)
,这意味着列 tech_id
中的值可以加倍,例如。
Tech
-------------------------------
tech_id username, ....
------------------------------
1 'John'
2 'Tony'
1 'Nataly'
实际上,更好的想法是通过PRIMARY KEY
设置引用,因此在您的情况下,表Tech
中的username
。
如果您想让结构保持所讨论的方式,您只需在 Tech
列中添加 UNIQUE(tech_id)
即可。
关于sql - 错误: No unique constraint matching given keys for referenced table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33436966/