图书数据库.ISBN或序列号作为主键



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

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

在这一点上,您可能会说序列号应该是主键,因为它具有成为主键的所有要求。我同意。问题是,还有一张名为";作者";由于每本书可以有多个作者,每个作者可以有多本相关联的书,所以我需要两个表(books和authors(之间的M-M表。让我们称之为"参与";。

遵循先前的"主键"的思想;Books";,这个";参与";表将至少有外键,包括序列号和作者的某种id。这就是我的问题。在我的脑海中,这并不意味着每个作者都通过参与将一个序列号关联起来,而他们本应与ISBN关联,你知道,他们作品的真实世界id。

数据库逻辑有问题吗?比如更改Books或Participation上的一些键。还是我想得太多了?

BTW Am使用mysql

谢谢。

您可能需要第四个表。

您的图书表应拆分为一个表示图书理念的父表,以及一个用于图书副本(图书馆拥有的实际物品(的新子表。

book表格包含ISBN编号、标题和出版日期。copy表包含您提到的序列号、图书馆获得副本的日期、书籍的当前状况以及副本离开收藏(丢失/丢弃/销毁(的日期。

顺便说一句,仔细想想你的意思是,"序列号"是一个不断增加的计数,用作主键,还是同一本书副本之间的区别因素。

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

这是我粗糙的ASCII艺术ERD。

[作者]-1--0<[作者身份]>0-----1-[book]-1-----0<[副本]

每个作者都有零本、一本或多本书,所以authorship表中有零个子行、一个子行或多子行。每本书都有零个、一个或多个作者,所以authorship表中有零行或多行。一本书的authorship行为零意味着作者未知或尚未分配作者。

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

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

你也可能对一本书的版本有意见。但我会忽略这一点。

提示:搜索"数据库规范化"以了解有关如何在数据库设计中排列表的更多信息。

最新更新