ラベル DDD の投稿を表示しています。 すべての投稿を表示
ラベル DDD の投稿を表示しています。 すべての投稿を表示

2009年7月21日火曜日

【DBiD】2 関係と型


* 2 関係と型
自分なりのポイントを自分なりの言葉で書く。

- まず、基本的には、リレーショナルモデルにもいわ
ゆる型がありますよ、ということ。

** Coddのオリジナルモデルからの修正
- Coddがドメインと呼んでいるものは型にすぎない
- Coddは、異なる型に属する属性間の比較を許してい
る(ドメインチェックオーバーライド)が、これは禁
止されるべきである。
- データの「原始性」という言葉にはちゃんとした意
味はない。
- 何が「原始的」かは、ユーザの観点というかニー
ズによる。

** リレーショナルモデルの型システム
- 型
- = 値の名前付き集合
- リレーショナルモデルの型システムの特色/注意点
- 強い型付けである。
- 本書ではすべての値は単独の型にのみ属するもの
とする。リレーショナルモデルの型継承及び型多
重継承については割愛する。(そんなものあるの
か?)
- すべての式は型をもつ。
- リレーショナルデータベースに含まれる変数は
関係変数のみである。他の変数は存在しない。
- 再帰的な型の定義を許さない。すなわち、関係r
の型がTであるとき、関係rの属性の型がTである
ことは許されない。
- ポインタ型は存在しない。この部分、記述が弱く
て正確には理解できないが、おそらくCのポイン
タのイメージだろう。メモリアドレスを取り扱
うような型ということかな。
- 型はスカラーと非スカラーに大別される。
- 非スカラー型
- = タプル型または関係型のこと。
- スカラー型
- = スカラー型以外の型。
- 属性へのアクセスはセレクタで行う。セレクタ
は例えばSNO('S1')など。
- 属性として関係も使える。これを関係値属性
(Relation-Valued Attributes)と言う。SQLでは
サポートされていない。


こつこつ。

2009年7月20日月曜日

【DBiD】1 概要

自分なりのポイントを自分なりの言葉で書く。


