2017-06-21 9 views
2

最近、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一部になります。私はテーブルが複合プライマリキーをuseridcontactで構成できますが、すべてのテーブルに独自のサロゲートキーがあるデータベース全体で一貫した構造を保ちたいと思います。 (私は何度もコンポジットキーよりもサロゲートキーを使用する方が良いと思っています)

この場合、実際にこれを行う正しい方法は何ですか?コンポジットキーを使用してサロゲートキーをスクラップする必要がありますか(本当にやりたくないですか?)この場合、の関係を使用しないでください。

は、2人の関係の違いは何であるかを正確に説明し、関係必要を特定する理由を複合キーの一部であるフィールドを指すようにしてください。

+0

あなたのキーは自動的にあなたのために作成していますか? – Barmar

+0

@Barmar "最近、EER図を管理するためにMySQL Workbenchを使い始めました" –

+0

私は自分の答えを削除して編集しなければなりません。正しい使用法を特定するために非対を得なければならない。それは戻ってくるだろう。 「特定の関係の技術的定義は、子供の外来キーが主キーの一部であることです。」 – philipxy

答えて

2

子エンティティ(contact)が独自に生成されていることを前提とすると、親の主キーが子に存在するが、子の主キーの一部ではない、主キー。

親エンティティの主キーが自然キー(エンティティが1:1でない限り、コンポジットと思われる)の一部であり、一般的に現在は流行していないことを意味します。

データベース設計上、識別と非識別の区別は現実世界では非常に稀です。私が遭遇または設計するほとんどのデータモデルには、各エンティティにプライマリキーがあり、それを参照するオブジェクトのプライマリキーに他のエンティティからの外部キーがあります。非常に時折私は、私が知っている他のデータモデラー、データベースの制約を使用してナチュラルキーレベルで一意性を強制します。

+0

私の場合、各エンティティは独自のIDを持っているため、識別できない関係を使用する必要があります。 –

+1

はい - 子の主キーがサロゲートである場合、 "関係の特定"の定義に違反します –

関連する問題