- 締切済み
外部キーを切り替えられますか?
データベースの概念として間違ってるかもしれませんので、そのへんも指摘していただければ幸いです。 以下このような感じです。 正社員 --------- ID,Name,役職, 1,田中,社長 2,山田,部長 3,井上,課長 パート社員 ----------- ID,Name 1,佐藤 2,山口 という2つのテーブルがあったときに、 通勤手段 ---------- ID,手段,(外部キー:正社員、あるいはパート社員のID) 1,車,正社員の1 2,電車,正社員の2 3,バイク,正社員の3 4,車,パート社員の1 5,電車,パート社員の2 というように、外部キーを切り替える感じで テーブルを作ることはできますか? 正社員の通勤方法テーブルとパート社員の通勤方法テーブルを分けて作って、検索時にUNIONするのが正攻法ですか? (項目名、テーブル名は例です。)
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- moon_night
- ベストアンサー率32% (598/1831)
a)社員区分マスタ 1,正社員 2,パート社員 b)通勤手段マスタ 1,車 2,電車 3,バイク c)役職マスタ 1,社長 2,部長 3,課長 4,なし d)社員テーブル ID,Name,社員区分,通勤,役職 1,田中,1,1,1 2,山田,1,2,2 3,井上,1,3,3 4,佐藤,2,1,4 5,山口,2,2,4 なんて分けてみたり。 社員数やどこのデータがほしいかによっては 多少データ保存のやり方が変わってくるかも。 社員区分と役職区分を同じマスタにして 3,課長 4,パート 5,アルバイト という風にするとか。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
よーく考えてみると、「通勤手段」テーブル、この構成おかしいですね(^^;; 主キーが社員のIDと、#2で増やした社員区分、外部キーが通勤手段のIDの構成にして、通勤手段マスタのようなIDと手段名のようなテープルを別に作った構成にした方がいいかと。 そうしとかないと社員の人数が増えたときに、えらいことになりそうですね もちろん、社員用とパート用の2つに分割するのはかまわないと思います。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>まず「正社員」か「パート社員」かテーブル名を判別して >それから、外部キーをたどれ、ということでしょうか? それでもいいですし、社員区分なんてフィールドにして、 select 手段, Name from 通勤手段, 正社員, パート社員 where (通勤手段.外部キー=正社員.ID and 社員区分='正社員') or (通勤手段.外部キー=パート社員.ID and 社員区分='パート') としてもいいわけですし。 #わかりやすいように'正社員'、'パート'ってしましたけど、1,2でもA,Bでもなんでもかまわないですし。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>1,車,正社員の1 ではなく、 1,車,正社員,1 にすれば問題ないと思いますよ。 売買などで両方をひとつのテーブルに入れる例は見かけます。
補足
ありがとうございます! なるほどなるほど、です。 これは、 まず「正社員」か「パート社員」かテーブル名を判別して それから、外部キーをたどれ、ということでしょうか?
補足
ありがとうございます。 例が悪かったですね・・・。 例のようなものだと、書いていただいた方法が 一番いいのはわかるんですが、 外部キーの切り替えができるかどうか、 が知りたかったもので。