• ベストアンサー

1対1のリレーション(主キー同士)はどういった時に使うものなのでしょう

1対1のリレーション(主キー同士)はどういった時に使うものなのでしょうか? 意味が無いように思えるのですが、メリットやデメリットがあれば合わせて教えていただけないでしょうか? データベース初心者です。ご教授お願いいたします。

  • MySQL
  • 回答数3
  • ありがとう数18

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

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

主キーの完全な 1:1 は、ほとんど意味がないでしょうね。 主キーが同じテーブル同志なら、件数も同じになりますし、 そもそも分けるのでなく、同じテーブルにした方が いいぐらいです。 ただ、もしあるとしたら、用途として次のような感じでしょうか。 1. よく使う列だけ、または大きなデータ持つ列を分けて  別テーブルにしたい時。 2. 既存のテーブルに列を追加したいけど、なんらかの  理由で追加できなくて、やむなく別テーブルにする時。 3. 異なる DB 間でのテーブルの関係を記述する時。

その他の回答 (2)

  • guttten
  • ベストアンサー率38% (7/18)
回答No.3

他の方が回答なさっている通り正規化上は無意味ですね。 分ける理由としてもう一つだけ思いついたので回答させて頂きます。 ・1レコードの項目数が多すぎるとき 私の職場では、1キーに対するデータ数が多すぎて1レコードに入りきらないため、 ざっくりとした意味合いでテーブルを分割しています。 何となく違和感を感じますが、現実は理論通りにはいかないものですね(笑

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

一般的な正規化としては意味がないと思います。 あとは組み合わせの問題。 テーブルAとテーブルBしかないなら一つでもいいですが テーブルA,B,C,D・・・とたくさんあって、検索の組み合わせが多様な場合は、 機能ごとにわけたテーブルがある方が便利でしょう。 また、権限としても、 テーブルAは営業部門、テーブルBは製造部門がメンテするなどのルールがある場合は 当然、わけていないと問題ですね まぁ考え出せばいろいろあると思いますよ

関連するQ&A

  • 未定義になるのは主キーじゃないのが原因?

    二つのテーブルを一対多のリレーションシップで繋ぐとき、 一になる方は主キーじゃないと、一対多にならなかったり参照整合性はできないのでしょうか? 主キーではないテーブル1のフィールド(一)と、(多)のテーブル2のフィールドでリレーションを組もうと思ってるのですが、 リレーションシップの種類が未定義になってしまいます。 これは、1になる方のテーブル1が主キーじゃないのが原因なのでしょうか? テーブル1のこのフィールドは、重複することはありませんが、空白も入る為、主キーにできないし、 主キーはほかのフィールドで使っています。

  • Sqliteのリレーション

    ■利用環境 Sqlite3.3.5 データベース初心者で、 リレーションの概念等、理解出来てない 質問になってましたらすみません。 現在、テーブルを作成する事くらしかできません。 ■質問 Sqliteのテーブルプログラムから、 SQL関数を使ってつくっているのですが、 リレーションの設定の仕方がわかりません。 ■説明 Aと言うテーブルとBと言うテーブルがあるとき useridを主キーとして、お互いにリレーション を作るには、どのようにSQLを書けばよいですか?

  • リレーションシップで一対多となる条件

    今Access2000を使っているのですが、 リレーションを組む際に、一対一と一対多になる違いを教えてください。 リレーションを組みたいのは、 主テーブルの主キー[登録CD]テキスト型 リレーションテーブル [登録CD]テキスト型 このテーブルの主キーはオートナンバーで[NO]としています いつも通りに作ってハズなのですが、 リレーションを組むと自動的に一対一になってしまいます。 リレーションテーブルになるためにフィールド数の制限などがあるのでしょうか? 宜しくお願いします。

  • Access 一対一リレーションの編集

    こんにちは 現在、Accessと他のソフトとの連携をするために奮闘しています。。。知恵をお貸下さい。 Accessには元々受注テーブルがあります。 主キーID:オートナンバー 受注日:日付型 納期:日付型 図番:テキスト型 数量:数値 単価:数値 とあり、データがすでに存在しています。他のソフトへエクスポートを継続的に行うにあたって 新規にテーブルを作成し、一対一リレーションをしようとしています。 新規テーブルは 主キーID:オートナンバー 取引先コード:テキスト型 担当者コート:テキスト型 区分コード:テキスト型 実出荷日:日付型 エクスポート状況:数値 そして、受注テーブルと新規テーブルのIDを一対一でリレーションしクエリを作成し、エクスポートしようと思っています。 その際、新規テーブルの方はデータが空なのでクエリ結果が得られないと思うのですが。。。 どうやって既存の受注テーブルと一つ一つのレコードを繋げる事が出来ますか❓ 編集方法をどなたか教えて下さい。 素人ですみません。

  • ACCESSのリレーションが切れてしまいました

    素人で甚だ恐縮ではございますが、社内システムのACCESS2003のデータベースでリレーション定義が無くなってしまい、アプリで削除していないにも拘わらず主たるテーブルのレコードの各項目に"deleted"或いは"#deleted"が入ってしまいました。 リカバリーは、「データベースの最適化/修復」を行い、リレーションを定義していた先のテーブル内のレコードを削除し、再度リレーション定義し再登録にて回復しました。 リレーションが切れる(無くなってしまう)原因がわかりません。 どういったケースで発生しうるかご教示頂ければと存じます。

  • 主キーって

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

  • phpMyAdminの「リレーションを表示する」について

    テーブル間のリレーションについて質問です。 phpMyAdminを使ってMySQLのデータベースにテーブルを作成しています。 今、顧客のテーブル「Customer」と業務のテーブル「Order」があったとして、 ----------------------------------------------------- 【Customer】 [CustomerNo] int型 主キー設定 [CustomerName] varchar_20 [PostName] varchar_20 [Address] varchar_30 [TelNumber] varchar_20 【Order】 [CustomerNo] int型 主キー設定 [OrderName] varchar_10 ---------------------------------------------------- としています。 ここでCustomerテーブルのCustomerNoとOrderテーブルのCustomerNoで リレーションを組もうと思いました。そこでOrderテーブルでリレーションを表示するを選択し、 CustomerNoのフィールドで「Customer -> CustomerNo」を選択し保存するを押したのですが、 「インデックスは設定されていません。 (CustomerNo)」というエラーが帰ってきました。 これはどうすればリレーションを組むことができるのでしょうか? ググッて調べてみたのですが、それっぽい情報が無かったものでして質問をさせていただきました。 どなたか宜しくお願い致します。

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

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

  • 外部キーのリレーションが設定できない

    VWD2008でSQLサーバーを使用して簡単な検索DBを作成しようとしています。 元々アクセスのデータベースファイルから SQLサーバーの機能を利用してSQLDBをエクスポートしました。 Shopsテーブルには [id]…主キー(自動採番) [Shop_Code]…販売店コード [Shop_Name]…販売店名 [Shop_Add]…住所 [Shop_AreaID]…Shope_Areaテーブルとリレーションを組む というフィールドが存在します。 Shop_Areaテーブルには [Shop_AreaID]…主キー(自動採番) [Shop_Area_Status]…北海道・仙台・東京・名古屋なとの地域情報が入ります。 ●Shope_Areaテーブル Shop_AreaID  | Area_Status |  ------------------------------------ 01      |   北海道  |   02      |   仙台   |    03      |   東京   |    VWD機能のデータベースダイアグラムより Shopsテーブルの[Shop_AreaID]と Shop_Areaテーブルの[Shop_AreaID]でリレーションを作成し ダイアグラムの保存を試みようとするとエラーダイアグラムが表示されてしまいます。エラーメッセージは以下の通りです。 テーブル 'Shop_Area' は正しく保存されました。 テーブル 'shops' - リレーションシップ 'FK_shops_Shop_Area' を作成できません。 ALTER TABLE ステートメントは FOREIGN KEY 制約 "FK_shops_Shop_Area" と競合しています。競合が発生したのは、 データベース "C:\....\091111_DATA.MDF"、テーブル "dbo.Shop_Area", column 'Shop_Area_ID' です。 上記のようなエラーメッセージが出力される場合 どういった理由が考えられるのでしょうか。 色々試してみたのですがリレーションを設定することができません。 どうか教えてください。

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

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