データベース設計についての質問です。


データベース設計の基本を教えてください。
キーには、プライマリキーとユニークキーがあると思いますが、
ユニークキーはどのような時に使用するのが効果的(スピードが速い)でしょうか?

できれば例を出して説明していただければ助かります。
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/02/13 15:35:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント20pt

ユニークキーは 重複しないもので 検索対象となるものを 指定したらいいです。


商品マスタ

商品コード、商品名、価格、備考

というテーブルがあった場合、商品コードを ユニークキーに指定します。

なお、重複する商品コードは 存在させないものとします。

http://www.higuchi.com/item/37/catid/18

id:yoshi12342000jp

ご回答いただき、ありがとうございました。

参考になりました。

2007/02/06 16:22:18
id:kurukuru-neko No.2

回答回数1844ベストアンサー獲得回数155

id:yoshi12342000jp

ご回答いただき、ありがとうございました。

参考になりました。

2007/02/06 16:22:22
id:huruyosi No.3

回答回数30ベストアンサー獲得回数3

ポイント20pt

ユニークキーとプライマリーキーの性能差は大差ないと思います。

ご利用になられているDBが分かりませんが、Oracleでのことを考えると、機能としてこの二つの違いは

・プライマリーキーは一つのテーブルに一つだけ。

・プライマリーキーの列にはNULLを入れられない。

です。どちらもbinary Indexが使われるので検索スピードに大差はないと思います。考えられるとすれば、値がNULLのレコード数ですかね。


http://dummy

id:yoshi12342000jp

ご回答いただき、ありがとうございました。

参考になりました。

2007/02/06 16:22:23
id:kn1967 No.4

回答回数2915ベストアンサー獲得回数301

ポイント20pt

http://biz.rivus.jp/words/constraint.html

プライマリキーとユニークキーの違い

プライマリキーとユニークキーの違いは確実に 識別する(identification) ための主たる制約と NULL 以外の行が 一意であること(uniqueness) を保証するのための、その他の制約という違いがある。

さらに原則的に変更を許可するか、しないかという面もある。人間にとっては意味論的に異なるものであるが Oracle のデータベースにしてみれば、その内部の仕組みに大きな差はない。

例としては、ある顧客を会員番号を主キーとして管理している場合に (本籍)住所、氏名、生年月日のカラムの組み合わせが一意キーとして考えられる。

通常、この組み合わせのキーは一意である*1が変更可能であることに大きな違いがある。そして、これらの組み合わせでのリレーションは好ましいものではない。

一方、主キー(会員番号)は退会処理などを特別な処理しない限りは変更されることはない。不可能ではないが原則、変更不可能という位置づけである。

* キー制約とインデックスの関係

主キー制約および一意キー制約を定義すると同時にユニークインデックスが作成される(※)が、 DBMS(Oracle)の実装に関するものでキーとは関係がない。

すなわち、主キーや一意キーによるアクセスにインデックスを使用できることは実装における副産物であり SQLの規格には定義されていない。

(※) 遅延制約 の場合には NONUNIQUE インデックスが作成される。

多くの場合、ユニークキーによる検索はあいまい検索せざるを得なかったりしますので、ユニークキーとして定義すべきかどうかは正直なところ「?」です。

id:yoshi12342000jp

ご回答いただき、ありがとうございました。

参考になりました。

2007/02/06 16:53:53
id:blogen No.5

回答回数63ベストアンサー獲得回数1

ポイント20pt

http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html#doc1_id698

たとえばメールアドレスとパスワードでログインするシステムを考えるとします。

ユーザ情報テーブルがあり、フィールドとしては

ID,メールアドレス,パスワード,名前,......

などの時、IDはプライマリーキーにします。

IDは自動連番の数字がよいでしょう。

同じメールアドレスが複数存在すると、システムとしてはどのユーザでログインすればよいのかわからないので、メールアドレスはユニークキーにします。

もちろんメールアドレスのINSERTやUPDATEの場合、同じメールアドレスが複数存在しないようにプログラムのほうでアルゴリズムをきちんと考える必要があります。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません