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

作为主键的Postgresql外键不唯一?

闾丘德宇
2023-03-14

所以我有一个表,它用一个昵称作为外键,用一个id作为主键:

CREATE TABLE Character(
    Nickname TEXT,
    CONSTRAINT person_pk PRIMARY KEY(Nickname)
);
CREATE TABLE POSTING(
    PostingID BIGINT UNIQUE, 
    Nickname TEXT,
CONSTRAINT posting_fk FOREIGN KEY(Nickname) REFERENCES Person(Nickname),
    CONSTRAINT postings_pk PRIMARY KEY(PostingID, Nickname)
);

到目前为止,一切都很好。然而,每当我试图从发布中获取主键时,它告诉我:“没有唯一的约束来匹配引用表“信息”的给定键。

CREATE TABLE INFORMATION(
    InformationID BIGINT,
    PostingID BIGINT, 
    CONSTRAINT informations_fk FOREIGN KEY(PostingID) REFERENCES POSTING(PostingID),
    CONSTRAINT informations_pk PRIMARY KEY(InformationID, PostingID)
);


CREATE TABLE DATA(
    InformationID BIGINT,
    Link TEXT NOT NULL,
    CONSTRAINT data_fk FOREIGN KEY(InformationID) REFERENCES INFORMATION(InformationID),
    CONSTRAINT datas_pk PRIMARY KEY(InformationID)
);

但是,如果我将表中的信息信息ID更改为唯一,错误就会消失。这是正确的做事方式吗?

CREATE TABLE INFORMATION(
    InformationID BIGINT UNIQUE,
    PostingID BIGINT,
    CONSTRAINT informations_fk FOREIGN KEY(PostingID) REFERENCES POSTING(PostingID),
    CONSTRAINT informations_pk PRIMARY KEY(InformationID, PostingID)
);

提前感谢大家!

共有1个答案

哈朗
2023-03-14

信息的主键只能是信息ID,或者数据必须包含postingid,并且信息的外键在两列上都有定义。

在不了解您的数据的情况下很难说,但我怀疑前一种解决方案是正确的。

 类似资料:
  • 如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?

  • 问题内容: 我必须使用hibernate模式,并且不太确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 我该如何使用Hibernate进行管理??? 我不知道如何管理第二张表的主键… 问题答案: 在Hibernate参考文档中有一个与您的案例完全相似的示例。在此示例之前,您将找到解释。这是与您的问题匹配的示例(用户是表A,客户是表B): 注意:如果您拥有这两个表的代理标识符,则要简单得

  • 我有两张桌子: 用户(用户名、密码) 配置文件(profileId,gender,dateofbirding,...) 目前我正在使用这种方法:每个Profile记录都有一个名为“userid”的字段作为外键,它链接到用户表。当用户注册时,他的配置文件记录将自动创建。 我对我朋友的建议感到困惑:将“userid”字段作为外部和主键,并删除“profileid”字段。哪种方法更好?

  • 本文向大家介绍主键与唯一键,包括了主键与唯一键的使用技巧和注意事项,需要的朋友参考一下 首要的关键 主键是一列,用于唯一地标识表的每个元组。 它用于向表添加完整性约束。一个表中只能使用一个主键。在主键的情况下,重复和NULL(空)值无效。主键也可以用作其他表的外键。 让我们举个例子 我们有一个表名employee,用于存储公司员工的数据。下表显示了该表的内容。 Emp_id 名称 号码 位置 薪水

  • 问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合:

  • 如何将复合主键用作外键?看来我的尝试没有成功。