使用数据库循环实体设计

Using database cyclic entity design

我想存储有分公司的公司数据,每个分公司有不同的部门。我有以下选择:

  1. 创建 Company、Branch 和 Department 实体以存储 3 种不同的信息。
  2. 创建一个具有循环关系的实体,并使用公司类型来区分。 可能的数据结构:company(id, CompanyName, type, parent) 可能的数据:

公司。

Id >CompanyName >Type >Parent

1 >Honda >HQ >NULL

2 >Honda US >B >1

3 >Honda Japan >B >1

4 >Honda US HR >D >2

5 >Honda US Sales >D >2

我倾向于使用选项 2,因为好像有像 Conglomerate 这样的新要求,因为高级别选项 2 将能够解决它而无需引入新的 table。

这样的设计有意义吗,还是以后会出问题? 请评论。

您有两个相关但独立的问题需要回答。

首先 - how do I store inheritance relationships in a relational database?公司、部门和分支机构都是 "business unit" 的实例 - 如果它们大部分相同,您可以使用单个 table,但如果它们都相当不同,则使用单个 table通常是一个糟糕的设计(有关更多上下文,请参阅其他 SO 问题)。

第二个问题是"how do I store hierarchical relationships in my inheritance model?"。为了保持一致性,我会将其存储在您为继承解决方案选择的同一模型中;但是有一个单独的 "relationships" table 可能是有意义的。这将使您能够处理意想不到的关系 - 例如,一个分支机构可能是两个部门之间的合资企业。