【发布时间】:2016-07-08 11:39:53
【问题描述】:
如果您不清楚允许用户插入值的集合是什么,请检查值是否在列表中并找到相交(如果值存在于两个集合中)。此外,一个集合只能保存一个值一次。
如何在 SQL 中使用集合?我正在使用 sqlite,但将转向 postgresql。对我来说最明显的选择是有一个 SetID, SetValue 的 Set 表,这两个值是主键。但是我觉得这不会有效,因为 SetID 会重复很多次。另一种选择是有一个表int SetId, blob SetArray,但我需要手动实现设置逻辑。
在 SQL 中进行集合的最佳方法是什么?对于 sqlite 还是 postgresql?
【问题讨论】:
-
在我看来,具有两列
SetID和SetValue的表的第一个选项是迄今为止最好的。多次重复同一个 ID 的开销是最小的,总的来说,通常明显低于拆分 blob 的成本。主键或至少一个唯一索引将确保一个值只能在一个集合中存在一次,然后EXISTS和INTERSECT/EXCEPT运算符可用于识别集合中的重叠和差异,然后对于精确匹配,请参阅this answer -
@GarethD:我就是这么想的。您的评论应该是一个答案。我不知道 EXCEPT 运算符是个好东西
-
我不相信该评论有足够的实质内容使其成为答案。我没有任何参考资料或测试来证明一种方法比另一种更好,而且我仅根据我的意见做出的回答可能会阻止其他地方提供更好的、有根据的答案。
标签: sql postgresql sqlite