我有一个关于我想要创建的数据库的新手问题。我有一份出版物清单,按照这个一般顺序:
UID,作者,网址,标题,出版物,起始页,结束页,数量,年
然后我意识到有多个作者,我开始尝试为多个作者规范化数据库。然后我意识到作者的顺序很重要,期刊文章也可能有很多作者,介于1和数十之间,甚至可能更多。
我应该创建一个包含多个作者(空列)(如12或其他)的表吗?或者有没有办法根据作者的数量拥有可变数量的列?
答案 0 :(得分:3)
你基本上需要作者和出版物之间的many-to-many
关系,因为一个作者可以写很多出版物,一个出版物可以由多个作者写。
这需要你有3张桌子。
author_id
和publication_id
的列Author
和Publication
。通过这种方式,您不会将特定作者绑定到出版物,但您可以拥有更多这样的作品,反过来也是如此。
如果您想区分作者在特定出版物中的角色,您还可以添加一些像id_role
这样的列,这些列将是对词典表的引用,表明作者的所有可能角色。通过这种方式,您可以区分主要作者,共同作者等。这样您也可以存储有关处理书籍翻译的人员的信息,但也许您应该将Author
的命名更改为不太具体的内容。
您可以通过在AuthorPublication
中添加一列来为每位Publication
分别增加一列来确保作者的正确排序。这样您就可以根据需要保留订购。
答案 1 :(得分:2)
实体发布与实体作者之间存在多对多的关系。 出版物可以有很多作者,作者可以有很多出版物。
因此,您应该为此关系创建表。例如,具有列的表Authors_Publications:UID,author_id,publication_id,order
答案 2 :(得分:0)
您应该创建与发布表
具有多对多关系的作者表作者有一些信息 和出版物也有信息
所以应该有像author
和publication
这样的表格
两者都有author_id
和pblication_id
等主键
并且两个密钥都有many-to-many
关系
答案 3 :(得分:0)
实际上你的情景更复杂。
出版物可以有多个作者。作者可以撰写多篇已发表的文章或书籍。这是一个多对多的关系。
我们总是(*)表示带有第三个表的多对多,有时称为。桥牌桌。第三个表authorship
是一个包含至少两列的子表,两个外键都包含每个父表的主键,pub_
和author_
表。我们将“多对多”转换为一对一对多关系。
顺便说一下,这本书作者场景是教授关系数据库设计时使用的规范示例。
您可以在此第三个表上添加其他字段。在您的情况下,我们需要一个整数类型的priority_
列来排序主要和次要作者的列表。
每位作者的补偿费或版税将是此桥牌表的附加栏目。如果您跟踪每个需要为该出版物签署合同的作者,authorship_
表将具有日期,日期时间或布尔列contract_signed_
。因此,您可以看到桥表表示与某个特定作者参与某个特定出版物有关的任何内容。
(*)不仅仅是意见或建议。关系数据库设计由充满数学证明的整本书证明。这包括需要使用第三个表分解多对多。关系数据库设计是数学描述和证明支持的真正信息工程的唯一案例。搜索relation
(数学领域),以及医生E.F. Codd和Chris Date了解更多信息。