在Book表中将数组中的0-1000个章节ID存储在一起是一个好主意,并从章节表中选择它们,如下所示:
SELECT id, name, updated FROM chapters
WHERE id IN (SELECT unnest(chapters_array) FROM books WHERE id=$1);
或者最好将单独的表格存储在那里并存储chapter_id
到book_id
关系中?
发布于 2019-03-26 10:01:44
不会。除了打破正常形式并引入一系列问题之外,在您的情况下,这似乎也是不必要的。一本书有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约束强制执行参照完整性。
https://stackoverflow.com/questions/-100006510
复制相似问题