最近、MySQL Workbenchを使用してEER図を管理し始めました。今まで私はphpmyadminを使用していましたが、Identifying &非識別関係という用語を一度も見つけませんでした。SQL内の非特定の関係を特定する
オンラインで相違点を調べて、トピックに関するいくつかのスタックオーバーフローの回答を読みましたが、私はまだほとんど無知です。
私が理解していることから、私は自分のデータベースにシナリオの例を挙げ、正しい解決策を提案します。
私のデータベースにはusers
テーブルとcontact
テーブルがあります(電子メール&の電話番号など)。連絡先レコードはユーザーに関連することなく存在することができないため、の関係を識別する必要があります。ここで
が私のテーブルがどのように見えるかです:私は2つのテーブル間の関係を特定するを作成するとき
+-------+ +-------+
| users | |contact|
+-------+ +-------+
| id | |id |
+-------+ |userid |
|contact| // contains email or phone
|type | // specifies if email or phone
+-------+
しかし、それは複合キーのuserId
一部になります。私はテーブルが複合プライマリキーをuserid
とcontact
で構成できますが、すべてのテーブルに独自のサロゲートキーがあるデータベース全体で一貫した構造を保ちたいと思います。 (私は何度もコンポジットキーよりもサロゲートキーを使用する方が良いと思っています)
この場合、実際にこれを行う正しい方法は何ですか?コンポジットキーを使用してサロゲートキーをスクラップする必要がありますか(本当にやりたくないですか?)この場合、の関係を使用しないでください。
は、2人の関係の違いは何であるかを正確に説明し、が関係必要を特定する理由を複合キーの一部であるフィールドを指すようにしてください。
あなたのキーは自動的にあなたのために作成していますか? – Barmar
@Barmar "最近、EER図を管理するためにMySQL Workbenchを使い始めました" –
私は自分の答えを削除して編集しなければなりません。正しい使用法を特定するために非対を得なければならない。それは戻ってくるだろう。 「特定の関係の技術的定義は、子供の外来キーが主キーの一部であることです。」 – philipxy