我正在将旧的国家/地区/位置数据库结构重构为分层表。
我将使用新表的主键和自引用ParentID列(在主键上)作为hierarchyid列的基础。
因此我的表格如下:
PK名称ParentID HierarchyID
1 World NULL /
2英国1/1 /
3 Wigan 2/1/2
我的问题是:在创建记录或更改记录的父级时,有哪些其他方法可以使hierarchyid列保持最新状态?
请注意;我正在使用LINQtoSQL(我使用计算的hierarchyid.ToString()列来显示代码中的谱系,以及存储过程以给我层次结构查询的性能优势)。
对于插入/更新管理:
我已经考虑在LINQtoSQL中为我的新表覆盖插入/更新过程。
我考虑过使用存储过程来管理更新/插入新记录。
我在插入/更新后考虑了一个递归触发器,以根据ParentID执行更新。
然而,我还没有决定采取哪种方法!
有没有人使用这些方法中的任何一种来管理层次结构?有没有更好的方法,我没有考虑过,或者我错过了一些非常明显的东西!!?
答案 0 :(得分:2)
我刚刚做了一个类似的项目,我使用存储过程来处理id管理。如果您正在进行一些简单的查询,LINQ很酷,但在调试和维护数据模型时会带来困难。
使用存储过程的好处在于它从应用程序层抽象出id管理,因此开发人员不需要了解底层数据库模型。同样在不好的方面,它从应用程序层抽象出id管理,这样开发人员就无法理解底层数据库模型而无需前往数据库并查看存储过程。
使用数据库触发器可能是最好的解决方案,但我决定不再使用它只是因为它会增加另一个抽象级别。这是因为它进一步混淆了真正的数据流程,留下了另一个地方寻找可能试图找出它是如何工作的人。
最重要的是,您应该以一种在整个系统(或您的项目中)至少一致的方式强制执行参照完整性。