当前位置:  开发笔记 > 编程语言 > 正文

你如何处理关系数据库中的m..n关系?

如何解决《你如何处理关系数据库中的m..n关系?》经验,为你挑选了3个好方法。

让我们看一个例子 - 书籍.一本书可以有1个作者.作者可以拥有1..m的书籍.代表书籍所有作者的好方法是什么?

我想出了一个创建Books表和Authors表的想法.Authors表具有作者姓名的主AuthorID密钥.Books表具有主要书籍ID和有关书籍的元数据(标题,出版日期等).但是,需要有一种方法将书籍与作者和作者联系起来.这就是问题所在.

假设我们有三本鲍勃的书.然而,在一本书中,他将其写成Bob博士.另一位他写作鲍勃博士,第三位是罗伯特博士.我希望能够确定这样一个事实,即这些作者实际上是同一个人,但却以不同的名字存在.我也希望将鲍勃与另一位写不同书籍的鲍勃区分开来.

现在让我们在应用程序中添加另一个部分,一个跟踪有趣人物的Person表.让我们说Bob是一个有趣的人.我想不仅要说这三本书的作者都是鲍勃,而且这个有趣的鲍勃与作者鲍勃是鲍勃一样.

那么对于这种可能复杂的映射存在哪些策略,同时确保书籍作者通过封面上的名称来识别?



1> Joel Coehoor..:

添加另一个名为BookAuthors的表,其中包含BookID,AuthorID和NameUsed的列.NameUsed的NULL值意味着将其从Author的表中拉出来.这称为交叉表.


显然Joel的速度比我快46秒.

2> tom.dietrich..:

你需要三张桌子 -

    作者

    BookAuthors

本书将包含书籍ID,书名以及您需要收集的有关该书的所有其他信息.

作者将包含作者ID以及其他信息,例如您需要收集的关于任何给定作者的名字,姓氏.

BookAuthors是一个多对多连接,包含BookID,AuthorID和NameUsed.这将允许该书具有零或多个作者,对于作者具有零或多本书,以及关于要捕获的该关系的信息.例如,您还可以在BookAuthor表上有一列描述作者与书籍的关系("编辑者","前言词").



3> Paul Tomblin..:

我觉得你差不多了.您需要一个Books表,一个Authors表,然后是一个"authors_of_books"表,其中包含该书的主键,作者的主键以及一个"引用为"的文本字段,显示该特定作者在该书中的引用方式.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有