sql - 我无法添加外键

标签 sql postgresql

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

column "book_id" referenced in foreign key constraint does not exist

这是第一个表

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)
);

最佳答案

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

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对于货币金额来说是一个糟糕的选择。您应该使用数字/小数。

我也不知道你想建模什么。但我怀疑你想要一张 table readers每个“读者”一行,然后是 readerBooks 的另一个表读者阅读的每本书一行。

关于sql - 我无法添加外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65615123/

相关文章:

sql - 使用 sql 连接的高效广度优先搜索

sql - 如何按最近的帖子对用户进行排序?

sql - 存储过程输出参数上的合并/IsNull

php - 存储数据库,同时访问的良好模式

c# - 比较 InnoDb 和 MyIsam MySql 表的相等性

sql - 添加总计行并转换为百分比

sql - 如何创建 SQL 索引以提高 ORDER BY 性能

ruby-on-rails - 如何在 Rails 4 中仅从数据库中提取文本字段的一部分

mysql - 'blackhole' 表是邪恶的吗?

postgresql - 为 Postgresql 打开端口