实现具有ID数组的一对多关系?

时间:2019-03-25 20:29:56

标签: sql postgresql database-design many-to-many one-to-many

最好将0-1000的章节ID存储在Book表的数组中,然后从Chapters表中选择它们,如下所示:

chapter_id

还是最好制作单独的表并在其中存储book_idMath.atan2(im / re) * Math.PI * 180的关系?

1 个答案:

答案 0 :(得分:1)

不。除了打破常规形式并引入许多问题之外,您的情况似乎也没有必要。一本书有 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约束。 Details in the manual here.(这也是您不能与数组一起使用的东西。)

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

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

虽然您不需要books表中的任何内容,但您甚至不必在查询中包括它。 FK约束仍然会强制执行参照完整性。