数据库规范化方案

时间:2013-12-20 09:23:16

标签: sql database-design

我有以下要求:

  1. 项目可以由公司或个人拥有。什么是这个设计问题的好方法?
  2. 第一种方法是在Project表中包含对Person和Company表的引用。但加入的问题很难管理。

    在我的工作场所使用的第二种方法是使用EntityType和EntityId,其中EntityType可以是(1 = Company或2 = Person),EntityId是指相应表中的记录id。我可以看到连接仍然是这种方法的一个问题,因为它需要在与这些表连接后进行联合。由于Project是我的关键实体之一,我可以看到这是一个非常昂贵的例程。

    我有兴趣了解这个设计问题是否有更好的方法?

3 个答案:

答案 0 :(得分:2)

设计新表OwnerType。这可以包含行individualcompany。 现在,请添加表OwnerTypeProjectOwner表&在项目表中包含一个复合键。 Sample Schema

答案 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进行内连接;如果你找到了 没有排,那么它是公司,而不是人(反之亦然) 但这是主观的,我不确定是否有任何内容 更好的做法。