sql - 引用表 PostgreSQL 的给定键没有唯一约束匹配
问题描述
我使用 PostgreSQL 创建了一个 ER 图,并尝试根据导出的 .sql 文件创建表,但出现错误。我可能会犯结构性错误。如果您发现有关实体关系图的结构错误,您能解释一下吗?
错误:
这是我的ER图:
这是我导出的 SQL 脚本:
BEGIN;
CREATE TABLE public."Persons"
(
id bigserial NOT NULL,
name character varying(30) NOT NULL,
surname character varying(30) NOT NULL,
email character varying(30),
PRIMARY KEY (id)
);
CREATE TABLE public."System_Personals"
(
id bigserial NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Job_Seekers"
(
id bigserial NOT NULL,
ssn character(11) NOT NULL,
birth_date date NOT NULL,
password character varying(30) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Employers"
(
id bigserial NOT NULL,
company_name character varying(30) NOT NULL,
website character varying(40) NOT NULL,
phone_number character(11) NOT NULL,
password character varying(30) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Jobs"
(
id bigserial NOT NULL,
role character varying(30) NOT NULL,
definition character varying(500) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Job_Announcements"
(
id bigserial NOT NULL,
title character varying(100) NOT NULL,
company_name character varying(30) NOT NULL,
role character varying(30) NOT NULL,
city_name character varying(30) NOT NULL,
salary bigint NOT NULL,
job_definition character varying(300) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Cities"
(
id bigserial NOT NULL,
name character varying(30) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Activations"
(
id bigserial NOT NULL,
email character varying(30) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Employer_Activations"
(
id bigserial NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE public."Job_Seeker_Activations"
(
id bigserial NOT NULL,
ssn character(11) NOT NULL,
PRIMARY KEY (id)
);
ALTER TABLE public."System_Personals"
ADD FOREIGN KEY (id)
REFERENCES public."Persons" (id)
NOT VALID;
ALTER TABLE public."Job_Seekers"
ADD FOREIGN KEY (id)
REFERENCES public."Persons" (id)
NOT VALID;
ALTER TABLE public."Employers"
ADD FOREIGN KEY (id)
REFERENCES public."Persons" (id)
NOT VALID;
ALTER TABLE public."System_Personals"
ADD FOREIGN KEY (id)
REFERENCES public."Jobs" (id)
NOT VALID;
ALTER TABLE public."Employers"
ADD FOREIGN KEY (id)
REFERENCES public."Cities" (id)
NOT VALID;
ALTER TABLE public."Job_Announcements"
ADD FOREIGN KEY (city_name)
REFERENCES public."Cities" (name)
NOT VALID;
ALTER TABLE public."Job_Announcements"
ADD FOREIGN KEY (role)
REFERENCES public."Jobs" (role)
NOT VALID;
ALTER TABLE public."Job_Announcements"
ADD FOREIGN KEY (job_definition)
REFERENCES public."Jobs" (definition)
NOT VALID;
ALTER TABLE public."Employer_Activations"
ADD FOREIGN KEY (id)
REFERENCES public."Activations" (id)
NOT VALID;
ALTER TABLE public."Job_Seeker_Activations"
ADD FOREIGN KEY (id)
REFERENCES public."Activations" (id)
NOT VALID;
ALTER TABLE public."Job_Seeker_Activations"
ADD FOREIGN KEY (ssn)
REFERENCES public."Persons" (id)
NOT VALID;
ALTER TABLE public."Activations"
ADD FOREIGN KEY (email)
REFERENCES public."Persons" (email)
NOT VALID;
END;
为什么我得到那个错误?有什么帮助吗?
解决方案
所有这些都违反了:
ALTER TABLE public."Job_Announcements"
ADD FOREIGN KEY (city_name)
REFERENCES public."Cities" (name)
NOT VALID;
ALTER TABLE public."Job_Announcements"
ADD FOREIGN KEY (role)
REFERENCES public."Jobs" (role)
NOT VALID;
ALTER TABLE public."Job_Announcements"
ADD FOREIGN KEY (job_definition)
REFERENCES public."Jobs" (definition)
NOT VALID;
ALTER TABLE public."Activations"
ADD FOREIGN KEY (email)
REFERENCES public."Persons" (email)
NOT VALID;
外键必须引用作为主键或形成唯一约束的列。
推荐阅读
- python - 在python中修改struct中的数据
- php - 性能提升:SQLite 和 MYSQL 函数
- python - 如何使用 dask 直接从 s3 存储桶加载和处理许多(>20k).tsv 文件?
- list - Dart:list clear() 函数由于执行顺序而停止添加新元素
- javascript - 使用 Goole Apps 脚本 (GAS) 获取 gmail 电子邮件正文的 getChild
- python - 如何为 LSTM 填充时间戳
- azure - Azure 数据工厂集成运行时无法共享
- r - 如何找到组内同时出现的值对(A和B)的频率
- telegram - 电报链接与文本聊天
- reactjs - 在尝试使用 DRF 获取数据时,在 axios GET Response 中接收纯 Js 代码文件以做出反应