* 1 概要
- データベースの基礎の大部分はリレーショナルモデ
ルというものに属している。
- SQLはリレーショナルモデルではない。
- この本ではリレーショナルモデルを正しい用語
で正しく取り扱う。
- リレーショナルモデルの定義は徐々に変わりうるも
のである。(数学が進化するのと同じ意味で)
- この章ではE.F.Coddが提示したオリジナルモデルを紹介
する。後の章ではそれを発展させることもある。
- オリジナルモデルは、構造、整合性、操作の3つの基
本要素によって構成される。
- 構造の語彙
- 型 (ドメインとも)
- 関係
- 属性
- タプル
- キー
- 候補キー
- 主キー
- 外部キー
- 参照
- 整合性の語彙
- 整合性制約 (制約とも)
- 個々のDBに特有の制約
- 汎用的な制約
- 実体整合性
- null (Dateはnullの存在に批判的)
- 参照整合性
- 操作の語彙
リレーショナルモデルの操作は、リレーショナル代
数とリレーショナル代入から成る。
- リレーショナル代数
- 閉包性
- ネストしたリレーショナル式
- 最初に定義された8つの演算子
- 制限
- 射影
- 積
- 交わり
- 和
- 差
- 結合
- 商
- リレーショナル代入
- リレーショナル計算
- リレーショナル代数の代替物。
- 本書ではメインには扱わない。
- 本書の各所説明にてベースとなる例
- サプライヤと部品のデータベース
- 関係S
- 契約を結んでいるサプライヤを表す。
- 属性
- サプライヤ番号 (SNO)
- 名前 (SNAME)
- 評価または状態値 (STATUS)
- 所在地 (CITY)
- キー
- サプライヤ番号は主キーである。
- 関係P
- 部品の種類を表す。
- 属性
- 部品番号 (PNO)
- 部品名 (PNAME)
- 色 (COLOR)
- 重量 (WEIGHT)
- その部品の補完場所 (CITY)
- キー
- 部品番号は主キーである。
- 関係SP
- 出荷(出荷された部品とその部品を出荷したサ
プライヤ)を表す。
- 属性
- サプライヤ番号 (SNO)
- 部品番号 (PNO)
- 数量 (QTY)
- キー
- {SNO,PNO}は主キーである。
- この例では特定のサプライヤが特定の部
品を出荷できるのは1度まで、としている。
- データモデルの2つの意味
- 2つの意味の定義
1. リレーショナルモデルのこと。すなわち、リレー
ショナルモデルの3要素(構造、制約、操作)を抽
象機械を使って定義したもの。
2. 特定企業等の永続データのモデル。
- 本書では1の意味でデータモデルを用いる。
- 1の意味のモデルは、実装との分離を目的としたも
のである。これをデータ独立性と言う。
- 関係の語彙のチューンナップ
- 関係は見出しと本体とから構成される。
- 見出し
- = 属性の集合
- 次数/項数 (degree/arity)
- = 見出しに含まれる属性の数
- 本体
- = タプルの集合
- 濃度 (cardinality)
- = 本体に含まれるタプルの数
- 関係は常に第一正規形(1NF)である。
- 属性とタプルを指定する組は常にユニークであ
るということ。まあ、属性とタプルが集合なら
自然とそうであろう。
- リレーショナル代数の入出力がらみ
- リレーショナル代数によって関係から関係を作る
とき、素材になった関係を基底関係、作られた関
係を派生関係と呼ぶ。
- 派生関係にも名前をつけることができる。そのと
きそれをビューと呼んだり仮想関係と呼んだりす
ることもある。
- 関係と関係変数
- 関係はファーストクラスであり、名前をつけるこ
とができる。
- 語彙
- 関係変数 (テーブル変数とも)
- ソース式 (Tutorial Dの代入文の右辺のこと)
- ターゲット変数 (Tutorial Dの代入文の左辺のこと)
- 関係値
- relvar (関係変数の表記)

C.J.Date、ちょっとアジりすぎかも?
でも内容はおもしろそう。

こつこつ

2009年7月14日火曜日

【AIMAメモ】Agentアプローチ <=> Domain指向 の間違い

------
Agent in Environment.

なんですがこれは、

Domain in World.

と同型であり、ここでDomain指向との対応がとれる、と。
------

違う! これは同型ではない。同型なのは、

------
an Agent in an Environment in the World
an IT system in a Domain in the World
------

だ。

こんなんじゃ、駄目だ。。。

2009年7月13日月曜日

【AIMAメモ】Algorithm = Logic + Control の周辺

Algorithm = Logic + Control.

なわけですが、一方で、より有名なので、

Programs = Data structures + Algorithms.

があるわけです。

ちなみにAIMAがエージェントアプローチと呼ばれるのは、AIMAで取扱うものは、機械だろうが生物だろうが、ソフトウエアだろうがハードウエアだろうが、Common Lispが採用言語だろうがJavaがそうだろうが、エージェントという統一的な観点で整理しているからです。

そこで、Logicが知識表現である、というのが私にとっては大きな気づきでした。AIMAの中では他の知識表現として統計的なものを含めてLogic以外のものも取り上げられています。ベイズとか隠れマルコフとか。それらがどちらかというと現代的なAIのお話になっている。

さて、日頃プログラムを書くときにデータというのはよく使うわけですが、これもエージェント的な観点でみると何かしらの知識表現とも見做せてきます。そうすると、

Algorithm = Logic + Control.

ではなく、

Algorithm = Knowledge Base + Control.

の方がいいように思えてきます。Knowledge Baseの構築方法の一つとして知識表現にLogicを使うこともあるよ、ということで。Knowledge Baseを拡大解釈すれば、あながち間違いではないかと。

するとデータベースってなんじゃないな、ということが気になるわけです。

