質問 - よく聞かれること。




キーのことをよく聞かれます。
一番わかりやすいのが、本に例えることだと思っています。
テーブル=本で説明してみます。


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.