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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qjsp + servlet + Beans

なぜ、jsp + servlet + Beansというような使い方をするのでしょうか?

jsp + Beansでは、表示用にjsp、複雑な処理はBeansという感じにすることの意味はわかります。
同様に、jsp + servletもわかります。

servletで行う処理と、Beansで行う処理はどこで線を引けば良いのでしょうか?

よろしくお願いします。

Aベストアンサー

>Beansとクラスっていうのは、別ですよね?
Beanとクラスは一緒です。

>クラスでやる場合はどのような不都合があるのでしょうか?
JavaBeansとは基本的には値の受け渡しで使用します。
主にsetter(set~)メソッドとgetter(get~)メソッドで成り立ちます。
またその中にビジネスロジックを搭載しsetした値から何かの数値を計算するとかしてそれをgetで取得するって感じです。

一応参考までにJavaBeansクラスはこんな感じです。

public class SampleBeans{
private String name;//名前
 private int number://番号

public String getName(){
return this.name;
}

public int getNumber(){
return this.number;
}

public void setName(String name){
this.name = name;
}

public void setNumber(int number){
this.number = number;
}

}

>Beansとクラスっていうのは、別ですよね?
Beanとクラスは一緒です。

>クラスでやる場合はどのような不都合があるのでしょうか?
JavaBeansとは基本的には値の受け渡しで使用します。
主にsetter(set~)メソッドとgetter(get~)メソッドで成り立ちます。
またその中にビジネスロジックを搭載しsetした値から何かの数値を計算するとかしてそれをgetで取得するって感じです。

一応参考までにJavaBeansクラスはこんな感じです。

public class SampleBeans{
private String name;//名前
 private...続きを読む

QテーブルのフィールドにNot null制約を付けたい

お世話になります。

既存テーブルにフィールドを追加する方法は
わかっているのですが、その追加したフィールドに
not null制約を付けるにはどのようなコマンドを
実行する必要があるのでしょうか。

↓のコマンドには制約をつけるオプションはないですよね。。
ALTER TABLE テーブル名 ADD (カラム名 カラム定義)

よろしくお願いします。

Aベストアンサー

ALTER TABLE table_nameMODIFY (field_name NOT NULL)

でできるはずです。

Q仮想マシンにnetbeansをインストールするコマ

はじめまして

macに仮想マシンとしてubuntuを導入しました。
その後、macにnetbeansをダウンロードしubuntuの端末から
sh ~/ダウンロード/netbeans-7.3-ml-Linux.sh
を入力してubuntuにnetbeansにインストールしろと参考書に書いてあるのですが
コマンドがエラーになります。

どなかたか詳しい方、原因がわかったら教えてください

Aベストアンサー

>参考書にはnetbeans-6.9.1-ml-linux.shと書くとなってました。

それは、その参考書が書かれた頃にあったのがnetbeans-6.9.1-ml-linux.shだったからでしょう。

>6.9.1から7.3にバージョンがあがったのはわかるのですが、むかしはmiが付いていたのですか?

netbeansは使ってないので私にはわかりません。

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

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

例えば下記のようなテーブルがあったとします。

      1     2     3     4
A商店  りんご   みかん   バナナ
B商店  みかん   イチゴ   くり    パイナップル
C商店  イチゴ   パイナップル バナナ
D商店  イチゴ   バナナ   りんご

のようなテーブルがありフィールド1~4いずれかにみかんを含むクエリーを作成し次のような結果をACCESSで作成したいのですが、簡単な方法はあるのでしょうか?