これはこれで、Prologと、SQL(というか関係代数)との関係含めて先々確認しなければいけないのですが、ある種のデータベースはKnowledge Baseとみなすのがよいと思うし、ある種のデータベースは、外界としてしまってデータベースとのやりとりは、エージェントのセンサを介して情報を得るという、外部入出力とみなすのがよいように思います。直感ですが。



まとめると、Environmentの中で、

Agent = Sensor + Actuator + Intelligence.

なんですが、Intelligence というのはいろいろありえてSoftwareの場合もあり、
Sensor,Actuator,Intelligenceの全部がSoftwareの場合がよくあるプログラミングでやっていることで、
だからそれをProgramと呼んで、
その場合は全部Softwareなので、どこでインターフェイスを切りますかということが整理の入口になりそれがアーキテクチャであり、
同じ対象領域でも何がSensorで何がActuatorでとかは違うわけで、
SensorとActuatorは外部インターフェイスというか入出力と考える部分にあたり、
するとIntelligenceの部分が入出力以外ということになり、いわゆるProgramの本体部分なので、

Intelligence = Data structures + Algorithm

なんですが、Data structuresを知識表現とみれば、

Algorithm = Knowledge Base + Control

のKBに吸収されてしまうので、

Intelligence = Knowledge Base + Control

となるなか、

データベースはEnvironmentに属すのかIntelligenceに属するのかという判断があるので、
その判断によって、EnvironmentにいったりKBにいったりするという。

さて、大本にもどると、

Agent in Environment.

なんですがこれは、

Domain in World.

と同型であり、ここでDomain指向との対応がとれる、と。
そちらの言葉で言えば、DomainとWorldの境界線がSystem Boundaryにてシステム思考が出てくる、と。

また、Common Lispのhomoiconicというのは、

Algorithm = Knowledge Base + Control.

ここのKBとControlの境目を柔軟にして探検的にプログラミングできますよ、ということで、それだけじゃなくて、リストまたはS式というのは知識表現言語として柔軟ですよ、というつながり。

つながった?

2009年7月11日土曜日

【AIMAメモ】論理のモデルと設計のモデル

これは、気づきではなくて、改めて確認したこと。

論理におけるモデルと設計におけるモデルとは随分違う。

文章にしてみて、より理解を堅牢にしてみたい。

まず、論理におけるモデルは、より具体的には、論理言語のモデルのことを指す。
次に、設計におけるモデルは、対象領域の記述のためのモデルのことを指す。

順番は逆になるが、それぞれさらに詳しくいうと。

対象領域の記述のためのモデルとは、例えばMVCにおけるモデルであり、それはドメインを分析した結果、そのドメインにおいてエクステントが比較的に長い概念や語彙のことである。

論理言語におけるモデルとは、今、ある論理言語にて書かれた文αがあるとして、そのαの真偽を考えるにあたって想像しうる(存在しうる)可能世界(possible world)のことである。

ということ。

ここでまず違うのが、

設計におけるモデルは現実に対する「何らかの抽象」と位置付けられているのに対して、
論理におけるモデルは論理文αに対する「何らかの(想像しうる)具象」と位置付けられている、

ということである。ただし、これら2つのモデルという言葉の用法がunification可能かどうか考えてみると、これはできそうだ。

設計におけるモデルというのは抽象ではあるが、それはいろいろ考えうる抽象のうちの一つであり、その中から設計の選択として実装に使用するモデルを選択しているということである。これって可能世界としてありうるものの一つという感覚と似てなくもない。

こう書いてみると、抽象と具象というのはN:Mな関係であることに気づいた。ある抽象を決めれば、それを満たす具象がいろいろあると考えられる(具象群)。OOにおけるクラスとオブジェクトの関係。具象群からある抽象をつくるとは、その具象群の抽象の形というのはいろいろありえるわけで(抽象群)、その中から選択をする行為とも考えられる。まあ、実際に設計をするということは、この双方をいったりきたりして、フィードバックをかけてチェックしつつうまい抽象化というのを探索している行為と考えられるのですが。


ちなみにSPINなどのModel checkerのモデルとは、論理の方のモデルのことですね。

2009年7月10日金曜日

【AIMAメモ】知識工学とDSL

