質問 - よく聞かれること。
キーのことをよく聞かれます。
一番わかりやすいのが、本に例えることだと思っています。
テーブル=本で説明してみます。
1. プライマリーキー(主キー)
本で言うところの、ページ番号です。
一冊の本に同じページ番号はありませんので、当然ユニークになります。
必須ではりませんが、常識的に考えてページ番号の無い本などありません。
データベースでも必須ではありませんが、通常はキーを設定をします。
下のテーブルの場合、SEQをプライマリーキーに設定したとします。
同じSEQ番号を追加することはできません。
SEQ(Pri) |
商品コード |
販売個数 |
000001 |
B000101 |
10 |
000002 |
B000101 |
20 |
000001 |
A000101 |
50 |
2. ユニークキー
本で言うところの、「図1」、「表1」、「コラム1」、「ポイント1」、「コーヒーブレイク1」とかです。
同じ本に、「図1」や「表1」などは一つしかありません。(たまに図1が複数ある本もありますが・・・ここでは無いことにして下さい。)
下のテーブルの場合、商品コードをユニークキーに設定したとします。
同じ商品コードを追加することはできません。
同じコードを入れたくない場合に使います。
SQL文でインサートを行うとエラーが返ってくるため、堅いシステムが作れます。
SEQ(Pri) |
商品コード(Uni) |
販売個数 |
000001 |
B000101 |
10 |
000002 |
B000101 |
20 |
000003 |
A000101 |
50 |
3. インデックスキー
本で言うところの、索引です。
索引を作ることで、必要なページを早く見つけることができます。
参考書などの索引を見ればわかると思いますが、索引は一つではありません。
アルファベット別、ひらがな別、機能別など作ろうと思えば色んな組み合わせが作れます。
データベースでも同じです。
SEQ(Pri) |
商品コード |
販売個数 |
000001 |
B000101 |
10 |
000002 |
B000101 |
20 |
000003 |
A000101 |
50 |
000004 |
B000101 |
20 |
索引名が「商品コード」で、商品コードをインデックスキーに設定したとします。
その時、索引には以下のデータができます。
"B000101"は、1行目と2行目と4行目にあります。
"A000101"は、3行目にあります。
SELECT文を実行した場合、インデックスキーに設定されている項目がWHERE条件にあるなら、
索引データから目的のデータの場所を探します。
そのため、SQL文で「 WHERE
商品コード="B000101"」とした時、瞬時にデータが返ってきます。
(索引データを見れば、1行目と2行目と4行目にあることが直ぐにわかります)
索引名が「商品コードと個数」で、商品コードと販売個数をインデックスキーに設定したとします。
その時、索引には以下のデータができます。
"B000101"+"10"は、1行目にあります。
"B000101"+"20"は、2行目と4行目にあります。
"A000101"+"50"は、3行目にあります。
この場合、SQL文で「 WHERE 商品コード="B000101" AND 販売個数 =
20」とした時、瞬時にデータが返ってきます。
インデックスキー(索引)は、必要と思われるものをいくつも作ることができます。
ただし、テーブルにデータを追加、更新、削除をした場合に、
関連する索引データにも追加、更新、削除を行う為(データベースが自動で行う)、SELECT以外の処理が遅くなってしまいます。
← TOP
(c)2006 はじめたばかりのデータベース rAreSoft All Rights Reserved.