以前、業務をまとめたシートについて書き、また、入出力についてまとめたシートについても書いたので、今日は、その入出力のまとめから、ER図へ落とす落とし方。
といいますか、一般的なテーブル定義、もしくはテーブルのスキーマからER図への落とし方。
もしくは、その逆で、ER図からテーブルの落とし方
について書きます。
■そもそも、ER図とは、何で、何が分かれば描けるか?
ER図とは、エンティティと、リレーション(関係)を描いた図です。
って、文字どおりですね(^^;)
こんな風な図になります。
ERD(entity-relationship diagram)
http://www.atmarkit.co.jp/aig/04biz/erd.html
なお、IDEF1Xの形式で書くと、他に、キー(主キー、外部キー)と、項目が必要です。T字型ERでも、項目まであれば、確かかけたはず。
ってことは、つまり、テーブル定義に、
・エンティティ名
・関係
・1対多とか(カーディナリティー)
・項目名
・主キー、外部キー
が書いてあれば、情報的には足りているということになります。
■ER図からRDBに落とすときの問題点:多対多
しかし、エンティティが多対多のとき問題があります。
っていうか、そのまえに、1対1、1対多のときは、
これらのときは、1のほうが、主キー、多のほうが外部キーになることで、あらわせます(というか、あらわしています)。
でも、多対多は、RDBでは、表現できません
(うーんと、無理すればできるんだけど、そういうことをしない)。
そこで、ふつう、AテーブルとBテーブルが多対多のとき、AテーブルのどのレコードとBテーブルのどのレコードが対応しているかを表したテーブル、AB対応テーブルを作ります。
このテーブルは、本来、実体のないものです(テクニック上、関係を表すものとして出てきたものだから)。しかし、ER図に描かないと、ER図からテーブルを作ろうとしている人は、困ってしまうので、こういうものも(対応テーブルも)ER図に書くこととします(実際書いてますけどね)。
なお、テーブル定義は、1対多の関係になっているものとします。
(正規化していれば、第一正規形のところで、こうなっていると思います)
■テーブル一覧から、ER図をつくる
では、まず、世間一般にあるテーブル一覧(かつ、今回の「入出力についてまとめたシート」)から、ER図を作る方法について。
<<方法>>
(1)テーブル名をエンティティとします。
エンティティの四角形をかいて、そこに、テーブル名を入れてください。
(2)FKキー(外部キー)があったら、
その外部キーを主キーとしているテーブルとは関係がありますから、
関係を結びましょう(関係の図を書きましょう)。
(3)1対多とかの(カーディナリティー)は主キーを持っているほうが1です。
FKキーのほうは、0、1、多は分かりません。
例:受注と受注明細、
受注のほうに受注番号(主キー)があり、
受注明細のほうに、受注番号(FK)と、受注明細番号(主キー)
があるはずです。
このとき、受注番号があるので、関係があります。
受注番号が主キーなので1、受注明細は、0,1、多は?
(多分、”多”だけど)
なお、受注明細の場合、
受注番号と、受注明細番号で主キーとしている場合
もあると思いますが、このときも、受注番号はFKとなります。
(って、テーブル一覧には、表が悪くて書いてないかも知れないが、
理論的には、そうだ)
(4)T字型ER,IDEF1Xで、項目名と、主キー、外部キーが必要な場合は、
テーブル定義をみて、書いてください。
(5)配置は、適当に入るように書いてください。
ってことで、テーブル定義でかけないのは、カーディナリティーと、関係の内容になります。
コレに関しては、FKの項目の備考に、コメントとして書くようにします。
そうすれば。。
(6)関係を、FKキーの備考をみて、書いてください。
(7)(3)の1対多、FKキーのほうは、FKキーの備考をみて、書いてください。
これで、OK。
■テーブル一覧からテーブルを作る
これは、できますよね。できなかったら、そのテーブル一覧に問題があります。
RDBのテーブルを作成するにはCREATE TABLEすれば、いいことになります。
CREATE TABLEで必要な内容は、
テーブル名、各項目名、型と大きさ、主キー、NULLを許さないかなどです。
で、これは、テーブル一覧に書いてあるはずです。
そこに書いてあることをCREATE TABLEの文法にそって、書いてください。
■ER図からテーブル作成
ということは、ER図からテーブル一覧に落とせれば、
あとは、上記のようにOKなわけです。
ところが、
●ER図の情報は、
エンティティ、関係、1対多、項目名、主キー、外部キー
●テーブル一覧は、
テーブル名、各項目名、型と大きさ、主キー、NULLを許さないかなどです。
ER図の情報に、型と大きさがないので、作成できないんです。実は。
したがって、データ定義などで、項目名から、型と大きさが分からない限り、作成できません。
逆に、コレが分かれば、テーブル一覧を(頭の中でもいいから)作って、CREATE TABLEで作成できます。
■ということで
初めの目標、「入出力についてまとめたシート」は、例が画面用だったのではっきり書いてませんでしたが、テーブル用は、
主キー、外部キー、NULL禁止?が書いてあって、
外部キーのコメントのところには、
主キーになっているテーブルとの関係と、
それが複数あるかどうか(1対多か1対1か1対0か)
が書いてあるものとして、
それを、上記の方法でやって、ER図がかける。。めでたしめでたし。。
とします。
次回のこのシリーズは、他の図を取り上げます