SQL:如何实现泛型类?

问题描述:

我需要在SQL中实现如下分类:SQL:如何实现泛型类?

  • 组可以包含多个测试或多个(孩子)组
  • 测试可以在多个组
  • (子)组可以在多个(父)groups

...这意味着2 x M:N关系。下面的表格可以存储组树:

TEST_TABLE
为test_id(PK),TEST_NAME

GROUP_TABLE
GROUP_ID(PK),组名

TEST_IN_GROUP_TABLE
为test_id(FK ),group_id(fk)

GROUP_RELATIONS_TABLE
parent_group_id(FK),child_group_id(FK)

但是:

  • 如何列出组中的所有测试?这对我来说听起来很难,因为小组可能包含测试或其他测试的子小组。
  • 或者如何修改表以使这样的SELECT成为可能?我可以在GROUP_TABLE中创建更多child_count列。它将被触发器自动填充。但即使如此,这对我来说也很难。
+0

哪个版本的SQL Server? – RichardTheKiwi 2011-03-17 07:30:48

+0

数据库可能位于MS SQL Server 2008 R2上。 (我在逻辑模型中,我会稍后做物理模型)。 – jing 2011-03-17 07:37:58

+0

然后设计很好。测试组和1-M:M-1桥接表是正确的,层次表组关系也是如此。 – RichardTheKiwi 2011-03-17 07:40:48

您可以使用公共表表达式首先建立所寻找的组的group_id,然后使用该单一的组列表通过TEST_IN_GROUP_TABLE连接到所有测试的测试表。

;with cte as (
    select group_id 
    from GROUP_TABLE 
    where group_id = 1 
    union all 
    select child_group_id 
    from GROUP_RELATIONS_TABLE 
    inner join cte on cte.group_id = GROUP_RELATIONS_TABLE.parent_group_id 
) 
select t.* 
from cte 
inner join TEST_IN_GROUP_TABLE tg on tg.group_id = cte.group_id 
inner join TEST_TABLE t on t.test_id = tg.test_id 
+0

我验证了它,它的工作原理。谢谢。 – jing 2011-03-21 10:53:53