      1     2     3     4
A商店  りんご   みかん   バナナ
B商店  みかん   イチゴ   くり    パイナップル

よろしくお願いいたします。

尚、使用しているデータベースはACCESS2000です。

Aベストアンサー

SQL文のWHERE句で
[1]='みかん' OR [2]='みかん' [3]='みかん' OR [4]='みかん'
と書くしかないのではないでしょうか?
とはいえ、QBE上で1段ずつずらして記入するだけの話ですが、、

Qamount to a hill of beans

All the well-meaning advice in the world won't amount to a hill of beans if we're not even addressing the real problem.

not amount to a hill of beans
の部分なのですが、

・大きな結果には達しない(中程度までは達する、丘のように大きな所までには達しない)
・小さな結果にも達しない(皆無である、豆のように小さな物にすらならない)

どちらが正しいですか?
お願いします。

Aベストアンサー

さっき紹介した webpage には、次のような解説もありました。合わせて参考になさってください。

[イディオム] not be worth a hill of beans (American informal)

[意味] to have very little or no value
[例文] None of those guys is worth a hill of beans, so don't worry about what they say.

Q【ACCESS2000】1フィールドを複数フィールドに分解する手段

1フィールド に 設定されている webアドレスを カウントする仕組みを作成しております。
HPのアドレスの上位 「  /*****/ 」ごとにカウントする仕様です。

これらを考慮するため、
 アドレスを「/」ごとに1フィールドを複数フィールドに分解することを実装し
カウントすればよいかという案です。


イメージ図として


フィールドには 以下のようにセットされております。
<<アドレス1>>
*====================
/aaa/vvv/ccc
/aaa/bbb/
/ababababa/bbbfb/
/ababababa/bbbfb/




これらを 
 <<アドレス1>> ・<<アドレス2>>
*==============*============
/aaa       */vvv/ccc
/aaa       */bbb/
/ababababa   */bbbfb/
/ababababa   */bbbfb/



の、イメージに細分できるようにしたく思います。
クエリでの実装がよいかとおもうのですが
手段を伝授いただきたく思います。

よろしくお願いします

1フィールド に 設定されている webアドレスを カウントする仕組みを作成しております。
HPのアドレスの上位 「  /*****/ 」ごとにカウントする仕様です。

これらを考慮するため、
 アドレスを「/」ごとに1フィールドを複数フィールドに分解することを実装し
カウントすればよいかという案です。


イメージ図として


フィールドには 以下のようにセットされております。
<<アドレス1>>
*====================
/aaa/vvv/ccc
/aaa/bbb/
/ababababa/bbbfb/
/ababababa/bbbfb...続きを読む

Aベストアンサー

t1テーブルのf1フィールドに
/aaa/vvv/ccc
/aaa/bbb/
/ababababa/bbbfb/
/ababababa/bbbfb/
と入っていた場合、以下のクエリ
SELECT Mid(f1,1,InStr(2,f1,"/")-1) AS c1, Mid(f1,InStr(2,f1,"/"),Len(f1)) AS c2
FROM t1;
を実行すると
c1        *c2
--------------
/aaa       */vvv/ccc
/aaa       */bbb/
/ababababa   */bbbfb/
/ababababa   */bbbfb/
が得られます。

QJavaBeansに関して

最近JavaBeansというものを知ったのですが、WEBページや書籍など、それほど多くの情報はないような気がします。実際JavaBeansはよく使用されているのでしょうか?
それはどんな目的ですか?
GUI開発とエンタープライズしか見ませんが。
また、使用されない分野があるのはなぜですか?

Aベストアンサー

Java Beansには2種類あって、通常Enterprise Java Beans (EJB)を指すことが今は多いと思います。

EJBは通常複数のクラスからなり、ビジネスロジックのまとまりです。いわば部品ですね。

本来Bean Providerという会社のジャンルができて、こういう部品が売り買いされるというビジネスモデルを想定して作られたようですが、実際にそういうやり方が広まっているかはよく知りません。(うちの会社ではまだ見たことないです)

現実にはEJBというと、EJBコンテナ(アプリケーションサーバ)の機能(persistence, security, messaging service など)をうまく(容易に)利用するための技術と捕らえられているのが一般的ではと思います。

EJBに関しては、相当情報は氾濫していると思います。金融や公共、企業などで利用されており最も利用されているテクノロジの1つではと思います。

通常大掛かりなエンタープライズシステムで使用されます。これは、小規模のシステムではパフォーマンスや開発容易性の点で、むしろ劣るからです。

特にEJB2.xの時代は設定などが複雑でした。規格がEJB3になってから、開発容易性はかなり改善したといわれていますが、それでもsecurity, messaging service (asynchronous messaging), distributed transactionなどが必要でない限りEJBを使わないことを推奨する人が多いです。個人的には今後は変わっていくかもしれないと思いますが。。。

Java Beansには2種類あって、通常Enterprise Java Beans (EJB)を指すことが今は多いと思います。

EJBは通常複数のクラスからなり、ビジネスロジックのまとまりです。いわば部品ですね。

本来Bean Providerという会社のジャンルができて、こういう部品が売り買いされるというビジネスモデルを想定して作られたようですが、実際にそういうやり方が広まっているかはよく知りません。(うちの会社ではまだ見たことないです)

現実にはEJBというと、EJBコンテナ(アプリケーションサーバ)の機能(persistenc...続きを読む

QCREATE テーブルでの複数外部キーの設定

MySQL5.1で、1つの表に複数の外部キーを持つとき、
CREATEテーブル発行の仕方について教えてください。

1、以下表3つ作成
得意先表
{得意先コード(主),得意先名}

注文表
{年月日,得意先コード(外),商品コード(外),数量}
※得意先コード、商品コードに、on delete cascadeをつける。

商品表
{商品コード(主),商品名,商品区分コード(外),単価}

の三つの表があります。


質問)、注文表に、2つの外部キー(得意先コード・商品コード)を設定したいと思っています。
CREATE TABLE IF NOT EXISTS `注文表` (
`注文日` date DEFAULT NULL,
`得意先コード` varchar(10) DEFAULT NULL REFERENCES 得意先表(得意先コード) on delete cascade,
`商品コード` varchar(10) DEFAULT NULL REFERENCES 商品表(商品コード) on delete cascade,
`数量` int(11) DEFAULT NULL
)

の外部キーを列制約で作成するのがいいのでしょうか?
表制約では、二つの外部キーを設定できないと思いましたので・・・。

ご教授お願いします。

MySQL5.1で、1つの表に複数の外部キーを持つとき、
CREATEテーブル発行の仕方について教えてください。

1、以下表3つ作成
得意先表
{得意先コード(主),得意先名}

注文表
{年月日,得意先コード(外),商品コード(外),数量}
※得意先コード、商品コードに、on delete cascadeをつける。

商品表
{商品コード(主),商品名,商品区分コード(外),単価}

の三つの表があります。


質問)、注文表に、2つの外部キー(得意先コード・商品コード)を設定したいと思っています。
CREATE TABLE IF NOT EXISTS `注文表` (
`注文...続きを読む

Aベストアンサー

表制約でも出来ますよ。
CREATE TABLE `注文表`
(
`注文日` date DEFAULT NULL,
`得意先コード` varchar(10) DEFAULT NULL ,
`商品コード` varchar(10) DEFAULT NULL ,
`数量` int(11) DEFAULT NULL,
FOREIGN KEY( `得意先コード` ) REFERENCES 得意先表(得意先コード),
FOREIGN KEY( `商品コード` ) REFERENCES 商品表(商品コード)
);

QNetBeans IDE の使い方

普段は大学でLinuxOSを用いてjavaやCのプログラミングをしています。
先日、自宅のPC(windows7)でもプログラミングが出来る様にNetBeans IDE 7.2.1をインストールしました。

しかし使い方が良くわからず、解説のようなサイトを見てもよくわかりません。
学校では部品クラスとメインクラスを作り、それを単純にコンパイルするだけでしたが
どうもNetBeans IDE では関連付けができていないようです・・・


なので出来ましたら、基本的な使い方を教えてくださると助かります。

Aベストアンサー

関連付けができてない、というのはどういう意味でしょうか。

NetBeansでも、新規プロジェクトを作成し、そこにクラスを追加してビルドすれば普通にプログラムは作成できます。NetBeansはプロジェクト単位で開発するので、まずプロジェクトを作ってください。そして生成されたクラス(メインクラス)に追記します。別クラスが必要なら追加します。

https://netbeans.org/kb/docs/java/quickstart_ja.html

ここの手順に従ってビルドできませんか? もしわからないなら、どこがわからないかもう少し具体的に補足してください。

Q外部キーだけのテーブル(主キーがない?)

データベースのテーブルについておたずねします.

主キーがなくて,そのかわりに外部キー(と主キー以外の列)しか持たない
テーブルも可能だと聞きました.
テーブルには主キーが必ずあるものだと思っていましたが,
どのような使いかたをするのでしょうか.

どうやら,最初からデータがあるわけではなく,
追加されるタイミングがわからないデータを格納する場合に作っておく,
ということらしいのですが,なんのことかよくわかりません.

データベース関連書籍をいくつか調べましたが,
主キーのないテーブルの説明などは見当たりません.
また,この悩ましい問題を与えてくれた知り合いに訊ねましたが,
テーブル構成などの具体的なことは,
企業内のことなので,教えてもらえませんでした.

何か具体的な例を交えながらご説明いただければと思います.

Aベストアンサー

難しく考える必要はないと思いますよ。主キーというのがそのテーブルの行をユニークに規定する独立したIDと考えると、その設置有無は必要性で判断すれば良いことです。不要でも設置して構いませんが、それは分かり易さとシステムリソース、レスポンス、メンテナンス性との兼合いでしょう。

では、好例ではありませんが、一つ具体例をあげてみましょう。
日本語が下手でごめんなさい。よ~く読んで、ER図を書いてみてください。
とある組立工場を思い浮かべてください。そこで生産される製品の条件を以下とします。
・製品は複数の部品から構成される。
・部品は複数の製品に使用される。
・部品は複数の仕入先から調達される。
・部品の仕入先は製品によって規定される。
・製品を構成する部品は、部品毎に仕入先が異なる。
ここで登場する実態(エンティティ)は、
・製品
・部品
・仕入先
の3つですね。各々の実態の関係は、
・製品:部品=N:N
・部品:仕入先=N:N
・製品:仕入先=N:N
となり、N:Nの関係ばかりですね。
さて、この関係でリレーションを張ってみましょう。単純に考えると各実体(テーブル)の構成項目は以下になりますね。
・製品=製品ID+製品情報
・部品=部品ID+製品ID+仕入先ID+部品情報
・仕入先=仕入先ID+仕入先情報
ここで問題になるのは、部品テーブルの部品情報ですね。同じ部品でも仕入先毎に複数の行が発生するので、データの重複になります。メンテナンス性からこれは望ましくありません。リソース的にも不利ですね。
そこで、リレーションを一つ実態に昇格させましょう。製品別部品別仕入先テーブルを作るのです。その結果各テーブルは、
・製品別部品別仕入先=製品ID+部品ID+仕入先ID
・部品=部品ID+部品情報
になります。これで、データの重複を排除できます。この時、製品別部品別仕入先テーブルには外部キーしか必要ないですね。敢えて主キーを付けても活用されません。

ひとつの例でしたが、こんなもんでどうでしょう?

難しく考える必要はないと思いますよ。主キーというのがそのテーブルの行をユニークに規定する独立したIDと考えると、その設置有無は必要性で判断すれば良いことです。不要でも設置して構いませんが、それは分かり易さとシステムリソース、レスポンス、メンテナンス性との兼合いでしょう。

では、好例ではありませんが、一つ具体例をあげてみましょう。
日本語が下手でごめんなさい。よ~く読んで、ER図を書いてみてください。
とある組立工場を思い浮かべてください。そこで生産される製品の条件を以下とし...続きを読む


人気Q&Aランキング

おすすめ情報