ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

テーブル定義とER図の関係(変換方法)

2006-12-21 18:30:56 | 開発ネタ

 以前、業務をまとめたシートについて書き、また、入出力についてまとめたシートについても書いたので、今日は、その入出力のまとめから、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図がかける。。めでたしめでたし。。
 とします。




 次回のこのシリーズは、他の図を取り上げます
 
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 富士通が一般公開しているシ... | トップ | Wii専用(有線)LANアダプ... »
最新の画像もっと見る

開発ネタ」カテゴリの最新記事