見出し画像

【Digression】なぜ表形式(Tabular)モデルではなく、関係(Relation(al))モデルなのか

※ここで書くことは、例のごとく、専門的な話でも、アカデミックで精緻な議論の上での話でもない、「個人的な、あまりに個人的な」見解あるいは妄言です。

(R)DB設計やSQLにおけるデータ構造について考えたことがある方は、このようなことについて疑問に思ったことがある方も少なくないのではないだろうか。

関係モデルの提唱者(創案者)であるE・F・コッドもよく聞かれたらしいよ

引用著書によると、コッドは以下のように応答えたらしい。
「どうして関係モデルと呼ぶのですか」という質問に対して、

理由は2つある。(1)関係モデルを考えたころ、データ処理にたずさわる人たちの間では、複数の対象の間の関係(あるいは関連)は、つなぎデータ構造で表現されなければならないと考える傾向があった。この誤解を迎え討つために関係モデルという名前を選んだ。(2)関係よりも表の方が、抽象水準が低い。表は配列と同様に位置による呼出しが可能という印象を与えるが、n項関係ではそうではない。
また表の情報内容が行の順番と無関係であるという点についても、表は誤解を招きやすい。
しかし、こうした小さな欠点はあるにしても、関係の概念を表現するもっとも重要な手段は依然として表である。表といえば、だれにでもわかる。

-EF.コッド「関係データベース:生産性向上のための実用的基盤」『ACMチューリング賞講演集』(共立出版、1989)、p.459-460

本著では、「関係」と「表」の違いについて、特に現代的な意義のある(2)に言及している。

・関係には重複する組(タプル)は存在してはならないが、表には存在してもよい。つまり、関係は普通に言われる意味での重複を許さない集合だが、表は多重集合(multiset)である。
・関係の組は上から下へ順序付けられていないが、表の行は上から下へ順序付けられている。
・関係の属性は左から右へ順序付けれられていないが、表の列は左から右へ順序付けられている。
・関係のすべての属性は分割不可能だが、表の列の値は分割可能である。言い換えると、関係の属性は第一正規形を満たしているが、表の列はそうではない。

『達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ』p.261

まあコッドの思想的背景よりも、RDB設計における正規形とかの絡みが実装時になじみが深くて、わかりやすいかもしれない。
確かにExcel表とかの帳簿とか経理系のデータとかは、よくそのままだと正規形でないため、テーブルに落とし込む際、修正(正規化)が必要なことがある。
特に上でも言われている第一正規形(1つのカラムには1つの値しか含まない、全カラムがそれ以上分割できないスカラ値のみ持ちうる状態への言及とかそうじゃなかろうか。このあたりはOracleのDBAとかでも基礎概念周りで出てくるから、実感?しやすい、というのが個人的な印象だ。

補足
(いらん補足、蛇足かもだけど)コッドのいう「つなぎデータ構造」は原文だと(connectでなく)a linked data structureなので、データ構造の実装における参照とかポインタとか連結リストとかにあたるものだと思う。

一応該当部分の原文

There are two reasons: (1) At the time the relational model was introduced, many people in data processing felt that a relation (or relationship) among two or more objects must be represented by a linked data structure (so the name was selected to counter this misconception); (2) Tables are at a lower level of abstraction than relations, since they give the impression that positional (array-type) addressing is applicable (which is not true of n-ary relations), and they fail to show that the information content of a table is independent of row order. Nevertheless, even with these minor flaws, tables are the most important conceptual representation of relations, because they are universally understood.

https://dl.acm.org/doi/pdf/10.1145/1283920.1283937

https://dl.acm.org/doi/pdf/10.1145/1283920.1283937

DB周りは、理論的基盤として、集合論、述語論理が通奏低音になっているから、大変面倒力不足だから当分しないけど、その辺りもみていくと面白そう、linked data周りとかはしりとり圏とかの絡みで考えたら、圏論(Category Theory)周りにも話を展開できたら面白そう。

※Categoyって言ってもアリストテレス的な範疇論じゃないよ、そっちも面白そうだけど・・・
詳細は下記参照(Samuel EilenbergとSaunders MacLaneによるところ)

ほか参照


プログラミングと圏論まわりならBartosz Milewskiとかに詳しいかも

RDBの話だったのに、話が脱線しすぎてるかもしれない・・・まあいいか。

まあ、関係(relation)と表(table)でいうなら、エクセルでまとめられたいろんな表タイプとよくあるDB比べるとイメージしやすいかも、と思いました。
相変わらず、語学力、文章力、論理数理的素養にかける私には整理しかねるので今日はこの辺で、、、

この記事が気に入ったらサポートをしてみませんか?