Sql server EF中用于自连接的最佳sql体系结构

Sql server EF中用于自连接的最佳sql体系结构,sql-server,tsql,entity-framework,database-design,Sql Server,Tsql,Entity Framework,Database Design,我有一个关于自连接的架构问题 我有一个具有唯一int标识符的对象表。这些对象可以独立存在,也可以作为对象集合的一部分存在。集合在同一个表中表示为对象,但其类型设置为集合 e、 g 该对象以前可能属于0个或多个集合,因此我有另一个存储映射的表 e、 g 已决定它们现在只能属于1个集合。我的问题是,保留现有的额外表还是修改对象表,使其具有存储唯一ID的ParentID字段更好 这也用于EF,因此关系映射可能会变得复杂 感谢您提前提供的帮助。一般来说,在应用程序层强制实施完整性约束(即保持数据结构不变

我有一个关于自连接的架构问题

我有一个具有唯一int标识符的对象表。这些对象可以独立存在,也可以作为对象集合的一部分存在。集合在同一个表中表示为对象,但其类型设置为集合

e、 g

该对象以前可能属于0个或多个集合,因此我有另一个存储映射的表

e、 g

已决定它们现在只能属于1个集合。我的问题是,保留现有的额外表还是修改对象表,使其具有存储唯一ID的ParentID字段更好

这也用于EF,因此关系映射可能会变得复杂


感谢您提前提供的帮助。

一般来说,在应用程序层强制实施完整性约束(即保持数据结构不变)不会立即给您带来问题,但从长远来看可能会带来问题。在最终用户可以修改所有数据以适应新的政策/要求之前,保持数据结构不变可能是一个很好的中间解决方案,但我的办公室有一句话,“如果数据可以放在那里,它就会放在那里”;这意味着,如果引用完整性允许,您可以打赌它会发生


我的建议是,如果ParentID/自引用模型是真正建模需求的解决方案,那么请尽快使用它;当然,这必须与预算、时间、用户承诺等相平衡。

如果树中有多个分组,那么映射表是一个很好的“可扩展”解决方案,但是如果只有一个分组“级别”,那么映射表就太复杂了。 IE:如果一个对象集合可以有一个主对象,而不是任何其他对象的主对象,那么一定要进行自连接。 但是,如果对象集合也可以是主对象,则当前的映射解决方案会更好

原因是“你需要走在树上吗?” 要返回SQL中的所有关系,需要为每个级别(递归)重新查询表。 如果只能控制孤立对象,则单个查询可以返回所有值

1 | ObjectName | IsolatedObject
2 | CollectionName1 | CollectionObject
3 | CollectionName2 | CollectionObject
2 | 1
3 | 1