そうか、知識工学って今でいうDSLとかなりクロスオーバーしているものなんだ!

DSL : システム分析 -> ドメイン分析 -> ドメインモデル -> 手続き/永続化実装 -> 基本的なデータの投入 -> DSLとして利用
知識工学 : システム分析 -> ドメイン分析 -> 語彙と知識表現の決定 -> 知識を表現 -> 推論エンジンを介して利用

前半戦に類似がある。

2009年7月5日日曜日

英単語を使う理由

かなり疲れた状態で書くのでこわいのですが。

書きたいと思ったので書いちゃって、しかも公開しちゃいます。

ブログのエントリを書くときに、結構英単語をおりまぜて書いています。本当は嫌なんです。日本語で書きたい。日本人だし。あと英単語をおりまぜるなんてなんかいやらしい気もして。

それでも英単語で書くのは、理由があります。

  • 訳語のゆらぎの問題

    • 米語だとゆらいでいないのに、日本語の訳語が本や訳書によってゆらいでいるものがあります。用語のゆらぎが理解を相当にさまたげることはDomain Driven Designで散々言われていることですよね。これは損失だと思います。
    • もしかしたらどこかで適切な訳語の定義がなされているものもあるかもしれないが、それを探す方法がなかったり、手間だったり。

  • 訳語のイメージが理解を妨げる問題

    • なんどかこのブログでも書いていますが、expressionsを式と訳語にしたこと、variablesを変数と訳語にしたことは、日本の数学教育の失敗だと思っています。式は訳語としてはありなんですが、式がもつ古来からの意味を理解している現代人は普遍的ではないので、うまくイメージできないことがほとんどと思います。いっそのことexpressionsは「表現」の方がよかったと思います。またvariablesを変数としたのは明確な失敗です。variablesを変数としたことの失敗は議論の余地が少ないと思います。そもそもvariablesの中に数という意味要素は含まれていないはずです。数理論理学では変数じゃやりきれないので変項と言うようです。が、これもイマイチです。おもいきって大和言葉の「うつろい」でもよかったかもしれません。こういうことがいろいろあるのです。
    • もしかしたら、これら問題は、和算と洋算のオントロジをマッピングする際に発生したものであり訳語を考案したのではないかもしれません。しかし経緯によらず欠点は欠点です。

  • 名詞のもつパワー

    • 英文を読んでいてよく思うのは、名詞が運ぶ意味の量が多いことです。まず数の概念。文脈とあいまって、単数形、複数形で同じ単語でも意味がかなり違います。そしてtheを代表とするanaphoricな機構がこれまた文脈とあいまって意味をたくさん運ぶことができます。もちろん日本語でも表現できるのですが、簡潔さが違います。

      • lisp is beautiful.
      • A lisp is beautiful. (この表現はほとんどつかわないと思いますが)
      • The lisp is beautiful.
      • Lisps are beautiful.
      • The lisps are beautiful.

      みんな意味やニュアンスが違います。日本語に意訳すると次の感じだと思います。

      • lispという考え方または概念/存在は美しい。
      • ある美しいlispがあると考えてみる。
      • (文脈によって特定された)そのlispは美しい。
      • (実体をもった、すなわちlispにおいては処理系どももイメージされつつ)lispってきれいだなぁ。
      • (文脈によって特定された性質を鑑みつつ)そんなlispって綺麗だよね。

      科学の書籍について、訳書が原書よりも厚くなる理由はこの部分にあるのではと睨んでいます。(統計的な検証はしていません)


誤解がないように補足しておきますが、日本語も米語とくらべていいところがいろいろあるのです。まず、掲題の「は」は非常にコンパクトで有用です。主述関係にとらわれずに、多様な関係を述語でくくれるのも柔軟です。助詞「が」の代行もやっかいな側面もありますが総称助詞としてadhocな表現には便利です。オノマトペが潤沢です。表意文字の漢字もコンパクトです。

