我正在做一个图书馆数据库,需要存储,除其他外,序列号和ISBN的每一本书。彼此之间有什么区别?前者必须是独特的,后者则可以重复。例如,如果我有3本“我的书”(相同的格式;相同的出版商;相同的一切),我就会有这样的东西:
此时,您可能会说序列号应该是主密钥,因为它有所有的要求都是一个。我也同意。问题是,还有一个名为" authors“的表,因为每本书可以有多个作者,而且每个作者可以有多个相关的书籍,所以我需要在两个表(Books和Authors)之间建立一个M表。让我们称之为“参与”。
按照前面关于“图书”的主键的想法,这个“参与”表至少有序列号和作者的某种id作为外键。这是我的问题。在我的头脑中,这并不意味着,因为每个作者都通过参与,把他们应该与ISBN相关联的序列号联系在一起,你知道的,他们作品的真实世界的id。
数据库逻辑中有问题吗?比如换一些书上的钥匙或者参与。还是我想得太多了?
BTW正在与mysql.合作
谢谢。
发布于 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行意味着作者是未知的,或者作者还没有被分配。
计划添加到集合中的每本书在复制表中都有零行。当最终获得副本时,行将被添加到此表中。
图书管理员可能有他们自己的术语,可以在这里取代book和copy。
你也可能对一本书的版本有问题。但在这里我会忽略这一点。
技巧:搜索“数据库规范化”,了解有关如何在数据库设计中排列表的更多信息。
https://stackoverflow.com/questions/67742321
复制相似问题