将[Head | Tail]编译为SQL

时间:2013-12-17 09:07:17

标签: sql compiler-construction prolog

Prolog构造是面向列表的,因为列表允许将tuple-at-once Prolog模型合并到all-solutions关系模型(SQL,比方说)。

我正在考虑将列表处理Prolog代码编译为SQL。

我认为Draxler的编译器pl2sql没有解决问题(适当地,术语list从未使用过......)。

我在想一个配对翻译的专栏,

append(A,B,C) ~~>
    table(append, A_key,A_val, B_key,B_val, C_key,C_val)

其中_key将是行ID,并表示具有不同自连接的关系,根据头部变量的实例化状态选择。

替代设计可能是

append(A,B,C) ~~>
    table(append_A, key, val), table(append_B, key, val), table(append_C, key, val)

使用连接,而不是如上所述的自连接。

有谁知道先例工作?

可行性如何?特别是,可以避免存储过程吗?

编辑我找到了FunSQL文件,应该是相关的...要阅读。

1 个答案:

答案 0 :(得分:1)

关系数据库模型的第一种常规形式 表示表列应该只存储标量值。

但没有人会阻止你违反这些限制。 您可以使用一些非标量值的序列化 在列中存储非标量值。这也是经常发生的 从实践中发现,将数据结构分解为 标量可能是笨拙和低效的。

通过这种方式,您可以使用SQL来运行带有列表和/或的Prolog 化合物。典型的解决方案将无法完全解决 将Prolog子句或查询转换为SQL但也需要 发布SQL的主机语言中的一些代码 命令。你可能会牺牲一些统一的灵活性 而是实现所谓的允许演绎数据库 在列表存在的情况下不再是数据记录 和/或化合物。

最好的问候