dポイントプレゼントキャンペーン実施中!

複合キーとはこういう時に使うのでしょうか?

テーブルが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件)

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の主キーをどれにするか」という問いに回答することは不可能です。
    • good
    • 0

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