ユニーク索引と非ユニーク索引について
ほさん
(No.1)
ユニーク索引と非ユニーク索引の決め方について、どなたかご教示お願いします。
例えば、平成30年午後2問1のp.13には、(i)「主キー以外で値が一意となる列または列の組み合わせには、必ずユニーク索引を作成する」、(ii)「それ以外の列または列の組み合わせが外部キーを構成する場合は、必ず非ユニーク索引を作成する」とあります。
設問1(2)では{支払予定日、支払い番号}がユニーク索引として連番を振るのが正解でしたが、これらの列の組み合わせは外部キーなので、(ii)の記述から非ユニーク索引とするのだと思いました。
解説では、明記されていたわけではありませんが、参照元(外部キーがある方のテーブル)と参照先(主キーがあるテーブル)の間の関係が1対1なのでユニーク索引であるというロジックでした。
外部キーであっても、外部キーが参照する先のテーブルとの関係が1対1であれば、ユニーク索引を優先して付与するということなのでしょうか?
例えば、平成30年午後2問1のp.13には、(i)「主キー以外で値が一意となる列または列の組み合わせには、必ずユニーク索引を作成する」、(ii)「それ以外の列または列の組み合わせが外部キーを構成する場合は、必ず非ユニーク索引を作成する」とあります。
設問1(2)では{支払予定日、支払い番号}がユニーク索引として連番を振るのが正解でしたが、これらの列の組み合わせは外部キーなので、(ii)の記述から非ユニーク索引とするのだと思いました。
解説では、明記されていたわけではありませんが、参照元(外部キーがある方のテーブル)と参照先(主キーがあるテーブル)の間の関係が1対1なのでユニーク索引であるというロジックでした。
外部キーであっても、外部キーが参照する先のテーブルとの関係が1対1であれば、ユニーク索引を優先して付与するということなのでしょうか?
2022.10.02 15:27
にゃんちゃんさん
★DB シルバーマイスター
(No.2)
問題文の条件を書き換えますと
①列値が重複しない列にはユニーク索引を張ろう
※ただし主キー列は主キーの索引があるので含めない
※複数列の組み合わせもOK
※NULLはあってもいい(NULL以外が重複しなければ)
②ユニーク索引が張れない場合、かつ外部キーになっているなら
非ユニーク索引を張ろう
となります。
よって、まずはNULLを除いて一意になる列の組み合わせを探してユニーク索引を張る
ユニーク索引を張れなかった外部キーを探して、非ユニーク索引を張る
という優先順になります。
①列値が重複しない列にはユニーク索引を張ろう
※ただし主キー列は主キーの索引があるので含めない
※複数列の組み合わせもOK
※NULLはあってもいい(NULL以外が重複しなければ)
②ユニーク索引が張れない場合、かつ外部キーになっているなら
非ユニーク索引を張ろう
となります。
よって、まずはNULLを除いて一意になる列の組み合わせを探してユニーク索引を張る
ユニーク索引を張れなかった外部キーを探して、非ユニーク索引を張る
という優先順になります。
2022.10.02 15:49
まぽさん
(No.3)
分かりやすい説明ありがとうございます!
今回の場合は、”一般経費申請”と”支払伝票”が1対1で、かつ{支払予定日、支払い番号}が”支払伝票”の主キーなので、ユニーク性をもつのでユニーク索引を作成するのですね。
類題も確認してしっかり理解したいと思います。
ありがとうございました!
今回の場合は、”一般経費申請”と”支払伝票”が1対1で、かつ{支払予定日、支払い番号}が”支払伝票”の主キーなので、ユニーク性をもつのでユニーク索引を作成するのですね。
類題も確認してしっかり理解したいと思います。
ありがとうございました!
2022.10.02 16:21
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。