RE:地豆モ-DeclarationとReferenceというか、テーブルをどう表現しているかっていう話になっている気がする

id:tonocchoに話した地豆のモデルについて、話した内容を本人がまとめてくれた。

http://d.hatena.ne.jp/tonoccho/20090830/1251625017

ちょっくら補足したい所があったので、まとめてみる。ちなみに、ブクマには「嘘が混ざっている」としてしまったが、エントリは全体的に間違ってはいないことを確認した。早とちりだw

以下はあくまで補足です。引用部分の表記は俺による取り消し部分俺による追記部分とします。

地豆の中ではDataTypeMoldとDataTypeというのがある。前者は、そのDataTypeが何であるか、という定義で、後者は実際にその定義に対する参照実例
(中略)
さて、DataTypeMoldはdeclaration定義で、DataTypeはreferenceそのinstanceだ。

http://d.hatena.ne.jp/tonoccho/20090830/1251625017

「宣言と参照」という話をしたのだが「鋳型と事例」の話よりも強くなってしまっている鋳型と実例、というのは、クラスとインスタンスの関係。"" と "".getClass() の関係だ。

まぁ、突き詰めれば結局間違いではないのだが、それ以前に「鋳型と実例である」ことを強調した方がいいかな、と思った。

col1にとって、VARCHAR(32)は、declarationだけど、VARCHAR(32)は、RDBMS内に実装されたVARCHARの定義(Mold)に対するreferenceだ。

col1 VARCHAR(32) という記述は、新しくcol1というカラムを定義する部分であって、このcol1の位置にあるトークン(単語)によってカラム名が決定する。従って、col1という識別子をdeclaration(宣言)と呼ぶ。次の例で現れる FOREIGN KEY col1 という記述の中のcol1は、新しく定義するのではなく、別の所で定義されたカラムを参照する部分である。これをreference(参照)と呼ぶ。

http://d.hatena.ne.jp/tonoccho/20090830/1251625017

XXにとってYYはdeclaration/referenceである、という表現がちとおかしい。XXにとって、という概念はない。ただ単に、とある識別子がdeclarationなのかreferenceなのか。ただそれだけのことである。

感覚は分かるだろうか?ここまで把握した時点で、さらに知識を補足する。

VARCHARというトークンは「VARCHARという型の特性を定義*1」している訳ではないので、言うなればreferenceである。このreferenceに対する宣言はどこにあるのかというと、RDBMS内で定義されている、と考えてよい。

ただ、JiemamyRDBMSの内部を参照して型の特性を取得するのは大変*2なので、DialectというSQL方言を実装したクラス内にデータを持っておいている。

このデータがDataTypeMold、つまり「鋳型」である。本来のdeclarationはRDBMS内にあるのだが、Jiemamyでは便宜的に、そのdeclarationの(いわば)コピーを保持している、という状態だ。だから(コピーではあるけど)DataTypeMoldはある意味declarationである、というのは間違いない。

補足はこんなところかなー。

*1:可変長の文字列である、という定義

*2:実行時にRDBMSの実体が必要になってしまう