我正在尝试为一个小型图书图书馆创建一个数据库。这不是一个专业的项目,只是我自己的练习。这是我第一次尝试这个(我是自学成才的),我遇到了一个问题。在我继续之前,我将在下面提供我的 ER 图版本(我是在 Paint 中制作的,使用以下资源进行标记):
我最大的问题是解决这样一个事实,即书籍可以具有相同的标题但有多个版本或者是一个集合的一部分。一个例子是指环王三部曲,或编程 Windows,第 5 版,或国际象棋开局百科全书,卷D。
我不知道如何将其合并到我的 ER 图中以避免数据冗余。
因此我问这些问题:
在我的 ER 图中,我应该如何解决书籍可以具有相同标题但有多个版本或者是集合的一部分这一事实?
由于我没有经验,你能指出我的ER图中的错误,如果有的话,并提出改进意见吗?
由于这是我在这里发表的第一篇文章,如果需要更改任何内容(如果它不符合本网站的问题格式)或者您需要更多信息,请发表评论。
谢谢你。
我会说Edition是与Book相关的实体。
然后,您在 Books 和 Editions 之间建立了一对多的关系。(一本书可以有多个版本。)以及 Editions 和 Publishers 之间的多对一关系(多个版本由一个出版商出版)。
过去,当我构建实际数据库时,我总能接触到一位或多位“主题专家”,这些人通过不断使用已经熟悉了数据。大多数主题专家既不是计算机专家也不是数据库专家。你的情况有些不同。
我会尝试找到某种在线主题专家,例如国会图书馆。他们可能有某种出版业模型,可以回答这个问题以及您对出版领域的实际运作方式提出的其他问题。这个模型可能在公共领域。
PS:恭喜你使用ER模型作为分析工具,没有过早地投入到数据库设计中。
我看到一种设计可能符合您的要求
Book
桌子Editions
桌子Sets
桌子现在我看到上面设计的一个问题,假设如果发布者改变了新版本,那么
PublisherId
clumns 可以更好地移动到Editions
表以在将来提供这样的灵活性,与多个相同writerId
或 incase of multiplewriterId
,您可以选择再添加一个表来保存writerId
与editionsId
。为 Id 列选择INT/BigInt
。我认为,如果您查看您的模型并考虑它无法处理的要求(即您的问题),那么您会发现您需要稍微扩展您的模型。考虑以下 ERD:
(请注意,我使用 James Martin鱼尾纹表示法,它比您使用的更紧凑,但应该很容易理解。唯一稍微不同的特征是使用大写字母“I”来表示关系是实体标识符的一部分)
以下是该 ERD 解决的一些要点:
可以
BOOK
租用的是实物(假设您正在处理纸质书籍)。这意味着您需要允许拥有多个副本。因此,一本书有一个标题,但它与标题不是一回事,所以我的模型有TITLE
自己的实体。根据您是否想要快照哪些书被租给了谁,或者您是否想要审计追踪哪些书被租给了谁,您需要有一个 0,1 对多或多对许多关系来表示每本(实体)书籍的租赁状态。
每个
BOOK
都有一个EDITION
. 这不一定是特别版。它可以是第一版、平装本、特别版等。一个
EDITION
将有一个TITLE
。同一本书的每个版本都将具有相同的标题,因此TITLE
属于同一EDITION
级别的关系。同样,每个版本都将由同一出版商(或出版商集团)出版,而不同的版本可能有不同的出版商。
PUBLISHER
由于您可以拥有多个发布者,因此需要在和之间建立多对多关系EDITION
。A可以有多个作者,所以和
TITLE
之间需要多对多的关系。TITLE
WRITER
这取决于您要存储有关版本的哪些信息。您可以添加另一个带有
Edition
列和Book_ID
外键的表。(例如,一个版本有一本书)使用集合,您可以有另外几张桌子。一个带
Set_ID
柱子和一个Set
柱子;和另一个带有一Set_ID
列和一Book_ID
列的表。例如 -
那有意义吗?
抱歉没有画图,我不熟悉它们:)