[解決済み] アイデンティファイとノンアイデンティファイの関係についてまだ混乱している
質問
データベース設計における識別と非識別の関係について読んできましたが、SOの回答の多くは、私にとって矛盾しているように見えます。 以下は、私が見ている2つの質問です。
各質問の上位の回答を見ると、識別関係とは何かということについて、2つの異なる考えを持っているように見えます。
最初の質問の回答では、識別関係とは "子テーブルの行の存在が親テーブルの行に依存する状況を記述するものである、とあります。
しかし、質問2への回答を読むと、"子が親を識別する場合、それは識別関係である、と書かれているので、混乱してしまいます(" その回答は、次に次のような例を挙げています。 社会保障番号 (個人を特定するもの)、しかし住所はそうではありません(多くの人が一つの住所に住むことができるからです)。 私にとっては、これは主キーと非主キーの間の決定のケースのように聞こえます。
私自身の直感 (および他のサイトでの追加調査) は、最初の質問とその回答が正しいことを指摘しています。 しかし、私はデータベース設計を理解するために努力しているので、間違ったことを学びたくないので、先に進む前に確認したかったのです。 事前にありがとうございます。
どのように解決するのですか?
識別関係の技術的な定義は、子の外部キーがその主キーの一部であることです。
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 が NOT NULL でなければならないことを意味します。そして、論理的な側面は、私にとっては、関係を特定するためのポイントです。
しかし、関係を特定するための物理的な側面もあります。それは、外部キー列が主キーの一部であるという事実です(主キーは必ずしも複合キーではなく、Comments の主キーと Videos テーブルの外部キーの両方を持つ 1 つの列であることもできますが、その場合、動画ごとに 1 つのコメントしか格納できないことを意味します)。
関係を特定することは、実体関係図のためにのみ重要であるように思われ、これは GUI データ モデリング ツールで出てくるものです。
関連
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] SQLITE SQLダンプファイルをPOSTGRESQLに変換する
-
[解決済み] scale horizontallyとscale verticallyの意味を教えてください。重複
-
[解決済み] DynamoDBからアイテム数を取得するには?
-
[解決済み] テーブルのネーミング。アンダースコアとキャメルケース、名前空間?単数形と複数形?
-
[解決済み] H2データベースを管理するフロントエンドツール【終了しました
-
[解決済み] Postgresqlサーバーのpostgresという名前のデフォルトのデータベース
-
[解決済み] 73億行のマーケットデータ(読み出しに最適化)を格納する方法とは?
-
[解決済み] データベースとフラットファイル
-
[解決済み] テーブルを増やすか、カラムを増やすか、どちらが良いデータベース設計か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] 外部キーを主キーにするのは問題ないですか?
-
[解決済み] マスター・マスターとマスター・スレーブ、どちらのデータベース・アーキテクチャが良いのか?
-
[解決済み] 正規化された電話番号をデータベースに格納するための規格はありますか?
-
[解決済み] データベースで月額課金システムを設計するためのグッドプラクティス【終了しました
-
[解決済み] キーの取り外し方法を教えてください。
-
[解決済み] PostgreSQL どのクエリが実行されたかを確認する方法
-
[解決済み] CodeIgniter - 1行しか返さないのか?
-
[解決済み] データベースとフラットファイル
-
[解決済み] マイクロサービスパターンでデータ非正規化はどのように機能するか?