存储元素集的参数化定义和单次传递查询以在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