我有以下要求:
第一种方法是在Project表中包含对Person和Company表的引用。但加入的问题很难管理。
在我的工作场所使用的第二种方法是使用EntityType和EntityId,其中EntityType可以是(1 = Company或2 = Person),EntityId是指相应表中的记录id。我可以看到连接仍然是这种方法的一个问题,因为它需要在与这些表连接后进行联合。由于Project是我的关键实体之一,我可以看到这是一个非常昂贵的例程。
我有兴趣了解这个设计问题是否有更好的方法?
答案 0 :(得分:2)
设计新表OwnerType
。这可以包含行individual
或company
。
现在,请添加表OwnerType
到ProjectOwner
表&在项目表中包含一个复合键。
答案 1 :(得分:1)
从纯SQL的角度来看,我将使用以下内容:
Projects
- ProjectID
- OwnerID -> references ProjectOwners.OwnerID
ProjectOwners
- OwnerID (identity and PK)
Company -> inherits from ProjectOwners
- CompanyID (PK and FK to ProjectOwners)
People -> inherits from ProjectOwners
- PersonID (PK and FK to ProjectOwners)
此设计允许您保持完整的RI。缺点是任何连接都涉及更多表,这将影响性能。
答案 2 :(得分:0)
我只想用ID代理键创建一个EntityTable。
然后让公司和个人表格具有EntityID FK
到这张桌子。你真的不需要EntityType列,
你可以从Person到EntityTable进行内连接;如果你找到了
没有排,那么它是公司,而不是人(反之亦然)
但这是主观的,我不确定是否有任何内容
更好的做法。