象と戯れ

 | 

2011-05-12

Functional Relational Database Management System

00:13 | Functional Relational Database Management System - 象と戯れ を含むブックマーク はてなブックマーク - Functional Relational Database Management System - 象と戯れ

関数型関係データベース管理システム、という造語を思いつきました。

プログラミング言語の世界では、「手続き型」があって「オブジェクト指向」があって、「関数型」があるわけです。何をもって関数型言語かというと、「関数(手続き)が第一級(First-Class)であること」と定義されるわけです。すなわち、関数をその他のオブジェクトと同様に変数に代入したりと扱うことができるということ。この定義にしたがえば、JavaScriptはもちろんPython/Perl/Rubyあたりも関数型と呼べると思います。そのへんと区別する意味で、Haskellなんかは「純粋関数型言語」と呼ばれたりしますね。

PostgreSQLはしばしば「オブジェクト関係データベース」と自称しています。どこをどう指してそのように呼ぶのか自分もはっきり理解していないですが、確かにPostgreSQLのデータ型拡張インフラとかはハンパじゃないです。データ型(クラス)を定義してその型に紐づく演算子やインデックスを定義できるという意味で、オブジェクトデータベースなのかもしれません。

ここまでくれば賢い方は察しがつきますね。関数をデータベースに定義して保存できるようにすれば、是即ち「関数型関係データベース」也。イメージ的にはこんなかんじ:

CREATE TABLE ftbl(
  id serial,
  fcol function( int, int ): int
);

INSERT INTO ftbl (fcol) VALUES ('return $1 + $2'), ('return $1 - $2');
SELECT
  fcol -> (id, 3)
FROM
  ftbl
WHERE
  fcol -> (id, id) > 0

みたいな。関数型を名乗るからにはカリー化もできないと。

SELECT
  fcol2 -> (3) -> (5)
FROM
  ftbl
;

そんなニーズどこにあるのかって思いますね。こういうものが存在しなかったからニーズがないのか、ニーズがないから存在しないのか。いやいや、そういえばこないだかかわった案件ではそんなDBになってましたね。もしかしたらFRDBMSとして論文書けるかも?「弊社は関数型関係データベースを開発しております」とか言ったらなんか22世紀の会社みたいだ。

「それは1960年代にだな、」という識者のご意見があればぜひコメントください。

 |