如何设计一个具有附加关系的单个数据库表的循环引用?

时间:2009-11-23 04:54:05

标签: sql database database-design data-modeling

我不确定如何最好地表达这个问题,但基本上我有一个联系人表,而不是典型的 - 联系人有一个带有配偶信息的表的引用,以及一个带有孩子的表,我希望每个人都成为联系人,然后定义这些联系人(兄弟,姐妹,孩子,配偶等)之间的关系。因此,联系人将存在于单个表中,但我无法根据联系人ID和关系类型确定如何最好地定义关系。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:6)

CONTACTS

  • contact_id,pk

CONTACT_RELATIONSHIP_TYPE_CODE

  • contact_relationship_type_code,pk
  • description

CONTACTS_RELATIONS

  • parent_contact_id,pk,CONTACTS table
  • 的外键
  • child_contact_id,pk,CONTACTS table
  • 的外键
  • contact_relationship_type_codeCONTACT_RELATIONSHIP_TYPE_CODE table
  • 的外键

如果您认为需要为一对人支持多种关系类型,请将CONTACTS_RELATIONS.contact_relationship_type_code列添加到复合主键

答案 1 :(得分:0)

这称为自联接,提供上面提到的功能非常常见且相当容易。看一下这个article

答案 2 :(得分:0)

只需实现一个包含四列的交叉表 - key,contactid#1,contact id#2和relationship。

为什么这样?因为联系人可以有多种关系。