3

私は現在、課題のために PHP/MySQL プロジェクトに取り組んでいます。課題に取り組んでいる間にデータベースの効率的な設計を研究していると、多くの場合、2 セットのデータのみを扱う場合は 3 つ目のテーブルを作成するのが良い方法であることに気付きました。

たとえば、「Students」のテーブルと「Addresses」のテーブルがある場合、3 番目のテーブル、つまり「Student_Addresses」を作成することをお勧めします。これは、学生が複数の住所を持つ可能性があるためです (両親が別居しているなど)。 ) であり、1 つのアドレスで複数の生徒 (兄弟) を表すことができます。

私の質問は、3 番目のテーブルにデータを入力するにはどうすればよいかということです。主キーや外部キーを使用して自動的に行う方法はありますか?

これを理解するためにGoogleと教科書を試しましたが、どこにも行きませんでした。チュートリアルや記事へのリンクは大歓迎です。

ご協力いただきありがとうございます。質問と例が明確であることを願っています。

4

4 に答える 4

2

n:m または 1:m 正規化ルール

オプション1:

user table
id
f_name
s_name
......

user address table
id
user_id    // this should be index only as foreign keys will allow 1:1 only
address line 1
address line 2
address line 3
address_type (home, office ....)

オプション 2:

user table
id
f_name
s_name
......

address table
id
address line 1
address line 2
address line 3
address_type (home, office ....)

user_address table
userId
addressId

あなたの説明によると、オプション2が正しい解決策です。ユーザー テーブルとアドレス テーブルにデータを追加したら、データを手動で user_address テーブルに追加する必要があります。一部のオブジェクト リレーショナル マッパー (ORM) は、データを 3 番目のテーブルに自動的に追加する場合がありますが、リレーションを定義する必要があります。http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.htmlを確認してください。

http://docstore.mik.ua/orelly/linux/sql/ch02_02.htm

http://www.keithjbrown.co.uk/vworks/mysql/mysql_p7.php

于 2013-09-17T13:16:52.157 に答える
1

データがベース テーブルに挿入/更新/削除されたときに、トリガーを使用して 3 番目のテーブルにデータを保存できます。トリガーの詳細については、次の URL をご覧ください。

mySQL トリガー

ただし、あなたの場合は、アプリケーション/コード レベルでロジックを記述して、3 番目のテーブルにエントリを作成できればより良いでしょう。データの一貫性を保つために、ベース テーブルからこのテーブルへの外部キー リレーションシップを設定できます。

于 2013-09-17T13:09:11.790 に答える