こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

キーの目的

すいませんが、教えてください。データベースに、主キーや外部キーというのがあります。これを設定する目的は、何なのでしょうか?意味は、本によくあるのですが、その目的が理解できないので、教えてください。
仮に、主キーを設定しても、検索でレスポンスが早くなることはないですね。
ユニーク制約をテーブルに付ける目的と同じで、単に整合性を保つだけの目的でしょうか?
であれば、整合性を考えなければ、キーを設定する必要はないのでしょうか?

投稿日時 - 2005-05-12 17:34:16

QNo.1383236

暇なときに回答ください

質問者が選んだベストアンサー

No.3です。補足質問にお答えします。

> SQL文の中で、主キーをキーワードにして、更新・削除ができるから、
> 意味があるということでしょうか?

その通りです。
主キーは基本的に一意であり、しかも変わらないものですから、
これをキーワードにして行を狙い撃ちするのがベストです。
行の狙い撃ちをする場合にレコード番号が使えるものもあるようですが
これも普遍的に有効なものではありません。
データから絞っていく方法は煩雑なだけでなく、行が特定できない可能性もあります。

蛇足ですが一般に主キーは更新するものではなく、もし主キーの更新が必要な場合、
レコードの削除・追加で行うのが普通です。

投稿日時 - 2005-05-13 13:52:58

お礼

ありがとうございました。

投稿日時 - 2005-05-13 15:28:28

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

> 主キーにインデックスをはるから、検索が早くなるということで、
>主キーそのもので、早くなるわけではないですね。

私の認識では、
「主キー=ユニーク制約+インデックス」でした。
Oracleでは、主キーを設定するとインデックスが必ず作成されますし。

回答を書いてて、何が質問かわからなくなってきてましたが、
主キーの目的でしたね。(^^;

主キーの概念だけで言うと「ユニークでかつ変更されない項目」ですかね。
変更しようと思えばできますが、データベースの概念的な考えでは、
変更しないように設計します。

「ユニークでかつ変更されない項目」が不要であれば主キーを設定する必要はないでしょう。

投稿日時 - 2005-05-13 14:49:05

お礼

ありがとうございました。

投稿日時 - 2005-05-13 15:27:32

ANo.3

主キーの最大の目的は「同一内容のレコードがあるときに狙い撃ちして
更新したり消したりする」ためです。
ユニーク制約を主キーで実現してやるということになります。
これさえ考えなければ主キーはなくてもかまいません。
主キーにインデックスが付いて検索が早くなるのは次の話です。

外部キーについては、他の表の主キーを保持しておけばリンクが取れる
というだけです。これもインデックスを使えます。

投稿日時 - 2005-05-13 09:48:53

補足

くどいようで、すいません。具体的にいうと、SQL文の中で、主キーをキーワードにして、更新・削除ができるから、意味があるということでしょうか?
再質問ですいませんが、よろしくお願いします。

投稿日時 - 2005-05-13 11:38:26

ANo.2

主キーとは、レコードを一意に特定できる項目です。
主キーを設定することで検索は速くなりますよ。

データベースを図書館と考えてください。
本がデータです。
主キーは、それぞれの本に振られる管理番号です。

本は管理番号順に本棚に格納されてるので、管理番号を知ってたら探すのは速いですよね。
管理番号がなかったら、本棚すべてを探す必要が出てきます。

また、管理番号だけじゃなく、図書名や著者名などでも探したくなりますよね。
そんな場合に、外部キーを設定します。インデックスとも呼ばれます。

図書名インデックスは、図書名順に並んでるので、図書名がわかれば、図書の管理番号を調べることができ、本をすぐに探せませす。

ちょっと抽象的な話になりましたが、「レスポンスが早くなることはない」ことはないですよ。

投稿日時 - 2005-05-13 02:39:05

補足

再質問で恐縮ですが、具体的に言うと、主キーにインデックスをはるから、検索が早くなるということで、主キーそのもので、早くなるわけではないですね。あるいは、SQL文の中で、主キーをキーワードに検索できるから早くなるということでしょうか?
くどいようですいませんが、教えてください。

投稿日時 - 2005-05-13 11:33:41

ANo.1

AccessでのDB制作をよくやってます。

>仮に、主キーを設定しても、検索でレスポンスが早くなることはないですね。

インデックスを設定するとレスポンスが良くなるらしいです・・・があまり実感ありませんね。

>整合性を考えなければ、キーを設定する必要はないのでしょうか?

それでいいように思います。私もDBの中に主キー無しのテーブルを使用することは多々ありますが、リレーション上の整合性とかとる必要のないものなら問題は発生しません。むしろ、なんでもかんでも主キーを設定して、リレーションシップさせて参照整合性をとると、がちがちのシステムになって、後で修正するのが大変になったりします。

投稿日時 - 2005-05-12 19:15:07

お礼

ありがとうございました。

投稿日時 - 2005-05-13 15:29:25

あなたにオススメの質問