第四回 「T字形データモデリング手法」(2009/1/9)の個人的な講義録です。
なお、講師が講義内にて話した話し言葉を、なるべくそのまま書いています。
一部、省略したり整形した部分もありますが、リアルタイムでタイピングした講義録ということで、ご了承下さい。
正確な内容が知りたいという神経質な方は、次回のITAA研修を受けるなり、他の研修を受けるなりして頂ければと思います。
1枚目 9:40~
モデル(model)
基礎となった学論
- 数学基礎論
- 言語哲学
モデルの全体像
- 生成規則(構造を作るための一般的な文法)
- 指示規則(作られた構造が正しいかどうか)
- 画法(diagramming)(お絵かき、モデルを図にすること)
生成規則=モデルと勘違いされやすい。
「その事業の制約・束縛」「ビジネス上の制約・束縛」「ユーザの制約・束縛」を、
一つも取りこぼすことなく、抽出することができますか?
=> 今まで苦しんでいたのは、実は正規化することではなく、制約・束縛を取りこぼさずに抽出することだった。
画法は、自分が使いやすい表記を使ってください。
こだわりたいのは画法ではなく、「網羅性」
「生成規則」->一般「手続き」として
- 網羅性(一つも取りこぼしがないこと)
- 検証可能性(抽出した要素が正しいかどうか)
- 事業を「正確に」記述する
関数
- 変換
- 対応
関数の例
y = f(x)
f(on) = 表示
f(120) = 1
f(4) = 250
関数とは、我々の業界で何を表すかというと
ブラックボックス(f)(論理法則・文法)に対してあるもの(x)をいれると、結果(y)が出てくる
「ある現実的な事態(事業過程、管理過程)に対するXX管理」
ある情報を渡し、意味を伝達し、形式的(論理法則を使って形成)
我々がモデルに対して勘違いしたこと
- モデルとは解釈だ、という勘違いをした(数十年前のSI業界)
- 現実的事態に対する解釈、と考えていた
- 作られた構造に対する解釈
「すでに現場で使われている情報のやりとり」「その事業特有の意味の伝達」は、SEが変えることの出来ないこと
- 現実的事態に対する解釈は、SEの仕事ではない。現場がやること。
- 本当に現実的事態に対する解釈をしたい場合、SEが実際に現場に行って数年間経験を積まないと無理。
ユーザの言語を変形しないで、論理的な構造に直さない限り、「事業を正確に記述」することは出来ない。
1 2 |
我々SEが本来やらなければ行けないことは、ユーザが行った現実的事態に対する解釈に対して、 ある論理法則に基づいて論理構造に表現すること。 |
ここで作られた論理構造が、本当に真なのか検証が必要。
出来る限り機械的に、一般手続きとして表現する。
作られた論理構造が正しいかどうか、どうやって検証をするのか
作られた論理構造を、現実の世界に対して当てはめてみることが大事。
ここで間違っていけないのは、
・ 作られた論理構造をユーザが保有する情報に当てはめてはいけない
ということ。
=>コンピュータ業界の人間は、ここを勘違いしている。
2枚目 10:20~
何を持ってあなたがやった仕事が「正しい(真)」とするか。
「真」とは
true とは
- 「L-真」(文法に従って)
- 文法に従って、無矛盾に、論理法則が作成されているかどうか、ということ
- 「妥当な構造」を取っただけ
- これを保証しているのは「論理法則」
- 「F-真」(事実的な)
- 作られた論理構造を現実世界にあてはめた際、正しかったかどうか、ということ
- 「真とされる値」
- これを保証しているのは、事業などの「制約・束縛」
真理条件(T-文)
1 2 3 4 5 |
例) 文'p'が真であるのは、 時刻tにおいて、 事態pと一致するとき、 そして、そのときに限る |
1 2 3 4 |
文「雪は白い」 が真であるのは、 雪が白いとき、 そして、そのときに限る。 |
「虚構・隠ぺい・改ざん」なし
- 事業で使われている自然言語「情報」に対して、矛盾がないか
注意:ここまで出てきた話では、ビジネス上の制約・束縛に関する話題は出てきていない。
注意:「論理法則」と「制約・束縛」を混同してはいけない。
本日の講義では、「妥当な構造」に関する議論と、「真とされる値」に対する議論の2つを、それぞれ分けて実施します。
この2つを、一般手続きとして実施します。
本日の講義では、「無矛盾(=L-真)(=構文論)」と「完全性(=F-真)(=意味論)」という単語を頻繁に使うので、まずはこの2つを覚えてください。
3枚目 10:50~
技術の一覧の洗い出しをするに当たって、事前の解説
(ロジックを使った)形式的な構成 =「 個体(集合)(=セット)(=クラス)」 + 「関係」
f(x) = f(x, y)
①個体が一次、関係は二次
②関係が一次、個体は変数
1 2 |
通常我々がモデルと呼んでいるのは②に該当。 ex)関係主義、関係モデル |
null(値無し)
充足していない、値がない、値ではない。
SEはnullに鈍感。
nullを認めるのはモデル違反。
- nullは2つの値を持っている。
- 定義されていない。
- 定義されているが、値を持っていない。
nullは、trueともfalseとも言えない。
もし、nullを認めるなら、以下の4値でやってください。
- true
- false
- undefined
- unknown
でも、SEは2値でやりたがる。
- true
- false
高度関係モデルからRDBから派生したproductが作成されたが、高度関係モデルとproductはかけはなれてしまった。
理由:高度関係モデルはnullを認めていないが、productはnullを認めている。
時代は変わり、E-R図が登場
正規化をしてE-R図で書けばいいと日本中に言ってしまったが、これは間違っていた。
正規化をしてE-R図で書いたものは、モデルではない。
論文を読むと、E-R図のエンティティに対する定義が存在しなかった。
現場は実体主義、我々は関係主義。
技術の一覧
- 事業の解析
- 「個体の認知」
- 「関係の性質」
- 「関係の文法」
↓
- 検算
- 「データの周延」
- 正しいクラスになっているかどうか
- 「データの多値」
- 一つの値が複数の価値を持っている
- クラスという概念を持ってこないと、分析・設計が上手くいかない
- 「データの周延」
↓
- 適用
- 「みなし概念」
我々が現場で扱っているデータには2種類がある
- データとデータの並びが関係するもの
- データとデータの並びが関係しないもの
例:時系列が関係するもの
配送 -> 入金 (後払い)
入金 -> 配送 (先払い)
例:配属や従属が関係するもの
AはBの父親です。 ≠ BはAの父親です。
AとBは友達です。 = BとAは友達です。
セット=集合 「個体の認知」「関係の性質」「関係の文法」「データの周延」
クラス=概念 「データの多値」「みなし概念」
1 2 |
「解析」と「検算」は一般手続き。 「みなし概念」は、概念を抽象化するので、人によって表現が微妙にずれる。 |
4枚目 11:20~
個体(集合)とは
- 定義不能
- 個体とは、誰がやったって同じになる
- 帰属するか、帰属しないか
- メンバーを選ぶ (x=y)(x≠y)
1 |
例)ペンギンは何か?鳥?実は定義不能。 |
指示する
合意
例)
ある企業では、ある規則に従って、これを「商品」と決めた。
1 2 3 |
出来るだけ機械的に構造化すること 手続き: 「合意(認知)」 -> 「L-真(構成)」 -> 「F-真(験証)」 ユーザの言語を変形しないこと |
「個体(エンティティ)(モノ)である = 個体指定子(エンティティーセンター)」が付与された対象であること
誤解されている例: エンティティーセンターをユニークキーやマスタとしてしまっている。
捨てて欲しいこと
捨てて欲しいこと:
30年~40年前の考え方(一意・マスターキー・ユニークキー)といったデタラメな考え方を捨ててください。
エンティティーセンターという考え方をきちんと身につけてください。
「在庫」 = 「構成されたリスト」
「言葉」や「意味」は、現実で解釈済です。我々SEが勝手に変えることはできません。それを変えようとするからおかしなことになるんです。
本来、個体(エンティティ)は定義不能です。
ただし、現場では実際に定義しています。
現実では、個体の認知が先です。
現実での個体とは、これ、これ、これと指を指して認知できるものです。
在庫は、エンティティではありません。構成されるものです。
5枚目 12:50~
個体識別子(entity-senter)とは
個体である = Df 固定指定子を付与された対象である。
- 一意性
- 複合構成
1. 一意性
絶対に守って欲しいルール
[マスターキー・ユニークキー]を捨てろ
1 2 3 |
(R) × Reference-Key ◎ Re-used 文法の中で再利用された |
個体指定子と一意性は別問題。
モデルを作る際は、マスターキー・ユニークキーを見つけようとしないで欲しい。
2. 複合構成
個体そのものは、「one and only」
1970年代
6枚目 13:10~
1970年代
1 2 3 4 5 6 |
┌─────────────┐ │ 従業員 │ ├──────┬──────┤ │部門コード │従業員名称 │ │従業員No │従業員住所 │ └─────────────┘ |
構造的プログラミング
部門コードと従業員Noをつかってマスターキー・ユニークキーにしようとしている。
=>これはだめ!
複合構成-①
1980年代
「充足」概念
1 2 3 4 5 6 7 8 9 |
┌─────────────┐ │ 従業員 │ ├──────┬──────┤ │従業員No │従業員名称 │ │ │従業員住所 │ │ │部門コード │<-Null! └──────┴──────┘ 4値Logic 2値Logic 複合構成-② |
↓
一見、認知Noだが、、、
部品No(34)
34桁のそれぞれの桁に対して、それぞれ意味が付与されている場合は、
1 2 3 4 5 6 7 |
┌─────────────┐ │ │ ├──────┬──────┤ │*部品No │ │ │ │ │ │ │ │ └──────┴──────┘ |
*をつけて、ユーザと再検討すること。
7枚目 13:20~
複合構成③
1 2 3 4 5 6 7 8 9 10 11 12 |
┌────────────────┐ │ 生産計画 │ ├─────────┬──────┤ │(作成)部門コード │台数 │ │作成日 │ │ │ │ │ └─────────┴──────┘ 部門コード(2) 作成日(8) 代用 01 20090108 02 20090108 01 20090109 |
ここで、部門コードと作成日をマスターキー・ユニークキーにするのは、間違い。
どんどん事業モデルと、自分が作成したモデルがずれてくる。
じゃぁどうするか、、、
1 2 3 4 5 6 |
┌───────────────┐ │ │ ├────────┬──────┤ │XXNo │ │ │ │ │ └────────┴──────┘ |
8枚目 13:30~
「関係」とは
「関係」の性質
1 2 |
aRb 読み方:aは、bに対して、関係R(relation)にある |
ここで・・・数学者は
1 |
aRb ≡ R(a,b) ≡ f(x,y) |
と書きたがる。
1 |
f(0,1) ≠ f(1,0) である |
ここで、2つの性質があることに気付く。
- 対称性
- R(a, b) = R(b, a)
- 例)恋人である
- 非対称性
- R(a, b) ≠ R(b, a)
- 例)父親である
ここで、またミスを犯した。
「よし、じゃぁあとは対称性を見つければいいんだ」
対称性・非対称性を見つけて、満足してしまうというミスを犯した。
例)
出荷 -> 出荷日
入庫 -> 入庫日
従業員 -> 従業員日はない、入社日はある
部門 -> 部門日はない
ここで、現場は、なぜ正規化がうまくいかなかったのかがわかってきた。
そこで、日付があるものをevent、日付がないものをresourceとする。
1 2 3 4 5 |
┌──────┬──────┐ │ A │ ┐A │ │ w/Date │ │ └──────┴──────┘ event resource |
なお、この日付は、取引日(過去日)のようなものを指す。
将来の日付は含まない。
日付
- 入社日
- 従業員
- 設置日
- 部門
---
- 有効日 適用日
9枚目 13:50~
まとめ
- 個体(entity)とは、、、
- Df 個体指定子を付与されている対象である
- event((取引・行為・出来事)とは、、、
- Df 性質として「日付」が帰属する
- resourceとは、、、
- Df eventの補集合である
1 2 3 4 |
┌─────entity────────┐ │ event │ resource │ │ │ (eventではない) │ └──────┴─────────┘ |
1 2 3 4 5 6 7 |
┌─────────────┐ │ │ ├──────┬──────┤ │No │Date │ │ │ │ │ │ │ └──────┴──────┘ |
左がNo、右が日付、これを守ればOK!
10枚目 14:00~
「関係」文法
aRb ≡ R(a, b)
- a≠b
- ①event - 対 - resource
- ②event - 対 - event
- 「先行・後続」関係
- ③resource - 対 - resource
- a=b(再帰)
- ④一つの集合の中のメンバー並べたもの
エンティティ(個体)は、必ずe(event)かr(resource)を書いてください。
eventは、時系列で並べてください。
eventの前後がわからない場合は、上下で並べて書いてください。
resourceは並べても意味はありません。eventの上下に散らしておけばいいです。
いろんなeventに関連しそうなresourceは、まん中に書いておくと、後で困らなくなります。
ここでは、きちんと並べようとしなくてよいです。
後の工程で、きちんと整列されていきます。
あとでお客様が読める状態になります。
お客様と再契約しなかった事例
- ある顧客でCRMをやりたい。
- 顧客の右側には、、、名称・住所・電話番号しか書いてなかった。
- 顧客を大事にしますと言っていながら、顧客のことを知ろうとしていなかった。
- コンビニでの事例。
- あるお客様が午前中に何を買ったのか管理していなかった。
- 日常の精密機械を扱っている会社
- シェアNo.1だったが、じわじわシェアが落ちてきた。
- 地域密着型、地域コミュニティを大切にした販売戦略をしていきたい、という要望。
- 地域コードはあったが、右側には何もなかった。名称もなかった。
- 実データは、地域には関心がないことを示していた。
つまり、実データは嘘をつかない。
お客様と我々の立ち位置の違い
- 現場に立って、現場を解析しようとすると、我々は当たり前だがかなうわけない
- 形式的にまとめて構造化さえすれば、現場と我々は対等に立てない
文法の話に戻って、、、
(行為者) (行為、出来事)
基本形 = resource が event に関与する
resourceの認知番号が、eventに入ることになる。
event - 対 - event
先行イベントのNoが、後続イベントに入ればよい。
11枚目 14:25~
ここで、うっかりある現象を忘れるというミスを犯した。
event(複数) - 対 - event
- 先行イベントが複数ある後続イベント
1 2 3 4 5 6 7 8 9 10 11 12 13 |
┌─────────────┐ ┌─────────────┐ │ 受注 E│ │ 請求 E│ ├──────┬──────┤ ├──────┬──────┤ │受注No │受注日 │ │請求書No │受注日 │ │ │受注数 │ │受注No(R) │受注金額 │ │ │ │ │ │ │ └──────┴──────┘ └──────┴──────┘ 受注No Date 01 00/01 02 00/03 03 00/04 04 05 |
上記は間違い!
こういう場合は・・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
┌───────────┬─┐ ┌───────────┬─┐ │ 受注 │E│ │ 請求 │E│ ├──────┬────┴─┤ ├──────┬────┴─┤ │受注No │受注日 │>─○─┼│請求書No │受注日 │ │ │受注数 │ │ │ │受注金額 │ │ │ │ │ │ │ │ └──────┴──────┘ │ └──────┴──────┘ │ ┌───────────────────┐ │ 受注.請求.対応表 │ ├─────────┬─────────┤ │受注No(R) │ │ │受注No(R) │ │ └─────────┴─────────┘ こういうmapping関数を作ればよい |
名前は「対応表」
並び替えたらダメ、という意味。
event(複数) - 対 - event(複数)の場合
即、現場に行ってください。
現場は仕事をやりづらくなっているはずです。
現場の仕事を改善する必要があるポイントが眠っているからです。
担当者が裏で隠しているデータがある場合が多いです。
12枚目 14:35~
resource - 対 - resource
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
┌───────────┬─┐ ┌───────────┬─┐ │ 従業員 │R│ │ 部門 │R│ ├──────┬────┴─┤ ├──────┬────┴─┤ │従業員No │名称 │>─○─┼│部門コード │名称 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────┴──────┘ │ └──────┴──────┘ │ ┌───────────────────┐ │ 従業員.部門.対照表 │<-日付が入ってイベントとなる ├─────────┬─────────┤ 「F-真」か? │従業員No(R) │DATE │実はビジネスの「制約・束縛」も │部門コード(R) │ │ここに含まれていることが多い。 └─────────┴─────────┘ |
名前は「対応表」
並び替えても平気、いう意味。
- Trueの否定形はFalse
- Falseの否定形はTrue
- Nullの否定形はNull
モデルでは、Nullは充足しない、ということを気をつけておいてください。
13枚目 15:05~
「在庫」はentityか?
対照表の例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
┌───────────┬─┐ ┌───────────┬─┐ │ 倉庫 │R│ │ 棚 │R│ ├──────┬────┴─┤ ├──────┬────┴─┤ │倉庫コード │ │┼─○─<│棚No │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────┴──────┘ │ └──────┴──────┘ │ ┌─────────┴─────────┐ ┌─────────┐ │ 倉庫.棚.対照表 │ │ │ ├─────────┬─────────┤ ├─────┬───┤ │倉庫コード(R) │ │─○─│商品コード│ │ │棚No(R) │ │ │ │ │ │ └─────────┴─────────┘ │ └─────┴───┘ │ ┌─────────┴─────────┐ │ 倉庫.棚.商品.対照表(在庫)│ ├─────────┬─────────┤ │倉庫コード(R) │DATE(棚卸日)│ │棚No(R) │数量 │ │商品コード(R) │ │ └─────────┴─────────┘ |
対照表の文法
- 構文論として(文法)、 resourceの束
- 意味論としては、基本的にeventとして「解釈」
14枚目 15:15~
「商品」はentityか?
=> テキストにある事例を2つを見ながら、それぞれ解説。
大事なこと
データディクショナリがデータベースを管理する、という考え方もある。
=>現存するRDBでデータディクショナリをまともに実装しているものはない。
「制約・束縛」が動く。このことを理解しているSEが少ない。
15枚目 15:45~
a=b(再帰)(recarsive)
1 2 3 4 5 6 |
R(a, b) ┌──────────┐ │ │ │ a1->a2-a3->a4 │ │ │ └──────────┘ |
1 2 3 4 5 6 7 8 9 10 11 12 |
1. resource系 ┌───────────┬─┐ ┌────────────┐ │ 部品 │R│ │ 部品.部品.再帰表 │ ├──────┬────┴─┤ ├───────┬────┤ │部品No │名称 │┼─○─<│部品No(R)│数量 │ │ │ │ │ │部品No(R)│LLC │ │ │ │──┘ │ │ │ └──────┴──────┘ └───────┴────┘ ・モデルでは、部品Noの名称を変えないように。 ・実装時は、syntax errorになるので、 しぶしぶ物理名称を変える必要はある。 ・このことを混同しないように。 |
1 2 3 4 5 6 7 8 9 10 11 12 |
部品構成 ┌─┐ │01│レベル0 └┬┘ ┌─┴┐ ┌┴┐┌┴┐ │02││03│レベル1 └┬┘└─┘ ┌─┴┐ ┌┴┐┌┴┐ │04││05│レベル2 └─┘└─┘ |
縦のサーチ:(DFS)(Depth First Search)
横のサーチ:(BFS)(Breadth First Search)
縦の階層:階数
横の総:次数
16枚目 16:00~
event
昔の設計では・・・
1 2 3 4 5 6 7 8 9 10 |
┌───────────┬─┐ │ 受注 │E│ ├──────┬────┴─┤ │受注No │受注日 │ │ │受注数 │ │ │取消受注数 │<- 受注No1のとき、定義されないからアウト! └──────┴──────┘ 01 +30個 02 +50個 03 -30個 |
1 2 3 4 5 6 7 8 9 10 |
┌───────────┬─┐ ┌────────────┐ │ 受注 │E│ │ 受注.受注.再帰表 │ ├──────┬────┴─┤ ├───────┬────┤ │受注No │受注日 │┼─○─<│受注No(R)│ │ │ │受注数 │ │ │受注No(R)│ │ │ │ │──┘ │ │ │ └──────┴──────┘ └───────┴────┘ 01 +30個 02 +50個 03 -30個 |
17枚目 16:15~
データ周延
今まで個人しか無かった顧客データ。
方針が変わって法人も対称にしろと言われた。
やっつけで、性別の中に法人を組み込んだ。
1 2 3 4 5 6 7 |
┌───────────┬─┐ │ 顧客 │R│ ├──────┬────┴─┤ │顧客No │名称 │ │ │性別 │1:男 2:女 3:法人 │ │ │ └──────┴──────┘ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
外延とはクラス(class)のこと。 ┌──┐ │顧客│ └┬─┘ ┌─┴─┐ ┌┴─┐┌┴─┐ │個人││法人│# 関数P(S) = f(x) └┬─┘└──┘#----ここから上は高階---- ┌──┴┐ #----ここから下が第1段階---- ┌┴─┐┌┴─┐ # │男性││女性│ # S-P └──┘└──┘ # 実データ # a1は、男である。 # a2は、男である。 # b1は、女である。 # b2は、女である。 # c1は、法人である。 # 主語、述語 Subject、Predicate |
{集める} 数学で言う集合。
(並べる) 数学で言う構成。順番が重要
18枚目 16:20~
さて、?に入るのは何でしょう?
1 2 3 4 5 6 7 8 9 10 11 |
┌──┐ │顧客│ └┬─┘ ┌─┴─┐ ┌┴─┐┌┴─┐ │ ? ││法人│ └┬─┘└──┘ ┌──┴┐ ┌┴─┐┌┴─┐ │男性││女性│ └──┘└──┘ |
?は、個人?人間?
さて、どちらが正しい概念ですか?
その概念が妥当とは、何を判断基準にしましたか?
個人と人間では、概念も判断基準も変わりますよね?
本来は、誰がやっても同じ結果にならなければいけない。
セット: {x∈a | f(x)}
RDBは、セットと第1階で設計する。
オブジェクト指向は、クラスで設計する。
1 2 |
つまり、ある条件において、関係を「切断」することが必要。 =>ある条件を満たす「集合」に分離出来る。 |
1 |
メンバーと集合の視点で考察した場合、階の上下を入れ替えると成り立たないことがわかる。 |
「切断」した場合
切断した理由を必ず記述すること。
切断時の記号
= 部分集合の構成が同じ
1 2 3 4 5 6 7 8 |
┌───┐ │営業所│ └─┬─┘ = 営業所区分コード ┌───┴──┐ ┌──┴──┐┌──┴──┐ │国内営業所││海外営業所│ └─────┘└─────┘ |
X 部分集合の構成が相違
1 2 3 4 5 6 7 8 |
┌───┐ │従業員│ └─┬─┘ X 従業員区分コード ┌───┴──┐ ┌──┴──┐┌──┴──┐ │ 正社員 ││ パート │ └─────┘└─────┘ |
19枚目 16:35~
箱と線だけでは、モデルは出来ません。
必ず、切断という概念が入って、集合ごとに区別していく必要があります。
切断によって分割された集合の下位層は、同じ条件で切断出来るとは限りません。
1.切断(分割・細分)
-
AND? - 階数
20枚目 16:55~
下記は両方とも間違い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
┌───────────┬─┐ │ 従業員 │R│ ├──────┬────┴─┤ │従業員No │名称 │ │ │ │ │ │ │ └──────┼──────┘ │ ×従業員コード │ ┌───┴───┐ ┌──┴──┐ ┌──┴──┐ │ 正社員 │ │ パート │ └──┼──┘ └──┼──┘ │ │ =性別 =性別 ┌─┴─┐ ┌─┴─┐ ┌┴─┐┌┴─┐┌┴─┐┌┴─┐ │男性││女性││男性││女性│ └──┘└──┘└──┘└──┘ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
┌───────────┬─┐ │ 従業員 │R│ ├──────┬────┴─┤ │従業員No │名称 │ │ │ │ │ │ │ └──────┼──────┘ │ ×性別 │ ┌────┴───┐ ┌─┴─┐ ┌─┴─┐ │ 男性│ │女性 │ └─┼─┘ └─┼─┘ │ │ =従業員コード =従業員コード ┌──┴─┐ ┌─┴──┐ ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐ │正社員││パート││正社員││パート│ └───┘└───┘└───┘└───┘ |
上下を入れ替えて意味が通じる場合、切断が間違っている。
21枚目 22枚目 17:15~
データの多値
多値とは
- OR関係「MO」
- Many-Value-OR
- AND関係「MA」
- Many-Value-AND
OR関係
{従業員No,名称,,,,,部門コード(R)}
なぜ8桁とかにしているの?
よくある理由:最大値がわからないから
=>実はモデルの充足エラー
23枚目 24枚目 25枚目 17:35~
例)
1 2 3 4 5 6 7 |
顧客No.________ 顧客名称__________ 受注No.________ 受注日_________ 商品No.______ 商品名称________ 受注数_____ 商品単価________ 商品No.______ 商品名称________ 受注数_____ 商品単価________ 商品No.______ 商品名称________ 受注数_____ 商品単価________ 商品No.______ 商品名称________ 受注数_____ 商品単価________ 商品No.______ 商品名称________ 受注数_____ 商品単価________ |
大事なポイント
MOR:ORは、1つの関数の中の多値
MAND:ANDは、2つの関数の合成(合成関数)
26枚目 18:05~
みなし概念
- みなしentity
- Virtual Entity(VE)
- entityの純度を上げる(精度を上げる)
- みなしスーパーセット
- (概念的スーパーセット)=クラス
1 |
みなしの例)番号がない部分に番号を振る |
みなし概念(みなしentity)の例
- 1つのresourceの中に、event的性質が混入している。
- 1つのresourceの中に、ほかのresource的性質が混入している。
- 1つのeventの中に、resource的性質が混入している。
- 1つのeventの中に、ほかのevent的性質が混入している。
27枚目 28枚目 18:20~
VEのうち、必ずしも存在しない場合は、線の途中に白丸を書く
29枚目 18:30~
R(a, b)
- aとbは別々
- aはbに含まれる
- bはaに含まれる
- aとbは、位置が交わる
- aとbは、外延は同じ
30枚目 18:40~
モデルとしてのコッド関係モデル ≠ プロダクトとしてのRDB
コッド関係モデル
- 4値
- テーブル
プロダクトとしてのRDB
- テーブル
- index
- IF
- Null
- 配列
以下はDont's
- CREATE VIEW
- ORDER-BY
- NULL
- IF
- ・・・
SQLは、コッドの関係モデルを使うと。。。
- 集合論演算
- リレーショナル代数演算
- SELECT, JOIN, PROJECTION
31枚目 18:45~
例)
(セット)
従業員番号の集合 × 名称の集合 × 退職日の集合
セットから要素を取ってきたものをタプルという。
また、こういう手法を「セット・アット・ア・タイム法」と言う。
(タプル)
R{01∈番号, A∈名称, 1/9∈退職日}
「F-真」はtrue
R{02∈番号, A∈名称, 1/9∈退職日}
「F-真」はtrue
R{03∈番号, B∈名称, Null∈退職日} <- 取って来れない(充足しない)
logical view
RDBの内部
最短の検索ルートを決める手法
- I/O主体:ルールベース
- CPU主体:コストベース
次のメッセージが出たら「しまった」と思ってください
1 |
table-scan XXXXX (悪い例) |
SQL文中にANDやORが記述されると構文論と意味論の両方を考慮するために
traverse-tableが作成されて、意味論の精査を実施するために、
検索時間が余計にかかる。
インデックスの作り方
欲しいデータを、欲しい順番に並べて、インデックスを作る。
order-byを別途書かなくてもいいようにするのがコツ。
RDBでは、KeysをVIEWとして使えばよい。パフォーマンスも抜群に上がる。
create viewをcreate indexにしてしまえばいいだけ。
最後のまとめ
- 個体の認知
- 箱の左側は「No」
- 関係の性質
- 箱の右側は「DATE」
- 関係の文法
- aRb にて関係を見つける、時系列にも注意
- データの周延
- 箱の右側に区分コードがあったら、切断してみる
- 上下を入れ替えて意味が通じたらおかしいと気付こう
- データの多値
- MOR(1つの関数に複数の値)なのか、MAND(合成関数で表現出来る事業モデル)なのか
- みなし概念
- VEを活用しよう
- パフォーマンス向上
- create indexを活用しよう。ただしメモリには注意。
- indexを使うとバッチetcのデータロードは遅くなることは考慮が必要。
※ モデルが出てくるのは、みなし概念以降の工程