CLP和SQL之间有什么关系?

bob*_*obo 4 sql constraint-programming

在阅读约束逻辑编程时,我不禁注意到与SQL编程的明显关系.SQL是否是"约束逻辑编程"的一个例子?

kth*_*sis 5

从高层次来看它们非常相似.两者都是声明性的或基于集合而不是迭代的(意味着你要求你想要的东西 - 你不会逐个循环并逐个处理单个项目).

CLP可以在SQL中建模,但它可以找到更好的问题解决方案.SQL适用于在已明确定义的给定数据集中查找答案.CLP适用于在松散或有时甚至不完全定义的域中查找答案.

举个例子.如果我想使用SQL返回1到1000万之间的所有偶数,我需要一个包含列出的所有数字的表(现有数据集).使用CLP我只需要一个绑定(10M),但不必显式创建所有记录.

内部CLP引擎(CSP问题)也可以推断出约束以使它们更快.SQL你必须弄清楚这些规则并明确说明它们.例如,如果您的SQL位于A = B和B = C的位置,则CLP引擎可能会发现A = C并使用它在SQL不能运行的情况下运行得更快.他们也可以类似地推断域以优化运行时间(如果我知道永远不会返回偶数,CLP会将它们从考虑中抛出 - SQL仍会考虑它们但不会返回作为"解决方案").

希望这会有所帮助 - 如果您需要,我可以获得更多技术.要记住的关键点是两者相似但你使用的取决于问题模型.如果你能说"这些是我的变量,这些是相互关联的,给我任何有效的解决方案",那么CLP是一个很好的候选人.如果你可以说"有我的变量,这些是具体的,给我一些适合的现有数据的子集",那么SQL是一个更好的候选者.