首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图书数据库。ISBN或序列号作为主密钥

图书数据库。ISBN或序列号作为主密钥
EN

Stack Overflow用户
提问于 2021-05-28 16:15:46
回答 1查看 495关注 0票数 1

我正在做一个图书馆数据库,需要存储,除其他外,序列号和ISBN的每一本书。彼此之间有什么区别?前者必须是独特的,后者则可以重复。例如,如果我有3本“我的书”(相同的格式;相同的出版商;相同的一切),我就会有这样的东西:

  • 序列号1;ISBN 11-1111-1111-11;命名我的书。
  • 序列号2;ISBN 11-1111-1111-11;命名我的书。
  • 序列号3;ISBN 11-1111-1111-11;命名我的书。

此时,您可能会说序列号应该是主密钥,因为它有所有的要求都是一个。我也同意。问题是,还有一个名为" authors“的表,因为每本书可以有多个作者,而且每个作者可以有多个相关的书籍,所以我需要在两个表(Books和Authors)之间建立一个M表。让我们称之为“参与”。

按照前面关于“图书”的主键的想法,这个“参与”表至少有序列号和作者的某种id作为外键。这是我的问题。在我的头脑中,这并不意味着,因为每个作者都通过参与,把他们应该与ISBN相关联的序列号联系在一起,你知道的,他们作品的真实世界的id。

数据库逻辑中有问题吗?比如换一些书上的钥匙或者参与。还是我想得太多了?

BTW正在与mysql.合作

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-28 16:25:59

你可能需要第四张桌子。

您的图书表应该被分割成一个父表,它代表了一本书的概念,还有一个新的子表,用于图书的副本,即图书馆拥有的实际内容。

book表保存ISBN编号、标题、发布日期。copy表包含您提到的序列号、库获取副本的日期、图书的当前状况以及副本离开收藏的日期(丢失/丢弃/销毁)。

顺便说一句,想想你的意思是,“序列号”是一个不断增加的计数,被用作主键,还是同一本书的区别因素。

而且,我建议将桥表的名称从Participation更改为Authorship,以便更具描述性。表格应该用单数来命名,而不是复数。

这是我粗糙的ASCII-艺术ERD

作者-1-0<作者>0-1-书-1-0<拷贝

每个作者都有0、1或多本他们为之编写的书籍,因此authorship表中有0、1或多个子行。每本书都有零、一个或多个作者,因此authorship表中的行数为零或多行。一本书的零authorship行意味着作者是未知的,或者作者还没有被分配。

计划添加到集合中的每本书在复制表中都有零行。当最终获得副本时,行将被添加到此表中。

图书管理员可能有他们自己的术语,可以在这里取代bookcopy

你也可能对一本书的版本有问题。但在这里我会忽略这一点。

技巧:搜索“数据库规范化”,了解有关如何在数据库设计中排列表的更多信息。

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

https://stackoverflow.com/questions/67742321

复制
相关文章

相似问题

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