我使用Adjacency List格式在MS SQL数据库中存储大型层次结构。每个项目都有IndexNumber
和ParentIndexNumber
列。 IndexNumber列存储每个项目的序列号,ParentIndexNumber可用于计算层次结构深度。
有一个非常罕见的错误会破坏层次结构的有效性,因此我希望有一个SQL脚本来测试有效性,以便于测试和验证。以下是无效层次结构的示例:
| IN | PIN | |
|----|------|-------|
| 3 | NULL | |
| 4 | 3 | |
| 5 | 3 | |
| 6 | 4 | FAIL! |
| 7 | 6 | |
IndexNumber 6失败,因为IndexNumber 4的所有后代都应该有一个大于4的IndexNumber,但它们应该在IndexNumber 4的兄弟之后永远不存在,比如IndexNumber 5.我得到的数据使用了一个简单的选择,如下面的那个但是可以我测试有效性?使用较大的数据集和多个数据库,手动浏览数据非常耗时。层次结构可以是7层深。
SELECT
IndexNumber, ParentTopicIndexNumber
FROM
Items
ORDER BY IndexNumber;