创建一个可以具有级联父子关系的 SQL table
Create a SQL table that can have cascading child parent relationships
我有一组实体,它们可以有子实体,这些实体本身有子实体,它们有子实体......等等。问题是后续子实体的数量在实体之间不是恒定的。
示例:
汽车有一个引擎,引擎有多个组件,这些组件可能包含多个零件,而这些零件可能有更小的零件
如上所述,后续向下级联的子实体的数量在火车和汽车之间是不同的,因此我不能为每个父实体创建不确定的子表。
我的问题是,存储此类数据并维护每个父项与后续子项之间关系的最有效方法是什么?一个例子将不胜感激。
最简单的数据模型是这样的树:
TABLE Entity (Id, Name, EntityTypeId, ParentEntityId NULL)
TABLE EntityType (Id, Name, ParentEntityTypeId NULL)
在更复杂的模型中,例如不同的车型共享相同的电机型号(不清楚您是在谈论车型还是特定的汽车),ParentEntityId 列将被替换为关系 table:
TABLE Entity (Id, Name, EntityTypeId)
TABLE EntityHierarchy (Id, ParentEntityId, ChildEntityId)
EntityHierarchy table 中的条目将受到 EntityTypes 树的约束(在应用程序级别)
在更复杂的模型中,ParentEntityTypeId 也将替换为层次结构 table。
如果您的实体或其类型随时间发生变化,您还可以向这些 table 中的任何一个添加 DATE 范围。
我有一组实体,它们可以有子实体,这些实体本身有子实体,它们有子实体......等等。问题是后续子实体的数量在实体之间不是恒定的。
示例:
汽车有一个引擎,引擎有多个组件,这些组件可能包含多个零件,而这些零件可能有更小的零件
如上所述,后续向下级联的子实体的数量在火车和汽车之间是不同的,因此我不能为每个父实体创建不确定的子表。
我的问题是,存储此类数据并维护每个父项与后续子项之间关系的最有效方法是什么?一个例子将不胜感激。
最简单的数据模型是这样的树:
TABLE Entity (Id, Name, EntityTypeId, ParentEntityId NULL)
TABLE EntityType (Id, Name, ParentEntityTypeId NULL)
在更复杂的模型中,例如不同的车型共享相同的电机型号(不清楚您是在谈论车型还是特定的汽车),ParentEntityId 列将被替换为关系 table:
TABLE Entity (Id, Name, EntityTypeId)
TABLE EntityHierarchy (Id, ParentEntityId, ChildEntityId)
EntityHierarchy table 中的条目将受到 EntityTypes 树的约束(在应用程序级别)
在更复杂的模型中,ParentEntityTypeId 也将替换为层次结构 table。
如果您的实体或其类型随时间发生变化,您还可以向这些 table 中的任何一个添加 DATE 范围。