人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: yoshi12342000jp
●カテゴリ:コンピュータ
✍キーワード:スピード データベース プライマリ ユニーク 設計
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●20ポイント

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


商品マスタ

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

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

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

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

◎質問者からの返答

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

参考になりました。


2 ● kurukuru-neko
●20ポイント

多少は違いますが基本的に同じです。

PostGreの場合 5.3.4. 参照

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-8.1-ja/ddl-con...

http://www.postgresql.jp/document/pg801doc/html/infoschema-refer...

http://oshiete1.goo.ne.jp/kotaeru.php3?qid=985150

◎質問者からの返答

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

参考になりました。


3 ● huruyosi
●20ポイント

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

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

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

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

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


http://dummy

◎質問者からの返答

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

参考になりました。


4 ● kn1967
●20ポイント

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

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

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

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

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

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

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

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

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

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

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

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

◎質問者からの返答

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

参考になりました。


5 ● blogen
●20ポイント

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

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

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