存储元素集的参数化定义和单次传递查询以在SQL中获取它们

存储元素集的参数化定义和单次传递查询以在SQL中获取它们,sql,database-design,parameterization,Sql,Database Design,Parameterization,假设数据库表包含某些元素的属性: Table Element (let's say 1 000 000 rows): ElementId Property_1 Property_2 Property_3 ------- ---------- ---------- ---------- 1 abc 1 1 2 bcd 1 2 3

假设数据库表包含某些元素的属性:

Table Element (let's say 1 000 000 rows):
ElementId    Property_1    Property_2    Property_3
-------      ----------    ----------    ----------
1            abc            1            1
2            bcd            1            2
3            def            2            4
...
该表正在频繁更新。我希望存储这些元素集的定义,以便使用单个SQL语句可以获得例如

SetId    Element
---      -------
A        2
B        1
B        3
C        2
C        3
...
我还想在需要时更改定义。到目前为止,我已将集合的定义存储为交点的并集,如下所示:

Table Subset (~1 000 rows):
SubsetId    Property    Value    Operator
--------    --------    -----    --------
1            1          bcd      =
1            3          1        >
2            2          3        <=
...
在SQL中,我想我可以从表中生成很多case表达式,但到目前为止,我只是加载了表,并使用了一个外部工具来完成基本相同的事情


当我想到这一点时,我很高兴(并且实现了它)。最近我一直在想它是否像我想象的那样美妙。有没有更好的方法来存储集合的定义?

我认为在这里使用duck类型可能是一种直观的选择

例如,所有现代语言(C#、Java、Python)都有集合的概念。如果要通过SQL“相交”或“并集”(集合运算符),则必须以关系方式存储它们。否则,为什么不以本地语言的方式存储它们呢?。(与关系型相反)。通过本机方式,我的意思是,如果它是在Python中完成的,并且我们使用了Python集,那么这就是我要坚持的。与Java或C#相同

因此,如果集合id 10的成员为1,4,5,6,它将按如下方式保存在DB中:

      SetId              Set
______________________________________
10                       1,4,5,6
11                       2,3
12                       null
当然,这有一个缺点,即它可能是专有的,甚至可能是非性能的-您可能知道,因为您有完整的问题定义。如果您需要SQL来分析它,也许我的建议还有其他缺点

从某种意义上说,每种语言的集合表示功能都类似于DSL(领域特定语言)——如果您需要在应用程序类/对象之间“谈论”大量集合内容,那么为什么不使用自然匹配呢

      SetId              Set
______________________________________
10                       1,4,5,6
11                       2,3
12                       null