让我们看一个例子 - 书籍.一本书可以有1个作者.作者可以拥有1..m的书籍.代表书籍所有作者的好方法是什么?
我想出了一个创建Books表和Authors表的想法.Authors表具有作者姓名的主AuthorID密钥.Books表具有主要书籍ID和有关书籍的元数据(标题,出版日期等).但是,需要有一种方法将书籍与作者和作者联系起来.这就是问题所在.
假设我们有三本鲍勃的书.然而,在一本书中,他将其写成Bob博士.另一位他写作鲍勃博士,第三位是罗伯特博士.我希望能够确定这样一个事实,即这些作者实际上是同一个人,但却以不同的名字存在.我也希望将鲍勃与另一位写不同书籍的鲍勃区分开来.
现在让我们在应用程序中添加另一个部分,一个跟踪有趣人物的Person表.让我们说Bob是一个有趣的人.我想不仅要说这三本书的作者都是鲍勃,而且这个有趣的鲍勃与作者鲍勃是鲍勃一样.
那么对于这种可能复杂的映射存在哪些策略,同时确保书籍作者通过封面上的名称来识别?
添加另一个名为BookAuthors的表,其中包含BookID,AuthorID和NameUsed的列.NameUsed的NULL值意味着将其从Author的表中拉出来.这称为交叉表.
你需要三张桌子 -
书
作者
BookAuthors
本书将包含书籍ID,书名以及您需要收集的有关该书的所有其他信息.
作者将包含作者ID以及其他信息,例如您需要收集的关于任何给定作者的名字,姓氏.
BookAuthors是一个多对多连接,包含BookID,AuthorID和NameUsed.这将允许该书具有零或多个作者,对于作者具有零或多本书,以及关于要捕获的该关系的信息.例如,您还可以在BookAuthor表上有一列描述作者与书籍的关系("编辑者","前言词").
我觉得你差不多了.您需要一个Books表,一个Authors表,然后是一个"authors_of_books"表,其中包含该书的主键,作者的主键以及一个"引用为"的文本字段,显示该特定作者在该书中的引用方式.