为各种类型的联系人设计表格

时间:2011-01-26 19:28:45

标签: nhibernate database-design

今天我的系统中有三个联系人来源:

  • 系统用户
  • 地址簿
  • CRM系统

这些存储在不同的表中。我正在从内部ORM解决方案转向nhibernate,而nhibernate获得了很好的继承支持。因此,我正在考虑:

  1. 创建包含所有公共字段的基表
  2. 为每个联系人类型(系统,地址簿,crm)创建一个表,其中包含特定字段+指向基表行的链接(base_user_id或类似名称)。 地址簿,crm)。
  3. 这种解决方案的好处在于,同步每个源码要容易得多。将用户从地址簿导入CRM系统只需创建CRM表并将其链接到基表中的用户即可。修改地址簿中的用户会自动在CRM中修改它。

    它也可以轻松添加其他来源并保持所有内容同步。

    我的问题是:你能看到这种解决方案有什么问题吗?

2 个答案:

答案 0 :(得分:1)

加入丛林将是一个问题,导致性能问题。数据库不需要此配置,并且在强制执行此配置时速度会变慢。

数据库老手经常批评ORM的原因是(至少从我们的观点来看)向后,数据库的类层次结构的持久性远远低于设计表的效率然后修改类代码。

为什么不创建反映现有效率设计的类?

答案 1 :(得分:1)

每个层次结构使用一个表格更简单,但它放弃了2个功能:

  • 您可能希望其他表只有一个联系类型的外键,但是使用每个层次的表,这是不可能的。他们提到了一个联系人,就是这样。你可以使用复合键来解决它,但这会丢掉简单性。
  • 您的派生类列必须在数据库中可以为空

我试过了两个。我更喜欢table-per-hierarchy而不是table-per-subclass,因为我喜欢将它们全部放在一个表中的简单性。