这是我的第一个数据库项目,恐怕我的解决方案不是最好的。数据库跟踪不同“类型”的合作者。这些类型是公司,组织,雇佣工人,其他“人”…
所有这些都有完全不同的信息集,但它们都有一个共同的联系方式。我决定让用户输入他想添加到任何合作者的联系方式,无论是电子邮件、电话、url、传真等等…
所以我创建了“Contacts
”表,所有合作者的所有联系人数据都将放在其中,而不管合作者是什么类型的。TablesList
是包含合作者类型(公司、组织、工人)列表的表。
contacts表中的每一行都必须包含"TableID"
数字,该数字标识出合作者的类型(公司/工人/组织……),并且必须包含"RowID"
数字,该数字标识出联系人的确切公司/工人/组织。
存在联系表的问题包含来自1列中3个其他表的外键,这是不好的。我可以删除这些关系,在dbms不知道约束的情况下用thos id填充列,但这看起来并不是一个好的解决方案,所以现在我怀疑这个想法是否有用。
你有什么建议?
请记住,如果需要的话,将来可能会添加更多类型的合作者(如临时工/合同工、代理),并且联系人表也应该设计为支持他们。
提前谢谢!
BTW IM使用SQL CE和C#
下面是发生的事情的草图:
编辑
虽然感觉不对,但我只是删除了这些关系,到目前为止,它在我的应用程序中运行良好
最佳答案
我怀疑你的设计过于规范了。您可以通过将数据合并为三个表来简化它:公司、工人和组织。它不会被规范化,但使用起来要简单得多。
退房http://www.codinghorror.com/blog/2008/07/maybe-normalizing-isnt-normal.html