首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与一组id实现一对多的关系?

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

Stack Overflow用户
提问于 2019-03-26 00:48:51
回答 1查看 0关注 0票数 0

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

代码语言:javascript
复制
SELECT id, name, updated FROM chapters
WHERE id IN (SELECT unnest(chapters_array) FROM books WHERE id=$1);

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

EN

Stack Overflow用户

发布于 2019-03-26 10:01:44

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

代码语言:javascript
复制
CREATE TABLE chapters
  id serial PRIMARY KEY
, book_id int REFERENCES books(id) -- !
, name text NOT NULL
, updated timestamptz
);

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

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

代码语言:javascript
复制
SELECT id, name, updated
FROM   chapters
WHERE  book_id = $1;

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

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档