查找SQL中超集的子集

时间:2010-11-01 01:10:44

标签: sql database-design relational-database

我正在思考一个应用程序的设计,其中主要功能围绕能够找到所有集合的集合,这些集合是给定集合的子集。

例如,给定输入集A = {1,2,3 ... 50}和集合集B = {B1 = {3,5,9,12},B2 = {1,6,100,123, 45} ... B500 = {8,67,450}},返回作为A子集的所有B。

我猜它与搜索引擎类似,不过我确实没有套装A很小而且Bs很大的奢侈品;在我的情况下,Bs通常小于A。

我发现了一个类似的问题here,但是想知道是否有更高效/标准的问题。

1 个答案:

答案 0 :(得分:3)

哈珀的回答是正确而优雅的。当然是有经验的SQL编码器中的“标准”。当然要求必须规范化数据库:父项不重复;家长::孩子有两个关系; Child表中有两个唯一索引(ParentKey,ChildKey)和(ChildKey,ParentKey),“否则所有的赌注都关闭”。不可能获得比这更好的性能(假设服务器已正确配置硬件等)。下一步是6NF,它确实提供了显着的性能提升,但除非必须,否则你不需要去那里。如果你的Bs小于你的Bs,它会非常快。

另一种方法是使用子查询。根据您的Db供应商,子查询(特别是如果您的Bs小于您的B)可以更快。例如。 Sybase比MS更好地处理子查询。