どこかでテーブルの主キーについて質問しているのを見かけました。


意外に分かられてない方が多いようだったので、返事をしようと思ったら登録しないと返事も出来なかったので、返事をするのをやめました。


そんな方の為に、主キーについてちょっと書いてみようと思います。


データベースには、「キー」というものが必要となります。


その「キー」は、テーブルとテーブルを繋ぐためのもので、データの管理を容易にする為の物なのですが、繋ぐと言う事は、キーの重複は許されないと言うことになります。


たとえば、


  伝票テーブル   明細テーブル   顧客テーブル
■■ 伝票№ ■■ 伝票№ ■■ 顧客№
  顧客№   明細№   顧客名
  伝票日付   商品№   住所
  備考   数量   電話番号
      担当者名



というテーブルを作る場合、このままでは、「主キーが設定されていません」と言うメッセージと共に、主キーの設定を促され、[はい]を選ぶと、IDと言う名前のオートナンバー型の項目が追加されます。


ですが、このテーブルの場合、例えば「伝票テーブル」ですが、伝票№という一つのレコードを管理するための項目がすでに用意されています。


これを主キーにすれば良いので、[キャンセル]を選び、伝票№を主キーに設定しなおせば、前述のメッセージは表示されなくなります。(この場合、重複不可となります)


次に「明細テーブル」ですが、此処には3つの№があります。明細№だけをキーにしてしまうことも出来るのですがそうすると重複が許されず、伝票単位では1件目のデータも100等と言った数値になってしまいます。(1項目のみでの主キー設定は重複不可が原則となる為)


出来れば明細№を1から振って帳票に出力したいところですね。


そういう場合は、伝票№と明細№の二つを選択してから主キー設定を行います。そうすると、それぞれの項目は重複を許されますが、二つセットで見た場合重複不可となります。


ちなみに、商品№は他に商品テーブル(商品名や価格情報を保有させる)を用意して、商品テーブルで主キー設定を行いフォームやレポートで活用します。(入力を容易にするためのものです)


そして、最後に顧客テーブルですが、これは顧客№を主キーに設定し、伝票テーブルで呼び出しを行います。

その為顧客№の重複は不可となります。


営業所が複数ある。とか、複数の担当者を管理したいと言う場合もあると思いますが、顧客テーブルで複数キーで管理するのは得策ではありません。


顧客名のみ同じである場合は、別№で顧客登録を行い、担当者が複数名いて、担当者1、担当者2としていくのはちょっと……と言う場合は、担当者テーブル(顧客№、担当者№、担当者名のような感じで)を作成し、担当者名を削除します。


そして、顧客№、担当者№の二つで主キーを作成し、顧客テーブルとは顧客№でリンクさせます。



  伝票テーブル   明細テーブル   顧客テーブル
主キー 伝票№ 主キー 明細№ 主キー 顧客№
  顧客№ 伝票№   顧客名
  伝票日付   商品№   住所
  備考   数量   電話番号
      担当者名

こうしていけば、主キーはオートナンバーの必要はありませんが、伝票№などは自動的に連番がついてくれると管理が楽なのでオートナンバーを活用し、明細№は自分で数値を入れる必要が出てきます。


また、顧客テーブルなどは顧客№を使わずとも、顧客名を主キーにすることも可能ですが、データ入力等を考慮すると数値の方が扱いやすいかと思います。


ちなみに、伝票テーブルの場合、キー(他のテーブルとリンクさせるもの)は[伝票№]と[顧客№]になりますが、伝票テーブルのそれぞれのレコードを単一のものとして管理するためのキーは、[伝票№]となり、主キーが[伝票№]となるわけです。


説明が下手なので、分かりにくかったかもしれませんあせる

コメントを書いていただければ、追加で説明を記入したりもすると思いますあせる


☆メニュー☆