为什么类型安全的关系操作如此困难?

时间:2015-05-02 08:35:30

标签: haskell types relational-database theory hindley-milner

我试图在Haskell中编写关系问题,当时我必须发现以类型安全的方式执行此操作远非显而易见。例如。谦虚

select 1,a,b, from T

已经提出了许多问题:

  • 这个功能的类型是什么?
  • 投影1,a,b的类型是什么?一般来说投影的类型是什么?
  • 结果类型是什么,如何表达结果类型和投影之间的关系?
  • 接受任何有效投影的此类函数的类型是什么?
  • 如何在编译时检测无效投影?
  • 如何向表格或投影添加列?

我相信即使是Oracle的PL / SQL语言也没有这么做。虽然invald投影主要在编译时检测到,但是大量的类型错误仅在运行时显示。大多数其他绑定到RDBMS(例如Java的jdbc和perl的DBI)使用字符串中包含的SQL,因此完全放弃了类型安全。

进一步的研究表明,有一些Haskell库(HListvinyl和TRex),它们提供了类型安全的可扩展记录等等。但是这些库都需要Haskell扩展,如 DataKinds FlexibleContexts 等等。此外,这些库不易使用,并且有一种诡计的气味,至少对于像我这样的未初始化的观察者来说。

这表明,类型安全的关系操作不能很好地适应功能范例,至少不像在Haskell中实现的那样。

我的问题如下:

  • 以类型安全的方式对关系操作建模这种困难的根本原因是什么。 Hindley-Milner在哪里落空?或问题是否源于已键入的lambda演算?
  • 是否存在一种范式,关系操作是一等公民?如果是这样,是否有真实的实施?

0 个答案:

没有答案