【问题标题】:Confusion over relationships in ER ModellingER 建模中的关系混淆
【发布时间】:2012-12-11 06:44:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sqlite entity-relationship


    【解决方案1】:

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

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

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

    书籍、人物作者

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

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

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

    【讨论】:

    • 谢谢!如果我改变我的关系,而不是有一个“第二作者”——我有一个自己是作者的“编辑”(但同样是可选的)。这是否对应于“零或一”与“零或多个”的关系?
    • 这取决于。我猜一本书可以有多个编辑。因此,您会得到一个名为 editors 的额外表格。或者您可以将 authors 表更改为 books_people 表并添加一个“角色”字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2014-02-25
    • 2017-09-18
    • 2012-03-04
    • 2015-03-05
    相关资源
    最近更新 更多