当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL错误:没有唯一的约束匹配引用表的给定键

李明贤
2023-03-14
create table instructor(
instructor_id varchar(15) not null,
instructor_name varchar(15) not null,
dept_name varchar(15) not null,
primary key(instructor_id),
unique(instructor_name));

create table time_slot(
time_slot_id varchar(15) not null,
day varchar(15) not null,
start_time varchar(15) not null,
end_time varchar(15) not null,
primary key(time_slot_id, day, start_time));

create table student(
student_id varchar(15) not null,
user_id varchar(15) not null,
password varchar(15) not null,
num_item int,
primary key(student_id, user_id));


create table section(
course_id varchar(15) not null,
sec_id varchar(15) not null,
semester varchar(15) not null,
year varchar(15) not null,
title varchar(15) not null,
building varchar(15),
room_no varchar(15),
time_slot_id varchar(15),
dept_name varchar(15),
credits varchar(15),
instructor_id varchar(15) not null,
primary key(course_id, sec_id, semester, year),
foreign key(time_slot_id) references time_slot(time_slot_id),
foreign key(instructor_id) references instructor(instructor_id));

create table evaluation(
user_id varchar(15) not null,
sec_id varchar(15) not null,
total_score int not null,
workload int not null,
difficulty int not null,
attendance int not null,
grade int not null,
accomplishment int not null,
comment varchar(200),
primary key(user_id, sec_id),
foreign key(user_id) references student(user_id),
foreign key(sec_id) references section(sec_id));


create table teaches(
instructor_id varchar(15) not null,
course_id varchar(15) not null,
sec_id varchar(15) not null,
semester varchar(15) not null,
year varchar(15) not null,
primary key(instructor_id, course_id, sec_id, semester, year),
foreign key(instructor_id) references instructor(instructor_id),
foreign key(course_id) references section(course_id),
foreign key(sec_id) references section(sec_id),
foreign key(semester) references section(semester),
foreign key(year) references section(year));

我试着用这些代码使用postgresql创建表,但人们一直说,并没有唯一的约束匹配引用表的给定键。当我试图创建表、节和评估时,出现了这个消息。

请帮帮我。

)我更改了create语句的顺序,并在表中添加了unique key,但仍然不起作用。

共有2个答案

郭志
2023-03-14

这些CREATEDDL组合的顺序不正确,您正在尝试创建尚不存在的引用。

按以下顺序创建表:

1 - instructor
2 - time_slot
3 - student
4 - section
5 - evaluation
6 - teaches
薛焱
2023-03-14

基本上,您需要确保外键中的引用具有相应的唯一键或主键。

你的桌子上有一个

foreign key(instructor_id) references instructor(instructor_id),

但是instructor_id上没有主键,而是instructor_id和instructor_name上有主键。

我怀疑这是一个错误,因为这意味着两个老师可以有相同的id,只要他们的名字不同。

用id上的主键和讲师姓名上的唯一键替换这两个字段上的单个主键,可以确保这两个字段都是唯一的,同时提供讲师表需要链接回讲师的约束。

create table instructor(
instructor_id varchar(15) not null,
instructor_name varchar(15) not null,
dept_name varchar(15) not null,
primary key(instructor_id),
unique(instructor_name));

这也适用于您定义的所有其他主键,这些主键是多个列,但由具有单个字段的外键引用。

此外,您应该按照@sagi所述对create语句进行重新排序

编辑。从sagi下面的评论来看,我的答案似乎令人困惑。试图澄清。

REFERENCES(col1)的外键要求表上有以下约束之一:

 PRIMARY KEY (col1)
 UNIQUE (col1)

它将与主键(col1,col2)不匹配

如果主键肯定应该是两列,这意味着它只能被具有两列的外键引用:REFERENCES(col1, col2)

 类似资料:
  • 我正在为班级注册建立一个数据库,但我在“注册”表上遇到了问题。我需要将分区中的所有主键传递到注册中,但我还想传递一个附加键(“sectionNumber”)。然而,我不想让“sectionNumber”成为“Sections”主键的一部分,因为我不想将sectionNumber传递到每个我有外键的表中,这些外键来自“Sections”有人对如何解决这个问题有什么建议吗?我一直得到下面的错误。

  • PostgreSQL/PGAdmin4错误:没有唯一的约束匹配引用表的给定键 这是我试图编码到PGAdmin4/Postgresql:http://i.imgur.com/xPEu8Sh.jpg的模式 我能够转换所有表格,除了“资格证书”。 我尝试处理以下查询: 我收到以下消息:错误:没有唯一的约束匹配引用表“section”的给定键 这些是我在表格部分中介绍的外国和主要内容 普凯:我,伊姆格。c

  • 试图在Postgres 9.1中创建此示例表结构: 运行上述代码会产生一个错误,这对我来说没有意义: 有人能解释为什么会出现这种错误吗?

  • 所以我得到了一个错误,没有唯一的约束匹配我的一个表的给定键。我有两个表:用户和项目,其中我们有一个多对一的关系(一个用户有多个项目)。我用炼金术来做这一切: 要创建表,我在我的应用程序中有以下语句。py': 错误是:没有唯一的约束匹配引用表用户的给定键。 我不确定哪里出错了,因为我在ItemModel中有一个外键与UserModel中的主键匹配。欢迎任何建议/提示! 谢谢

  • 问题内容: 我有一个表定义: 我正在尝试创建失败的表 错误是: 我不确定如何解决此问题。 问题答案: 我认为您正在寻找两个单独的外键:

  • 我在创建一个包含外键的表时遇到问题,该外键来自另一个包含两个主键的表。 以下是表格: 无法创建表risk_final并给我错误: 错误:没有唯一的约束匹配引用表"names_types"的给定键 我该怎么解决呢?