で、結果として英単語をおりまぜて書くのですが、それもやりきれていません。後からみれば、ここは複数だよな、とか、theがないと結局意味ないけどthe入れてないじゃん、とか。仕事の文書ではきっちりやらないといけないわけですが、まあブログなのでいいかな、と。

何かを文章にして言明する、ということは、悩みが深いです。

2008年12月24日水曜日

学びのエクササイズ 認知言語学

昨日は街中をぶらぶらしつつ本を読んだ。

学びのエクササイズ 認知言語学

を一気読み。面白かった!
OOの抽象ドメインモデル、DSLなどとの関連が浮き出ている。
また認知言語学の背後にあるのは圏論。圏論の雰囲気もつかめた。

気分転換にお勧めの一冊。

2008年9月17日水曜日

【シプサ】6 計算可能性の理論における先進的な話題 (その2)

上半期末に向けて、業務が膨大に、、、
されど、こつこつ。
「6.2 Decidability of logical theories」から。

  • ある数学的言明(statement)が真かどうかを判定するアルゴリズムがあるかどうか、ということは、もちろんその言明が属している数学のドメインによる。判定するアルゴリズムがあるドメインもあるし、それが存在しないドメインもある。
  • このことをTMで扱うために、言語をつくる。
  • その言語に含まれる要素は、真である(ある特定された対象ドメインに属する)数学的言明の表現である。
  • 数学的言明というオブジェクトの表現方法を決める。文字列で表現するルールをきっちり定める、ということ。
  • ここで定めているのは、一階述語論理っぽい。

  • R(x1, ..., xj)のかたちのもの = atomic formula
  • 構成ルールにしたがって、atomic formulaからつくったもの = well-formed formula (単にformulaと言うときはこれ)
  • formulaで、コンティフィアが冒頭にしかないもの = prenex normal form
  • formulaで、no free variableなもの = sentence or statement

  • さて、これでformulaを整備できた。違う言葉でいうと、数学的言明を表現する方式を確立した。

  • あと、やらねばならぬことが2つ。

  • ひとつは、variableってなんじゃないな、ということ。
  • それはvariableの値になりうるのはこれこれですよということを明確にする集合があるとする。
  • その集合をUniverseと呼ぶ。
  • これを具体的に割当てる必要がある。(これが意味論?)
  • つぎに、Relationsというのは第一章で確認済みな真偽値を値とする写像なんだが、
  • この言語におけるRelationsシンボルが、どういう具体的Relationを表現しているのよということの特定。(これが意味論?)

  • で、この具体的に特定された(universe, relation assignments)の組のことを、modelと呼ぶ。
  • 逆に、あるmodelに対応したstatementの集りのことを、language of a modelと呼ぶ。
  • ここで「対応した」とは、そのmodelに適合した形(relationシンボルとrelationのarityがポイント)であるということ。
  • で、ここ、ややこしいというか用語が混乱しているように思うのだが、

    • model Mがあるとする。
    • statement Φ が 、Mに対するlanguage of a modelに属しているとする。
    • すると、Φは、Mによって、trueとなったりfalseとなったりするでしょう。(ここまではよい。)
    • あるMでΦがtrueになったとする。
    • そのとき、MはΦの a modelであるという。(ここ、ちょっと混乱している)

  • まあ、これが定義なのだからしかたなし。

  • EXAMPLE 6.10 そうか、「∀x∀y(R1(x,y)∨R1(y,x)をモデル(N,<=)で考える」というのが言語とモデルの正式な関係で、これを「∀x∀y(x<=y)∨(y<=x)を考える」といってしまうのはこのモデルを念頭においた略記にすぎないのだな。

  • で、Th(M): theory of M の定義

    • a model たる Mがあるとする。
    • すると、Mに対する複数のlanguage of a modelがあるだろう。
    • そのなかで、すべてのsentenceがtrueとなるものがあったとする。
    • それをtheory of Mと呼ぶ。


TMもずいぶん長くやっているし、「論理学をつくる」で一階述語論理まではかじっているので、すんなり。
とりあえず、ここまで。
次回は、これらについて判定可能性を調べていく。