Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将[Head | Tail]编译为SQL_Sql_Compiler Construction_Prolog - Fatal编程技术网

将[Head | Tail]编译为SQL

将[Head | Tail]编译为SQL,sql,compiler-construction,prolog,Sql,Compiler Construction,Prolog,Prolog构造是面向列表的,因为列表允许将元组一次Prolog模型合并到所有解决方案关系模型(比如SQL) 我正在考虑将列表处理Prolog代码编译成SQL 我认为Draxler的编译器并没有解决这个问题(恰当地说,list这个术语从未被使用过…) 我在考虑一个专栏对翻译 append(A,B,C) ~~> table(append, A_key,A_val, B_key,B_val, C_key,C_val) 其中_键是行ID,表示与不同自联接的关系,根据head变量的实例状

Prolog构造是面向列表的,因为列表允许将
元组一次
Prolog模型合并到
所有解决方案
关系模型(比如SQL)

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

我认为Draxler的编译器并没有解决这个问题(恰当地说,
list
这个术语从未被使用过…)

我在考虑一个专栏对翻译

append(A,B,C) ~~>
    table(append, A_key,A_val, B_key,B_val, C_key,C_val)
其中_键是行ID,表示与不同自联接的关系,根据head变量的实例状态选择

另一种设计可能是

append(A,B,C) ~~>
    table(append_A, key, val), table(append_B, key, val), table(append_C, key, val)
使用联接,而不是如上所述的自联接

有人知道先例工作吗

可行性呢?特别是,是否可以避免存储过程


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

关系数据库模型的第一个标准形式 表示表列应仅存储标量值

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

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


最好的方面

SQL中缺少一部分构造是前关系数据建模(网络、层次、CODASYL)支持者对它的“敲打”之一。SQL支持者提出的典型“解决方案”的特点是在表上进行笨拙的自连接,这并不能真正说服批评者,但足以用于实际应用程序。