使用数据库循环实体设计
Using database cyclic entity design
我想存储有分公司的公司数据,每个分公司有不同的部门。我有以下选择:
- 创建 Company、Branch 和 Department 实体以存储 3 种不同的信息。
- 创建一个具有循环关系的实体,并使用公司类型来区分。
可能的数据结构: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 可能是有意义的。这将使您能够处理意想不到的关系 - 例如,一个分支机构可能是两个部门之间的合资企业。
我想存储有分公司的公司数据,每个分公司有不同的部门。我有以下选择:
- 创建 Company、Branch 和 Department 实体以存储 3 种不同的信息。
- 创建一个具有循环关系的实体,并使用公司类型来区分。 可能的数据结构: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 可能是有意义的。这将使您能够处理意想不到的关系 - 例如,一个分支机构可能是两个部门之间的合资企业。