1

Iは、次のMySQLデータベースを備えています:1に防ぎinconsisty:Nデータベース関係

enter image description here

各ユーザはidMember unqiue ID を有し、複数のアドレス(1:Nの関係)を有することができます。各アドレスには固有のID idAddressがあります。 dbAddressのエントリidMemberはdbUserのidMemberへの外部キーを指しています。

さらに、各対idLangidAddressからidMemberマップ。

Iは、各ペア(idLangidMember)はidAddressidMemberによって与えられたユーザに属するidAddressにマップすることを保証します。私の質問は、どうすればこのことを保証できるのでしょうか?ここ

[X]データベースエントリを表し例:

dbUserの

[USER1] [USER2]

dbAddress

[1、USER1] [2、ユーザ1] [3、ユーザ1] [4、ユーザ2]

状況は、マップ

に[4、USER2、1]のエントリ を追加することが可能であるべきであるが、エントリ

を追加するために拒否しなければならない[1、ユーザー2、3]または[1 、user1、4]を入力します。

私は、外部キーや、この一貫性がmySQL内で違反されていないことを保証できますか?

+0

説明してください: 'map'のテーブルの格納とは何ですか?また、それはユーザーやアドレスとどう関係していますか? –

答えて

2

3つのテーブルが必要ですか?その場合は、idMemberを3番目のテーブルに配置しないでください。その値を取得するには、dbAddressとの関係を使用します。

idAddressごとに複数のidLangがありますか?そうでない場合は、dbAddressテーブルとマップテーブルを組み合わせるだけです。

テーブルとカラムの命名規則を選んだ人は誰ですか?ほとんどの場合、テーブル名の前にdbを置く必要はありません。通常、テーブルのIDはIDでなければならず、外部キーは通常はもっと長いsomething_idです。私は、これによりクエリがより読みやすくなり、何が起こっているかについてのより良い手掛かりが得られることが分かりました。私はそれについて百万と一つの意見があると確信していますが、もしあなたがこのデータベースを作成しているのであれば、それについて考えてみてください。