• ベストアンサー

主キーって

データベースにでてくる、『主キー』の概念が全く理解できません。 いろんなところでいろんな説明をみるのですが、何故これが必要なのか、これはいったいなんなのか、とてもわかりやすく教えていただけるかたいましたらお願いします。

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

  • ベストアンサー
  • gadd3
  • ベストアンサー率46% (211/451)
回答No.3

補足です。 >Excelの場合はセル番地で1個のセルを特定します。 Excelには、1シート内に同じ番地のセルは1つもないですよね。 だから、セルを特定できます。 データベースの主キーも似たようなもんです。 主キーには重複した値は入れることができません。 (ふつう。主キーを複数列で構成する場合以外は。) 1つの列の中に同じ値が2つと無い。 だから行を特定できます。 そして、データベースでは 行を特定するだけですんでしまう作業もあれば、 行を特定するだけじゃおわらず、列の指定も必要な作業もあります。 でも、とにかくまず先に行を特定したい。 なんでか?はわかりませんが、そういう構造になっているからです。 (F・コッドさんに聞いてください。他界してますが…。) 多分、データベースは列幅(列数)は固定が基本で、縦方向にどんどん データ(レコード)が増えていくから、というのもあるでしょうし、 1レコードが1組の関連性のあるデータのかたまりになっているからと いうのもあると思います。 リレーショナルデータベースは、1つのテーブルで見た場合、 「関係性のある列構成、関係性のあるデータ内容」でかためられています。 商品テーブルに、顧客の住所が記録されるなんてことはありません。 そして1つの行(レコード)で見た場合も、関係性のあるデータで まとまっています。 例えば「商品番号10番は、ピンクで短い丈のスカート。値段は3900円。 仕入れ値は2500円。メーカーは××。」 みたいな感じです。 まあ、列を最初に特定するより、行を特定したほうが、 「色んなことがわかる」です。そういう仕組みになってます。 それに対して、「1つの列だけ」を見ても、 例えば値段だけ、色だけ、仕入れ値だけ、みたいな感じになっちゃって、 「だから何?」「何がいいたいの?」 「意味わからん」ってなっちゃいます。 せいぜい、「あーいくらからいくらまでの幅があるな」とか 「あー、こんな色があるのかー」くらいしかわかりません。 あくまでも「1つの列だけ」を見た場合、ですが。 だからまず先に行を特定して 「ははーん、これはこういう商品だね?」 「なるほど、これはこういうお客さんだね?年収800万だって!すげー。」とすぐにわかりたいのです。 普通の人は。 で、そういった情報をぱっと特定できるので主キーがあると便利なんです。 そんなことにも主キーは役立ちます。 もっと、色々と便利なことがあると思います。 ご自分でも探してみてください。 「主キーが無いと逆に困ること」を。(^^) なんで主キーがあるか→便利だから。です(^^)

その他の回答 (2)

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.2

主キーは「どの行か」を「特定」するためのものです。 リレーショナルデータベースでは 「どの行(レコード)の、どの列(フィールド)」の値か? と言う形でしか、値を検索できないようになっています。 最初からそういう仕組みになっています。 (とイメージしてくれればいいと思います。) Excelでいうとセル番地みたいなもんですね。 Excelの場合はセル番地で1個のセルを特定します。 もし仮にExcelの1シート内に同じ番地のセルが2つあったらどうでしょう? 計算式が成り立たなくなりませんでしょうか? データベースの場合は、主キー(プライマリキー)によってまず1行分のレコードを特定します。値を特定するにはさらに、その行の列(フィールド)の名前や何番目の列かなどを指定して特定(絞り込み)します。 1つの「何か」を「特定」する、という動作はどんなソフトでも必要です。 データベースでなくても「何かをクリックして選択する」という操作も同じ意味です。 操作の対象、値加工の対象、そういったものを「特定」するために 「主キー」でまず行(レコード)を特定し、列(フィールド)で値を特定します。 もちろん、1行だけ特定できるということは、同時に複数行も特定できる ということにつながっていきます。 まあ、あんまり難しく考えず、「そんなもんだ」程度で理解してしまえば そのうちわかってくると思いますよ。(^^)

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

「主キー」はデータベースの概念上の存在ではなく「実務上」の存在です。 データベースのテーブルは、実務上「全レコードにわたって絶対に重複 しないデータを持つ項目」があれば、その項目を「レコードを特定する ためのデータ」として使用可能になります。そのような「絶対に重複 しない項目」は、その項目で検索をかければ「絶対に」一つのデータ しか抽出されませんから、処理効率が非常にいいのです。 しかし、概念上は別に「全レコードにわたって絶対に重複しない項目」 なんてのは必要じゃありません。当然、そういう項目は無い場合もある わけで、データベースソフトはそういう場合「絶対に重複しない項目 (例えば連番)」を「隠し項目として」勝手に作っちゃうんですね。 ということで「表向き」は「主キー」はあっても無くてもいいものに なってしまうんですが、データベースの処理上は「必要なもの」なので 「明示的に決めてもらえる(例えば社員番号)ものがあるなら、それを "主キー"として使わせて下さい」という形になっているために、「主キー」 の意味づけが、何となく分かり難くなってるんだと思いますよ。

関連するQ&A