![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
複合キーとはこういう時に使うのでしょうか?
テーブルが2つあるとします。
テーブルAは、CODE
テーブルBは、CODE1,CODE2,NAME
とします。
テーブルAの"CODE"とテーブルBの"CODE1"+"CODE2"をキーに
テーブルBの"NAME"を取得する場合。
たとえばテーブルAのCODEに"A1B1"という値が入っていて
テーブルBのCODE1,CODE2の値にそれぞれ、"A1"、"B1"が入っている場合、テーブルBの主キーはCODE1とCODE2の二つにした方が効率がいいですか?
select
テーブルA.code,テーブルB.name
from
テーブルA,テーブルB
where
テーブルA.code = テーブルB.code1 || テーブルB.code2
↑あっているかちょっと自信がないですが
こういった処理をしたいと思っています。
よろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
code1の値が「NOT NULL かつ UNIQUE」すなわち「空値は存在せず,重複値も存在しない」と保証されるのであれば,テーブルBの主キー属性はcode1だけで十分です。
code2を主キーに含めて複合キーにする必要はありません。例えば,テーブルBの(code1, code2)の値の例として,
('A1', 'B1')
('A1', 'B2')
のようなデータの存在を認めるならば,code1だけでは行を一意に識別できないから,(code1, code2)の複合キーを主キーとするわけです。複合キーでなくても,もしかするとcode2単独項目だけで主キーになるかもしれません。
もっと言うなら,テーブルBの(code1, code2, name)の値の例として,
('A1', 'B1', 'rosary777')
('A1', 'B1', 'rosary888')
のようなデータの存在を認めるならば,(code1, code2)のペアでは行を一意に識別できないから,(code1, name)なり(code2, name)なり(code1, code2, name)なり,いずれかの複合キーを主キーとするわけです。データの取りうる条件がさらに提示されることで主キーの候補が絞られてくるかもしれません。
>テーブルBの主キーはCODE1とCODE2の二つにした方が効率がいいですか?
主キーを決める要因は効率ではありません。上記で説明したように,データによって必然的に決まってくるものです。
質問文では(CODE1,CODE2,NAME)という属性名と,('A1','B1')という値の一例が提示されているだけです。これをもとに「テーブルBの主キーをどれにするか」という問いに回答することは不可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP $_SESSIONについて教えて下さい。 4 2023/03/13 13:45
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBとアクセスでSQL文に変...
-
ACCESS2010 実行時エラー 2766
-
手動または分散トランザクショ...
-
更新時の「同時実行エラー」の対策
-
DataGridViewに画像を表示する方法
-
Accessのフォームでリス...
-
他のMDBのテーブルに追加したい
-
HTMLのテーブルの行数が多くな...
-
SQLを発行とは?クエリの作成と...
-
Accessで別mdbのテーブルをコピー
-
DataGridViewに複数テーブルの...
-
DataSetの複数テーブルをひとつ...
-
エクセルのテーブルを解除する...
-
CSVファイルのエクスポートでソ...
-
ACCESSのテーブル名をリストに...
-
『列名 '担当者CD' があいま...
-
オラクルデータベースへの更新方法
-
AccessからExcelへエクスポート...
-
【ADO】「Execute」を使うと...
-
asp.net mvcを利用する場合の複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBとアクセスでSQL文に変...
-
WORD VBA プログラム修正をお願...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
DataGridViewに複数テーブルの...
-
他のMDBのテーブルに追加したい
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
手動または分散トランザクショ...
-
SQLを発行とは?クエリの作成と...
-
AccessからExcelへエクスポート...
-
CSVファイルのエクスポートでソ...
-
ACCESS2010 実行時エラー 2766
-
HTMLのテーブルの行数が多くな...
-
ExcelVBAからAccessMDB内のテー...
-
【ADO】「Execute」を使うと...
-
★クリスタルレポートの元になる...
-
DataGridの中身をDataSetにテー...
-
ACCESSのテーブル名をリストに...
-
COBOLのINVALID KEYが理解でき...
おすすめ情報