• ベストアンサー

データベースにおける二重キーとは?

データベースにおける二重キーとは何のことでしょうか。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

>ありがとうございます。同じデータが二回作れないようにするための考えなのですね。 そそ、 同じ人はデータベース的に何番でも一人ですからね! その違いですよ。 UniqueとIndexを覚えると、かなり道は開けますよ! ただし。 すぐに、それが元でのトラブルも経験すると思います。 AがBというテーブルを参照してる状態の時、 Aの何かを削除できない!というような感じの! (Indexなどを無視すればいいんですが、スマートではないなど) この辺は、やっていくうちにわかりますよ!

その他の回答 (2)

回答No.2

もしかして、ユニーク(unique)の事? id = 主 primary+unique だとしても、追加でuniqueを追加することもありますよ。 table user_data id = 主 primary unique user_id = ユーザーID unique sex = 性別 index. -> relational m_sex.id (m_sex.idと同サイズの型で宣言) table m_sex id = 主 primary unique text = varchar 256 ={ 1,"男" 2,"女" 3,"その他" } とすると、元々のuser_dataは 同じユーザーは「2回作れない」 sexには、m_sexにある値が自動参照されるようになる。 INSERT INTO user_data (user_id,sex) values (XX,YY) ON DUPLICATE KEY UPDATE sex=YY; と記入できることになります。 ユーザーがいなければ新規で、sexにYYを代入し、 すでにいるユーザーなら、sexをYYで更新する。 を1回で実行できるようになります。 のように、データベース上で「唯一のデータになる!」 って状態を宣言するのが、uniqueです。 また、特定カラムが特定の値しか持てないように 参照先を決め打ちしていくのが、index 当たり前ですが、決め打ちしてるので、検索も早くなります。 m_xxxxは通常ユーザーが書き換えないもの=つまりマスターデータ それ以外をuser_xxxxとして、ユーザーが書き換えるテーブルとして 名称を固定してます。

mklzbez3
質問者

お礼

ありがとうございます。同じデータが二回作れないようにするための考えなのですね。

  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

キーとして設定されている項目の値が重複していること。 Primary Keyの事だと思いますが、Primary Keyは基本的に重複を禁止しています。 設定できる列も一つではなく複数設定できる。 と言うことは、売り上げデータを年、月、日という列もしくは年月日という列だけで識別しようとした場合、売り上げが一日一つだけなら問題ないけど一般的には一日の売上品は複数になる。とすると、年月日の他にユニークとなる項目が必要となる。 これら識別するための項目の内容が重複した場合、月末の棚卸しなどでどの売り上げが原因か突き止められなくなってしまう。 だから、二重キーを禁止にする必要性があるものではプライマリーキーは必須となる。 それとは別に、キーとして設定された項目で抽出したり並べ替えするときに高速処理が可能となる。インデックスとも言う。 プライマやインデックスに指定されてない項目もしくは組み合わせの項目で抽出や並べ替えを行うと結果を得るまでの時間が長い。そのテーブルのレコード数にもよるが、数万件程度なのに十数秒待たされることもある。これがキーが設定されていると1秒もかからずに結果を得ることができる。

mklzbez3
質問者

お礼

ありがとうございます。冒頭にどういうことか短く書いてありわかりやすかったです。

関連するQ&A

  • ディンプルキー1個と在来キーの二重ロックはどちらが安全?

    現在私は一戸建てに住んでおり、防犯上ディンプルキーに興味があります。 現在の玄関の扉は、在来キーの二重ロックになっていますが、扉の構造上ディンプルキーは二重ロックにできないようです。 在来キーの二重ロックよりも、ディンプルキー1個にした方が防犯上効果がありますか? それとも大差はないのでしょうか?

  • 2重配列の使い方について

    教えてください。 プログラミング初心者です。 PHPなどのプログラミングでよくSQLでデータベースから引っ張ってきたデータに対してよく見かけるのですが、2重配列に格納したりするのはどういう使い方なのでしょうか?where文で複数条件で問い合わせたものに対して紐づけたりする時に使ったりするのでしょうか? そもそも2重配列がイメージできていないです。データベースからのデータでなくても使用したりしてるかもしれませんが。宜しくお願いします。

    • ベストアンサー
    • PHP
  • 分譲マンションの補助キー(2重キー)の斡旋

    関西圏マンション100戸弱の理事長をしています。 最近、マンションに空き巣が入ったので、居住者さんから 「玄関ドアーに2重にキーを取り付けたい。数が多くなると  値引きがあり安くなるから管理組合で取り纏め斡旋して欲しい。」 声があがってきました。 1戸より10戸、20戸とまとまった方が、安くなるのは解ります。 しかし、玄関ドアーの外側は、共用部であり、勝手に加工するのは 禁じられています。 しかし、防犯対策として有効なことも解っています。 管理組合が、斡旋すると言うことは、共用部の加工を理事会が認めると いうことになります。 私としては、okを出すことは出来ません。 黙認との形(2重キーを付けたのを知らなかった)をとりたいと思っています。 他のマンションでは、このような問題は出ていませんか? どの様に対処されているのかご教示いただければ幸いで。 宜しくお願い致します。

  • データベースでの質問です。

    データベースの正規化で第一正規化、第二正規化、第三正規化 がありますが 「第一正規化」では、データの重複をなくす事をする 「第二正規化」では関数従属をおこないxの値が決まればyの値が決まるのと同じように あるキーが決まれば、他のキーも決まるようになること 「第三正規化」では関数従属をなくすと聞いたんですが、意味がわかりません 解釈としてはキー項目を2つ組み合わせてある項目を決めると解釈であってるでしょうか?? 第一正規化と第二正規化はこの解釈でいいでしょうか?? バカな質問ですいません データベースの正規化の理解に苦しんでいます 回答おねがいします。

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

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

  • データベースからFOREIGN KEYの一覧を取得したい

    初心者です。 SQL SERVER 2005で データベースで使用されている外部キーの一覧を取得したいのですが、 SELECT * FROM sys.objects WHERE type = 'F' や SELECT * FROM sys.foreign_keys では、実際にどのテーブル・どの項目が使用されているのかが取得できません。 どのようなSQL文を書いたらいいでしょうか? よろしくお願いします!

  • 電話番号の二重登録されてしまう!

    電話帳で名称(よみがな)を別なものに変更すると同じ電話番号が二重に登録されてしまう! 電話番号の上書きにならない!電話番号がデータベースの目次キーになってない! 早急に修正変更の対応をお願いします! ※OKWaveより補足:「シャープのスマートフォン・携帯電話」についての質問です。

  • 主キーって

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

  • データベースウィンドウを表示させる方法

    起動時の設定で 「データベースウィンドウの表示」のチェックをはずしている場合、 どうやってデータベースウィンドウを表示させるのでしょうか? 一度ファイルと閉じて ファイルの履歴から SHIFTキーを押しながら該当のファイルを開くと、 データベースウィンドウを表示できますが 「データベースウィンドウの表示」のチェックをはずしているファイルを 通常に開いて再表示させる方法が知りたいです。 (データベースウィンドウを表示させるショートカットキーやファンクションキーがあれば) よろしくお願いいたします。

  • キーの目的

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