• 締切済み

Visioで複数のフィールドと関連付けを行うには?

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

みんなの回答

  • msystem
  • ベストアンサー率42% (79/186)
回答No.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さんの見つけた右クリックで一つ一つ関連を作るしかないのではないでしょうか?

  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

再びです。 従業員テーブル 仕事トランザクションテーブル ---------- -------------- |ID|従業員| |ID| 仕事 |FK| ---------- -------------- |1|Aさん| |1|監督者|1| |2|Bさん| |2|指示者|1| |3|Cさん| |3|従業者|2| ---------- -------------- というイメージでしょうか? これなら、関連は1つですよね。(ということは違う・・・) もしかして、多対多のリレーションなのではないでしょうか? それならば、交差エンティティを作ってください。(私がとんでもない勘違いをしているような気もしますが・・・) 交差エンティティの例 交差テーブル ------------ |従業員|仕事| ------------ | 1 | 1 | | 1 | 2 | | 2 | 3 | | 3 | 1 | ------------

urizaka
質問者

補足

こん××わ、msystemさん。 ええと、私のやりたいことですが、違います。 従業員マスタ ------------------ 名前   ID ------------------ A     1 B     2 C     3 ================== 仕事トランザクションテーブル _____________________ 仕事名 |監督者  指示者  従業者 ----------------------------------------- 準備    1    2    3 調査    2    3    1 実行    3    2    1 ---------------------  です。  今のところ、マスターからトランザクションに「監督者」用、 「指示者」用、「従業者」用の関連を作って繋げていますが、これだと 線が何本にもなってしまって非常に美しくないもので…

