ERD的一部分显示了3个表之间的关系。
用户可以拥有多个tarcks(歌曲)
许多用户可以拥有一个跟踪
中间的表解析了多对多关系并具有复合主键。以及存储特定用户如何评价特定曲目的信息。
http://i.imgur.com/Rn4PnGO.png
中间表是否需要新的主键“User_Rating_ID”,还是可以(更好?)将其保留为复合键?
答案 0 :(得分:1)
交集表定义了两个实体之间的关系。如果这是匿名关系,则不需要单独的代理键。
例如,零件表和单位表可以有一个表格,用于定义用于制作每个单元的零件。每个部件可以用在多个单元中,每个单元由许多部件组成(有时是几个特定部件)。这样的表可能如下所示:
UnitID PartID Qty
这样的交叉表可能没有代理键。被问及这种关系的常见问题是:
我无法想到甚至会使用这种关系的单独密钥的任何情况。所有问题都涉及特定部分或特定单位。
另一方面,参加一门课程和一个学期。交叉表将建立课程,即教授课程的特定课程。这里可能存在同一学期内特定课程的几个实例。史密斯教授每天可以在m-w-f上进行1小时的Math-101课程,在琼斯教授的每天第1小时进行1.5小时。
在注册和其他未来的记录保存期间,不将是Math-101或将被跟踪的学期,但特定的类将被使用。因此,需要单独的代理密钥。
分析将在您的实例中确定关系是否是匿名的。
答案 1 :(得分:0)
这取决于您使用数据的方式。
从严格的逻辑角度来看,复合主键表示需要说什么,并且工作得很好。有一些不寻常的情况,单独的PK可能会有所帮助。
答案 2 :(得分:0)
多对多交集表没有任何问题,它具有由两个外键列组成的复合主键,这两个外键列指向通过交叉点链接的两个表。
有些人可能希望向这样的交集表添加额外的候选主键,特别是无意义的系统生成的ID号(或GUID等)。
有人可能会这样做的原因包括:*
table_name
,record_id
,change_date
,change_user
等项目。*注意:我不是因为上述任何原因而提倡的。我说他们是“你会在野外”发现的意见。您的里程可能会有所不同,做出自己的决定等等。