81

それで、私はデータベース設計における識別関係と非識別関係について読んでいますが、SOに関する多くの答えは私と矛盾しているようです。これが私が見ている2つの質問です:

  1. 識別関係と非識別関係の違いは何ですか
  2. 関係の特定または非特定を決定する際の問題

各質問の上位の回答を見ると、識別関係とは何かについて2つの異なるアイデアが得られているように見えます。

最初の質問の回答は、識別関係は「子テーブルの行の存在が親テーブルの行に依存する状況を説明している」と述べています。この例として、「著者は多くの本を書くことができますが(1対nの関係)、著者なしでは本は存在できません」などがあります。それは私には理にかなっています。

しかし、質問2の回答を読むと、「子供が親を特定するのであれば、それは特定の関係である」と書かれているので混乱します。次に、社会保障番号(個人の識別)などの例を示しますが、住所はそうではありません(多くの人が住所に住むことができるため)。私には、これは主キーと非主キーの間の決定の場合のように聞こえます。

私自身の腸の感覚(および他のサイトでの追加の調査)は、最初の質問とその応答が正しいことを示しています。ただし、データベース設計の理解に取り組んでいるので、何か間違ったことを学びたくないので、先に進む前に確認したかったのです。前もって感謝します。

4

8 に答える 8

162

識別関係の技術的な定義は、子供の外部キーがその主キーの一部であるということです。

CREATE TABLE AuthoredBook (
  author_id INT NOT NULL,
  book_id INT NOT NULL,
  PRIMARY KEY (author_id, book_id),
  FOREIGN KEY (author_id) REFERENCES Authors(author_id),
  FOREIGN KEY (book_id) REFERENCES Books(book_id)
);

見る? book_idは外部キーですが、主キーの列の1つでもあります。したがって、このテーブルには、参照されるテーブルとの識別関係がありますBooks。同様に、との識別関係がありAuthorsます。

YouTube動画へのコメントは、それぞれの動画と識別関係があります。は、テーブルの主キーの一部である必要がありvideo_id ますComments

