与一组id实现一对多的关系?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (17)

在Book表中将数组中的0-1000个章节ID存储在一起是一个好主意,并从章节表中选择它们,如下所示:

SELECT id, name, updated FROM chapters
WHERE id IN (SELECT unnest(chapters_array) FROM books WHERE id=$1);

或者最好将单独的表格存储在那里并存储chapter_idbook_id关系中?

提问于
用户回答回答于

不会。除了打破正常形式并引入一系列问题之外,在您的情况下,这似乎也是不必要的。一本书有n章。和章总是属于一个单一的书。这是一个简单的1:n关系,就像你自己在标题中提到的那样!您不需要“单独的表”。您所需要的只是chapters表格中每个相关行中的书籍ID 。喜欢:

CREATE TABLE chapters
  id serial PRIMARY KEY
, book_id int REFERENCES books(id) -- !
, name text NOT NULL
, updated timestamptz
);

我添加了一个FOREIGN KEY语法短的约束。手册中的详细信息在这里。(这也是你不能用于数组的东西。)

然后,您的查询以获取给定书籍的所有章节可以简单地:

SELECT id, name, updated
FROM   chapters
WHERE  book_id = $1;

虽然您不需要books表中的任何内容,但您甚至不必将其包含在查询中。无论如何,FK约束强制执行参照完整性。

扫码关注云+社区

领取腾讯云代金券