2012-12-10 113 views
0

我有一个问题。基本上我模拟了一个充满作者信息的发布者数据库。所以为此,我有一个名为'作者'的实体 - 作者有一个自动增量计数器的主键,以及'姓名'和出生年份。ER模型中的关系混淆

除此之外,我还有一个'book'实体,它有一个名称,发布年份,它是自己识别的主键,它是一个自动递增计数器。它还有两个外键 - 一个引用主要作者的字段(这是必需的),以及一个指定第二作者的可选字段。

我的问题是,作者和书之间的关系显然是'一个'到'零或多个'。然而,我陷入困境的是第二作者的“选择性”。我认为它应该是一个'零或一'到'零或多'的关系,但我不确定我是否正确翻译逻辑 - 我的想法是有可能很多书不会有第二作者。

同样,当在sqlite3中实现这个功能时,最好是使该字段为'required'还是'optional'?我假设我是否要求它可以保持休眠状态作为'NULL'值,除非需要。

任何帮助,您可以提供将不胜感激。

回答

0

您正在寻找的关系是多对多的关系。

  • 书有1名或多个作者
  • 一个人写(作者)1个或更多的书

这意味着你将需要3个数据库表:

书,人们作者

  • Books:id,title
  • 作者:book_id,person_id,position(例如: 1第一作者,2第二作者)
  • 人:ID,名称

一旦你有这三个表你使用连接可以查询的关系。在这个youtube video中可以找到初学者的入门介绍,你想要的JOIN类型在4:50标记周围出现。

一个计算器的答案和例子可以在这里找到:sqlite LEFT OUTER JOIN multiple tables

+0

谢谢!如果我改变了我的关系,那么,如果我没有“第二作者” - 我有一个自己是作者的“编辑者”(但也是可选的)。这是否对应于'零或一个'到'零或多个'关系? – user1798522

+0

这取决于。我想一本书可以有多个编辑器。因此,你会得到一个称为编辑器的额外表格。或者,您可以将作者表更改为books_people表并添加一个“角色”字段。 – Wilco