CREATE TABLE Comments (
  video_id INT NOT NULL,
  user_id INT NOT NULL,
  comment_dt DATETIME NOT NULL,
  PRIMARY KEY (video_id, user_id, comment_dt),
  FOREIGN KEY (video_id) REFERENCES Videos(video_id),
  FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

最近では、複合主キーの代わりにシリアル代理キーのみを使用することが一般的になっているため、これを理解するのは難しいかもしれません。

CREATE TABLE Comments (
  comment_id SERIAL PRIMARY KEY,
  video_id INT NOT NULL,
  user_id INT NOT NULL,
  comment_dt DATETIME NOT NULL,
  FOREIGN KEY (video_id) REFERENCES Videos(video_id),
  FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

これにより、テーブルに識別関係がある場合がわかりにくくなる可能性があります。

私はSSNが識別関係を表すとは考えていません。一部の人々は存在しますが、SSNを持っていません。他の人は新しいSSNを取得するためにファイルするかもしれません。したがって、SSNは実際には単なる属性であり、個人の主キーの一部ではありません。


@Nielsからのコメント:

したがって、複合主キーの代わりに代理キーを使用する場合、識別関係と非識別関係の使用に顕著な違いはありませんか?

そうだと思います。代理キーを使用してテーブル間の論理関係を変更していないため、「はい」と言うことを躊躇します。つまり、既存の動画を参照せずにコメントを作成することはできません。しかし、それは単にvideo_idがNULLでなければならないことを意味します。そして、論理的な側面は、私にとって、実際には関係を特定することについてのポイントです。

しかし、関係を特定するという物理的な側面もあります。そして、それは外部キー列が主キーの一部であるという事実です(主キーは必ずしも複合キーではなく、コメントの主キーとビデオテーブルの外部キーの両方である単一の列である可能性があります、ただし、動画ごとに1つのコメントしか保存できないことを意味します)。

関係を特定することは、実体関連図を作成するためにのみ重要であるように思われます。これは、GUIデータモデリングツールで発生します。

于 2010-05-11T21:42:28.463 に答える
19

「私は何か間違ったことを学びたくないので」。

ウェルル、あなたが本当にそれを意味するなら、あなたはERの用語と用語について心配するのをやめることができます。それは不正確で、混乱し、混乱し、一般的に合意されたものではなく、ほとんどの場合無関係です。

ERは、一枚の紙に描かれた長方形と直線の集まりです。ERは、非公式なモデリングの手段となることを意図的に意図しています。このように、それはデータベース設計の貴重な最初のステップですが、それはまさにそれでもあります:最初のステップです。

ERダイアグラムは、Dで正式に記述されたデータベース設計の正確性、正確性、および完全性に近づくことは決してありません。

于 2010-05-11T23:25:00.220 に答える
11

識別/非識別関係は、ERモデリングの概念です。関係は、参照テーブルの主キーの一部である外部キーによって表される場合、識別関係になります。リレーショナルモデルおよびSQLデータベースの主キーには、ERモデルの場合のように特別な意味や機能がないため、これは通常、リレーショナルモデリングの用語ではほとんど重要ではありません。

たとえば、テーブルでAとBの2つの候補キーが適用されているとします。Aもそのテーブルの外部キーであるとします。このように表された関係は、Aが「主」キーとして指定されている場合は「識別」と見なされますが、Bが主キーである場合は識別されません。それでも、テーブルの形式、機能、および意味は、いずれの場合も同じです。これが私の意見では、識別/非識別の概念が本当に重要であるとは思わない理由です。

于 2010-05-11T22:13:42.237 に答える
9

識別関係と非識別関係の違いは、外部キーの無効性だけだと思います。FKをNULLにすることができない場合、FKが表す関係は識別されます(子は親なしでは存在できません)。それ以外の場合、FKは識別されません。

于 2013-12-23T11:37:30.447 に答える
7

ここでの問題の一部は、用語の混乱です。関係の識別は、長い結合パスを回避するのに役立ちます。

私が見た中で最も良い定義は、「識別関係には、子PKの親としてのPKが含まれます。言い換えると、子のPKには、親へのFKと子の「実際の」PKが含まれます。

于 2014-09-02T13:17:57.107 に答える
1

はい、最初のものを使用しますが、2番目のものが最初のものと矛盾するとは思いません。少し紛らわしいように定式化されています。

アップデート:

チェックしたばかり-2番目の質問の答えは、いくつかの仮定では間違っています。..本の著者は、m:nである可能性があるため、必ずしも1:nの関係ではありません。このm:n関係の交差テーブルを作成するリレーショナルデータベースでは、交差テーブルと他の2つのテーブルの間の関係を識別できます。

于 2010-05-11T21:19:04.483 に答える
1

親と子の関係を定義する必要がある場合、関係を識別すると、1対多のオプションの関係が得られます。さらに、子から親へのフローに1対1の関係が与えられます。親エンティティのプライマリキーは、子エンティティのプライマリキーの一部になるため、子エンティティインスタンスは親エンティティインスタンスを識別します。これは、図では実線で表されています。

非識別関係は多対多の関係になります。子エンティティインスタンスが存在する場合、親エンティティインスタンスが必要ですが、子エンティティの各エンティティインスタンスは、親エンティティの多くのエンティティインスタンスに関連している可能性があります。これが、親エンティティは子エンティティの外部キーでもありますが、子エンティティは親エンティティのプライマリキーをプライマリキーとして使用しません。独自のプライマリキーを持ちます。多対多の関係は、実世界の図には存在しません。解決する必要があります

于 2013-12-18T00:15:05.133 に答える
1

これは概念モデリングの領域であり、「談話の宇宙」の理解をモデル化するため、識別関係は確かにERDの概念です。これは親子関係であり、各子オブジェクトのIDが(少なくとも部分的に)親オブジェクトのIDによって確立/決定されるという事実をモデル化します。したがって、これは必須であり、不変です。

実世界の例は、人を特定するという長年の課題です。人のユニークなアイデンティティは、(部分的に)出生した母親と父親との関係によって定義することができます。知られている場合、これらは不変の事実です。したがって、出生親と子の関係は、子のアイデンティティの定義に(不変に)寄与するという点で識別関係です。

これらの品質とリレーショナルdbms構造の使用により、子のPKは、FKを介して親のPKを含む複合キーになります。PKとして、子のIDは必須であり、不変です(変更できません)。PKの「変更」は、実際には新しいオブジェクトをインスタンス化します。したがって、PKを変更できないようにする必要があります。PKの不変性も制限する必要があります。DB制約を使用して、その品質のPKを実装できます。

于 2018-11-25T10:31:16.213 に答える