• ベストアンサー

主キーって

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

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

  • ベストアンサー
  • 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% (7987/21355)
回答No.1

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

関連するQ&A

  • 外部キーだけのテーブル(主キーがない?)

    データベースのテーブルについておたずねします. 主キーがなくて,そのかわりに外部キー(と主キー以外の列)しか持たない テーブルも可能だと聞きました. テーブルには主キーが必ずあるものだと思っていましたが, どのような使いかたをするのでしょうか. どうやら,最初からデータがあるわけではなく, 追加されるタイミングがわからないデータを格納する場合に作っておく, ということらしいのですが,なんのことかよくわかりません. データベース関連書籍をいくつか調べましたが, 主キーのないテーブルの説明などは見当たりません. また,この悩ましい問題を与えてくれた知り合いに訊ねましたが, テーブル構成などの具体的なことは, 企業内のことなので,教えてもらえませんでした. 何か具体的な例を交えながらご説明いただければと思います.

  • 主キーが多ければ検索が速い?

    http://okwave.jp/qa/q7785075.html こちらの質問を見て思ったのですが 主キーがあれば検索が早くなるとの事ですが テーブルには複数の主キーが設定できますが 主キーが多ければ多いほど検索が早くなったり データベースとして最適になるのでしょうか?

  • 主キーの設定

     データー表同士を関連づける主キーの設定について教えてください。  あるひとつのデーターの表を作ったら、必ず主キーを設定しなければならないことになっていますが、本を読むと2個以上設定している場合もあります。  最低1個は必要なのは理解できますが、何故2個設定する必要があるのでしょうか。  また必ず2個設定しなければいけない場合とかはあるのでしょうか。  ある試験では2個の設定以外は無効との採点でしたが、この意味が理解できませんでした。  ちなみに私の使用しているアプリケーションはMSのアクセスです。

  • キーの目的

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

  • 主キーについて

    お世話になります。 現在個人でMysqlとphpを使ってモバイルサイトを構築しています。 そこで初歩的な質問なのですが、主キーを日本語で指定する事は 可能なのでしょうか? Mysqlの事が詳しく書かれているサイトなどを見て調べてみました が、どれも主キーとなる値は数字で指定され、解説されていまし たので疑問に思いました。 私自身は個人の趣味でデータベースを構築しようとしていますが 業務として構築を行う場合はやはり数字で指定するのが当たり前 なのでしょうか? 皆様のような技術者様からしてみれば、?な質問かもしれません が何卒、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 主キーの選び方

    主キーが良くわからなくなってきたので質問させてください。 このようなデータベースのとき、主キーは社員番号でいいですよね #同姓同名を考えると社員番号かと 社員番号|氏名|部署 0001|ほげ|デバッグ部隊 0002|ふー|リリース部隊 0003|ばー|クレーム対応部隊 0004|ばー子|接待ゴルフ部隊 0005|ほげ子|リリース部隊 ただ、部署を複数所属してよいとすると、社員番号だけが主キーだと行が一意に決まりません。 このときはどれを主キーとして選ぶべきなんでしょうか? また、○○部隊に所属するひとリストアップするにはどのように正規化(設計?)すればよいのでしょうか? 社員番号|氏名|部署 0001|ほげ|デバッグ部隊 0001|ほげ|接待ゴルフ部隊 0002|ふー|リリース部隊 0003|ばー|クレーム対応部隊 0004|ばー子|接待ゴルフ部隊 0005|ほげ子|リリース部隊

  • Accessの主キーって

    WEBにあるシステムから必要なデータをダウンロードしてそれをAccessに取り込んで作業を効率よくしたいと思っているのですが、WEBのシステムでは、大文字、小文字で分けてくれるのでそれを主キーとして処理していますが、Accessに取り込んだ際に主キーが設定できず、調べたら、大文字を小文字を区別しない為、主キーになる部分が重複していました。 Accessで大文字と小文字を区別して主キーにする事って可能でしょうか? 分る方いたら是非教えて下さい。よろしくお願い致します。

  • Accessの主キーについて

    お願いいたします。 Accessの主キー設定について教えてください。 主キーの役割は、テーブルの中のレコードを区別 するための機能だと思いますが、 フィールドのデータ型をオートナンバー型にして おけば主キーの設定は必要ないのではないでしょう か? 主キーを設定する理由としては、参照整合性のため に行うという考え方で良いでしょうか? また、複数の主キーを設定するという場合のテーブ ル構成はどのような場合のシステムなのでしょうか? どうぞ教えてください。

  • 主キーが2つ

    私はアクセス97を仕事に活用したいと思い、勉強している初心者です。そこで質問なのですが、あるアクセスのホームページで参考にしているテーブルに主キーが2つあります。しかし、普通に主キーを設定しようとしても、1つしか設定できません。どうすれば1つのテーブルに2つ主キーを設定することができますか?よろしくお願いします。

  • 主キーはオートナンバー型のIDを使った方が良いのか

    主キーはオートナンバー型のIDを使った方が良いのか、 独自の主キーを作った方がいいのか? 今は テーブル1 ------------------- IDフィールド(オートナンバー型) 主キー 1 2 3 ------------------- 伝票番号フィールド A001 A001 A002 ------------------- 部署フィールド 営業部 システム部 営業部 ------------------- 金額フィールド 100 200 300 ------------------- という状態ですが、 新たに主キーフィールドを作り 更新クエリで UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額]; をして、主キーを独自に作った方がいいのか。 アクセスを作るにおいて、どちらの方が良いのでしょうか? テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。 レコードに空きができないデータベースなら、オートナンバー型、 空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?

専門家に質問してみよう