我有一个包含个人信息的表person
,我还有另一个表person_contact
来存储有关该人的联系信息(type
显示是否是电话记录或电子邮件记录,以及record
包含实际的电话号码或电子邮件地址。
在person_contact
我已将pcont_id
和person_id
声明为PK,而person_id
是引用person.person_id
的FK。我是否需要PK pcont_id
?我应该何时在一对多关系中使用单个PK,何时使用复合PK更好?
答案 0 :(得分:1)
您不需要person_id
作为person_contact
表中主键的一部分。如果两个表之间存在一对多的关系,pcont_id
应该是主键。
我是否需要PK pcont_id?
我建议,它应该在那里,并且应该是您桌子的主键,假设您可以为一个人拥有多个联系人。
如果一个人只能有一个联系人,那么在这种情况下您不需要该表,您可以直接将数据存储在人员表中。
如果您仍想单独存储,那么您不需要pcont_id
列,您的person_id
列应标记为主键。
我应该何时在一对多关系中使用单个PK以及何时使用 使用复合PK更好吗?
当您使用junction table/associative table
映射多对多关系时,将使用复合主键。如果是一对多关系,您不需要使用外键列的复合主键。