数据库设计帮助:无论如何,这是谁的孩子

Ref*_*din 3 sql database sql-server database-design sql-server-2008

我正在为我的妻子建立一个联系人经理计划,作为学习Silverlight 4的有趣练习.它将跟踪人们的地址,电话号码,电子邮件,特殊场合(生日,周年纪念日等)

在设计数据库的过程中,我遇到了一个小路障.她想能集团联系()的家庭,所以我创建了一个Families有桌子FamilyIDFamilyDescription,然后添加FamilyID到表People.

现在SELECT * FROM People WHERE FamilyID = 2将回归那个特定家庭的每个人.

认为这是一个可以接受的想法; 但是,我在努力学习如何融入孩子,就像孩子一样.我们有一个非常非常大的家庭,所以每个家庭会有多个孩子.我是否只是将它们添加到桌面人物中,如果是这样,我如何区分孩子们和成年人的关系?

我非常感谢任何见解,谢谢.

OMG*_*ies 8

问题PEOPLE.familyid在于它确保一个人只能属于一个家庭.这意味着如果你想区分直系亲属和大家庭,你会看到一个层次结构来关联这些家庭,当它们不一定是分层的时候......

最容易使用的解决方案是包含一个多对多表,因此您可以将PEOPLE记录与任意数量的FAMILY记录相关联:

PEOPLE_FAMILY_MAP

  • PEOPLE_ID(主键,外键PEOPLE.id)
  • FAMILY_ID(主键,外键FAMILY.familyid)

如果要显示人与人之间的关系 - 您需要使用关系类型表(type_code,description)和关联关系:

  • PERSON_ID(主键,外键PEOPLE.id)
  • RELATED_TO_PERSON_ID(主键,外键PEOPLE.id)
  • RELATIONSHIP_TYPE_CODE(主键,外键RELATIONSHIP_TYPE_CODES.RELATIONSHIP_TYPE_CODE)