プロが教えるわが家の防犯対策術!

 urizakaです。
 現在、VISIO5.0Professionalを使ってデータベースのER図を作っています
が、その際にあるテーブルのフィールド(PrimaryKey)と関連付けたテーブルに
おける複数のフィールドを関連付けたいと考えておりますが、普通にやると関連
付けられるのは一つだけのような気がするのですが、何とか複数のフィールドを
関連付けることはできるでしょうか?
 具体的にいうと、従業員マスターテーブルの従業員コード(主キー)を外部キーとして仕事トランザクションテーブルに持ってきて、監督者、指示者、従事者、と
して使いたいと考えているのですが・・・何かいい方法があるでしょうか?
 すみませんが、教えてください。

A 回答 (2件)

またまた再びです。



その構造なら、2つのテーブル間に3つの関連で仕方がないですね。

でも、もっと正規化すれば、美しくはなります(?)

従業員マスターテーブルはそのままで、それ以外に3つテーブルを作ります。

一つは役割テーブルで次のような構造です。
---------
|ID| 役割 |
---------
| 1| 監督者|
| 2| 指示者|
| 3| 従業者|
---------
次に仕事テーブルです
---------
|ID| 仕事 |
---------
| 1| 準備 |
| 2| 調査 |
| 3| 実行 |
---------
そして最後は、今までの3つのテーブルの交差テーブルです。
-----------------
|従業員ID|役割ID|仕事ID|
-----------------
|  1  |  1 |  1 |
|  2  |  2 |  1 |
|  3  |  3 |  1 |
|  1  |  3 |  2 |
|  2  |  1 |  2 |
|  3  |  2 |  2 |
|  1  |  3 |  3 |
|  2  |  2 |  3 |
|  3  |  1 |  3 |
-----------------(すべての列で複合主キーを設定する)

完全に正規化していますので、E-R図は非常にきれいだと思います。(Oracleならスタークエリが使えます)
ただ、非正規化の例としてurizakaさんの構造は非常にいいと思います。(パフォーマンスは最高でしょう)ただ、汎用性を考えたり、美しさを考えるなら、上記のようにするか、または役割テーブルと仕事テーブルを引っ付けた非正規化がいいのではと思います。

Visioで2つ以上の関連は、リレーションを複数ドラッグして、urizakaさんの見つけた右クリックで一つ一つ関連を作るしかないのではないでしょうか?
    • good
    • 0

再びです。



従業員テーブル 仕事トランザクションテーブル
---------- --------------
|ID|従業員| |ID| 仕事 |FK|
---------- --------------
|1|Aさん| |1|監督者|1|
|2|Bさん| |2|指示者|1|
|3|Cさん| |3|従業者|2|
---------- --------------
というイメージでしょうか?
これなら、関連は1つですよね。(ということは違う・・・)

もしかして、多対多のリレーションなのではないでしょうか?
それならば、交差エンティティを作ってください。(私がとんでもない勘違いをしているような気もしますが・・・)
交差エンティティの例
交差テーブル
------------
|従業員|仕事|
------------
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 1 |
------------

この回答への補足

こん××わ、msystemさん。
ええと、私のやりたいことですが、違います。

従業員マスタ
------------------
名前   ID
------------------
A     1
B     2
C     3
==================

仕事トランザクションテーブル
_____________________
仕事名 |監督者  指示者  従業者
-----------------------------------------
準備    1    2    3
調査    2    3    1
実行    3    2    1
---------------------

 です。
 今のところ、マスターからトランザクションに「監督者」用、
「指示者」用、「従業者」用の関連を作って繋げていますが、これだと
線が何本にもなってしまって非常に美しくないもので…

補足日時:2001/05/12 02:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す