0

我有个问题。基本上我正在模拟一个充满作者信息的出版商数据库。因此,为此,我有一个名为“作者”的实体——作者有一个自动递增计数器的主键,以及一个“姓名”和出生年份。

除此之外,我还有“书”的实体,它有一个名称,出版年份,它自己的识别主键是一个自动递增计数器。它还有两个外键——一个引用主要作者的字段(这是必需的),以及一个指定次要作者的可选字段。

我的问题是,作者和书籍之间的关系显然是“一”到“零或更多”。但是,我卡住的地方是第二作者的“可选性”。我认为这应该是“零或一”与“零或更多”的关系,但我不确定我是否正确翻译了逻辑——我的想法是很多书可能没有第二作者。

同样,在 sqlite3 中实现此功能时,最好将此字段设为“必需”还是“可选”?我假设如果我要求它可以保持休眠状态,除非需要,否则它可以作为“NULL”值。

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

4

1 回答 1

0

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

  • 一本书有 1 个或多个作者
  • 一个人写(作者)一本书或多本书

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

书籍、人物作者

  • 书籍:id,标题
  • 作者:book_id、person_id、位置(例如,第一作者为 1,第二作者为 2)
  • 人:身份证、姓名

拥有这三个表后,您可以使用 JOIN 查询关系。可以在此youtube 视频中找到加入的初学者介绍,您想要的加入类型在 4:50 左右呈现。

可以在此处找到 stackoverflow 答案和示例:sqlite LEFT OUTER JOIN multiple tables

于 2012-12-10T22:44:33.757 回答