Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库原型Postgresql:错误:没有唯一约束匹配引用表的给定键;信息“;_Sql_Postgresql_Foreign Keys - Fatal编程技术网

数据库原型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)
);