【问题标题】:I'm unable to add a foreign key我无法添加外键
【发布时间】:2021-01-07 15:21:01
【问题描述】:

我在 postgres 数据库中创建了这两个表,我试图将第二个表中的第一个 uuid 键添加为外键,但弹出此错误

外键约束中引用的“book_id”列不存在

这是第一张桌子

CREATE TABLE books(
book_id uuid DEFAULT uuid_generate_v4(),
book_title VARCHAR(255) NOT NULL,
book_categ VARCHAR(255),
book_price FLOAT
);

这是我尝试添加外键的第二个表

CREATE TABLE reader(
reader_id uuid DEFAULT uuid_generate_v4(),
reader_fullname VARCHAR(255) NOT NULL,
reader_CIN VARCHAR(255),
reader_adress VARCHAR(255),
FOREIGN KEY (book_id) REFERENCES books(book_id)
);

【问题讨论】:

  • 外键应该是主键。您尚未定义主键。
  • 我认为当我将其声明为 uuid 时,默认情况下它也将是主键
  • @GordonLinoff。实际上FOREIGN KEY 必须是UNIQUE 键或声明UNIQUE 的列组合。 PRIMARY KEY 具有 UNIQUE 属性,因此它也符合条件。
  • @AdrianKlaver 。 . .外键应该是主键。

标签: sql postgresql


【解决方案1】:

您的代码中有多个问题。我建议:

CREATE TABLE books (
    book_id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,
    book_title VARCHAR(255) NOT NULL,
    book_categ VARCHAR(255),
    book_price NUMERIC(20, 4)
);

CREATE TABLE readers (
    reader_id uuid DEFAULT uuid_generate_v4(),
    reader_fullname VARCHAR(255) NOT NULL,
    reader_CIN VARCHAR(255),
    reader_address VARCHAR(255),
    book_id uuid,
    FOREIGN KEY (book_id) REFERENCES books(book_id)
);

注意事项:

  • 您需要在第一个表中定义主键。
  • 您需要在第二个表中定义列。
  • FLOAT 对于金额来说是一个糟糕的选择。您应该使用数字/小数。

我也不知道您要建模什么。但我的怀疑是,您希望为readers 提供一个表,每个“读者”一行,然后为readerBooks 准备另一个表,每本书一行,读者阅读。

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 2017-05-10
    • 1970-01-01
    • 2020-09-26
    • 2016-03-01
    • 2021-12-14
    • 2020-09-12
    相关资源
    最近更新 更多