数据库原型Postgresql:错误:没有唯一约束匹配引用表的给定键;信息“;
我正在尝试建立一个原型数据库,但我的一个薄弱实体,数据库原型Postgresql:错误:没有唯一约束匹配引用表的给定键;信息“;,sql,postgresql,foreign-keys,Sql,Postgresql,Foreign Keys,我正在尝试建立一个原型数据库,但我的一个薄弱实体,附件在创建时不断返回以下错误,我遇到了问题: 错误:没有唯一约束匹配引用表“消息”的给定键 下面显示了SQLCREATETABLE语句(它是包含更多语句的大型模式文件的一部分) 有人能帮我解释一下为什么我总是出现上面显示的错误吗?最初,我试图将date属性设置为时间戳,但这是有道理的,因为这可能有点难以划分为弱实体集,这就是为什么我将其更改为varchar(8)(用于MM-DD-YYYY表示)。但是我不明白为什么上面的代码不能正确编译 我还有其他
附件在创建时不断返回以下错误,我遇到了问题:
错误:没有唯一约束匹配引用表“消息”的给定键
下面显示了SQLCREATETABLE语句(它是包含更多语句的大型模式文件的一部分)
有人能帮我解释一下为什么我总是出现上面显示的错误吗?最初,我试图将date
属性设置为时间戳
,但这是有道理的,因为这可能有点难以划分为弱实体集,这就是为什么我将其更改为varchar(8)
(用于MM-DD-YYYY表示)。但是我不明白为什么上面的代码不能正确编译
我还有其他几个弱实体集,它们具有相同的结构,但是每次创建都成功完成,没有抛出任何错误。我不能简单地理解为什么上述方法也不起作用<代码>消息
有以下键:正文
、发送日期
和心肺复苏号码
,但不知何故它们不匹配
有人能看出哪里出了问题吗?外键应该是主键。您的数据模型实际上没有意义。我希望这样:
CREATE TABLE IF NOT EXISTS Patients (
patient_id int generated always as identity primary key,
. . .
);
CREATE TABLE IF NOT EXISTS Messages (
message_id int generated always as identity primary key,
patient_id int,
. . .
topic text,
body text,
date_send date,
date_read date,
foreign key (patient_id) REFERENCES Patients( patient_id)
);
CREATE TABLE IF NOT EXISTS Attachments (
attachment_id int generated always as identity primary key,
message_id int,
file text,
foreign key (message_id) references messages(message_id)
);
注:我不知道cpr编号应该是什么。也许它是一个属性,应该在其中一个表中(可能是患者的唯一id?)。在任何情况下,使用合成主键并引用它们
记住其他事情:
- 日期应存储为日期,而不是字符串
- 外键应该引用主键
- 不要在多个表中重复数据字段。值只能存储一次
主键(body,date\u send)
对我来说没有意义。如果你的身体超过3公里,你会很快遇到问题的。非常感谢你的反馈!一般来说,我对SQL和数据库还是非常陌生,我只是在练习我正在学习的课程中的技能,所以所有的反馈都是好的反馈。我可以看到,只需要一个message_id就可以了。到目前为止,我生成的模式是在一个已经存在的模型之上的,在这个模型中,他们使用一组键body
+date\u send
来表示消息表的主键。
CREATE TABLE IF NOT EXISTS Patients (
patient_id int generated always as identity primary key,
. . .
);
CREATE TABLE IF NOT EXISTS Messages (
message_id int generated always as identity primary key,
patient_id int,
. . .
topic text,
body text,
date_send date,
date_read date,
foreign key (patient_id) REFERENCES Patients( patient_id)
);
CREATE TABLE IF NOT EXISTS Attachments (
attachment_id int generated always as identity primary key,
message_id int,
file text,
foreign key (message_id) references messages(message_id)
);