関連するQ&A

  • VisoでのER図の書き方を教えてください

     はじめまして、urizakaと申します。  さて、さっそく質問なのですが、VisioでDB作成の際に使うER図を書こうと 思っているのですが、フィールドとフィールドの関連付けの方法(あるマスター テーブルで使っているプリマリーキーのフィールドを別のマスターテーブルの フィールドへ関連付ける方法)について教えていただけないでしょうか?。  非常に基本的なことで恐縮ですが、すみませんが教えてください。よろしく お願いします。

  • 一つのフィールドに複数の情報を持たせたいです。

    データベースに詳しい方!一つのフィールドに複数の情報を持たせたいです。 例えば複数のユーザを管理するテーブルにあるID(フィールド)を 複数個をデータベースに保存する場合どうすればいいのでしょうか? 言語はJavaで、データベースはMySQLを使っています。 ↓↓各フィールド(例) -------------------------- || userName || userID || ○○ID || -------------------------- 上記の 「○○ID」というフィールド に複数の値を持たせたいのです。 String型の配列、もしくはXMLをMySQLの一つのフィールドに保存する 事はできるのでしょうか? (もし出来るのならこちらを採用したいです) それとも○○IDに関連するテーブルを作成する(?) それか最悪の場合、ユーザが増えるたびにテーブルを一つ作成 して管理するか・・・・(避けたいです) 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MDB内既存テーブルに主キーのフィールド追加は可能か?

    DAOでMDBにアクセスするシステムなのですが、 テーブル仕様変更に伴い、既存のテーブルに新規に主キーとなるフィールドを追加します。 当テーブルはすでに主キーは複数存在しています。 現在は CreateIndex("PrimaryKey")を行ったのですが、 「既に主キーは既に存在しています」と表示されてしまい、異常終了をしてしまいます。 単にフィールド追加することは容易なのですが、主キーとなると、だめみたいです。 この場合は、どのようにすれば良いのでしょうか? 大変申し訳ございません。 ご教授よろしくお願い致します。

  • ACCESSで複数主キーにおけるseek検索

    ACCESSで複数主キーにおけるseek検索 ACCESS2000で複数の主キーを持つテーブルからseekで一致検索を行いたいが、 ADOを利用した場合のコードの書き方がわかりません。 テーブルは以下の3つのフィールドから構成されます。 フィールド1:フィールド2:フィールド3 年月日:担当職員:応対結果 ここで主キーは「年月日」と「担当職員」の2つで、「年月日」と「担当職員」が 一致するレコードをseekによって検索したいのです。 インデックスを表示させると「年月日」と「担当職員」が表示されます。 「年月日」の欄にのみ、インデックス名の欄にPrimaryKeyと書かれています。 DAOを用いて検索部分をVBAで書いたら動きました。 以下に検索部分だけ書きます。 (1) ds.Index = "PrimaryKey" (2) ds.Seek "=", 年月日, 担当職員 (3) If ds.NoMatch Then (4) MsgBox"そんなデータないですよ" (5) Else (6) MsgBox"一致するのがありました" しかしながら、ADOを用いた記述方法がわかりません。 上の(1)行は ds.Index = "PrimaryKey" でよいと思うのですが、(2)行以下がどう書いて良いかわかりません。 何卒宜しくお願いします。

  • ファイルメーカーの繰り返しフィールドで

    いつもありがとうございます。 初心者ながら、ただいま在庫計算のデータベースを作っています。 ファイルメーカー8の繰り返しフィールドに関してですが、 商品コード 1.2.3... 在庫数   1.2.3... という二つの繰り返しフィールドがあるのですが、 商品コード「3」に対して、それに対応した在庫数「3」を返す 関数またはスクリプトの作り方を教えてください。 なお商品コードと在庫数は、マスタテーブルのレコードで関連づけられています。 質問がわかりにくいかもしれませんが、 何卒よろしくお願いします。

  • クエリ作成でどちらのフィールドが正解ですか

    Access初心者です。 Access2010の学習をしています。 主キーと外部キーで関連付けられた フィールドをクエリで抽出する場合、 デザイングリッドにドラッグするフィールドは、 どちらのフィールドを選べばよいのでしょうか? ---- 「T担当者マスタ」と「T得意先マスタ」をもとに 「Q得意先マスタ」を作成したい場合です・・・ 「T担当者マスタ」のフィールド 担当者コード(主キー) 担当者名 「T得意先マスタ」のフィールド 得意先コード(主キー) 得意先名 フリガナ 〒 住所 TEL 担当者コード(外部キー) 担当者名 デザイングリッドにドラッグするフィールド 得意先コード 得意先名 フリガナ 〒 住所 TEL 担当者コード(※主キーのフィールドを選ぶのは不正解ですか?) 担当者名 ----- 担当者コードは元となるテーブルの両方に存在する わけですが、どんな理由でどちらを選ぶのか 理解できません。 テキストの問題なのに情けないです・・ ご教授ください。

  • Access2002で、あるテーブルを作成し、あるフィールドにキーを設

    Access2002で、あるテーブルを作成し、あるフィールドにキーを設けていますが、別のフィールドにもキーを設定したいのですが、どのようにしたらよいのでしょうか? (1テーブルで複数のキー設定)

  • Accessで、1つのマスターを複数のフィールドで参照する

    いつも大変お世話になっております。m(_ _)m Accessで以下のようなテーブルを作成します。 テーブル(1) ・生産部門コード ・販売部門コード ・AS部門コード テーブル(2) ・部門コード ・部門名 テーブル(2)はマスタになります。 00:A生産部 01:B生産部 11:A販売部 12:B販売部 みたいな情報が入っています。 テーブル(1)の「部門コード」は、テーブル(2)の値を参照して入力します。 この2つのテーブルをリレーションして、クエリで部門名を表示させたいのですが、1つのマスタ(テーブル(2))のコードを複数のフィールドで参照するとエラーになります。 このような場合、テーブル(マスタ)を3つ作らないとダメなのでしょうか? 要は、テーブルに部門情報を入力したいのですが、マスタは1つで良いということです。 よろしくお願いします。

  • 一つのテーブルの複数のフィールドから抜き出す方法について

    一つのテーブルの複数のフィールドから抜き出す方法について 例えば下記のようなテーブルがあったとします。       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル C商店  イチゴ   パイナップル バナナ D商店  イチゴ   バナナ   りんご のようなテーブルがありフィールド1~4いずれかにみかんを含むクエリーを作成し次のような結果をACCESSで作成したいのですが、簡単な方法はあるのでしょうか?       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル よろしくお願いいたします。 尚、使用しているデータベースはACCESS2000です。

  • 複数のフィールドを比較してデータが更新されているフィールド名を抽出したい!

    素人質問で申し訳ありませんが教えてください。実は或る伝票管理テーブルがあり、そのリスト中の実質的なキーコードである「伝票番号」フィールドには重複可能なインデックスを設定してあります。それとは別に主キーを設定してはいますが、それはオートナンバーとしてデータをソートするくらいにしか使っていません。 この伝票管理テーブルは外部のTXTファイルを一括して取り込む受け皿として存在していて、アクセス上で各フィールドにキー入力することはありません。 このように「伝票番号」フィールドには同じ番号のものが複数存在するのですが、同じ番号の中で一番最初のものが新規に登録されたもので、2番目以降にくるものが変更として登録されたものですが、残念ながらどのフィールドが更新されたのか判らないので、その都度一項目ずつマニュアルでチェックしている為にとても時間が掛かっています。 それぞれのデータには「伝票番号」以外に合計10項目くらいのフィールドが存在しています。 アクセスで何とか処理できないものかと思いあぐねている内容としては、同じ「伝票番号」をもつデータを時系列的に2データずつ比較します。(直近データ同士の比較) その上で、 (1)10項目のフィールド全てのデータが両者で全くイコールならば、新しい方の行を削除する。 (2)いずれかのフィールドのデータが更新されていれば、主キー同士の番号と更新されているフィールド名を抽出して、別のテーブルにその結果を放り投げる。 例えば、『800888』という「伝票番号」をもったデータが4個テーブル中に存在していて、それぞれに10、25、40、80という主キーが付番されているとして、 (1) 25は10に対し、フィールドKとNのデータが更新されている。 (2) 40は25と全てのデータが全く同じ。 (3) 80は40(=25)とフィールドDとPのデータが違う。 となった場合、まず伝票管理テーブルから主キー40の行を削除し、その上で下記のようなデータを抽出できればうれしいのですが。 10/25: K N 25/80: D P 雲を掴むような話で申し訳ありませんが、こんなことが可能なのかどうかご教示頂ければ幸甚です。宜しくお願いします。