2011-12-26 6 views
1

データベースの多対多マッピングのベストプラクティスを探しています。多対多のデー​​タマッピングのベストプラクティス

たとえば、私はマップする2つのテーブルがあります。このマッピングを格納するための3番目のテーブルを作成します。 UI上で

Database Diagram

私はBと、いくつかのマッピングされるA(またはしない)複数のを持っていると私は今の2つのソリューションを参照してください。

1 - AIからのすべてのレコードごとに更新時に削除されますすべてのマッピングされたデータを挿入し、新しいデータマッピングを挿入します。

  • 利点:マップされたデータのみを保存します。
  • 短所:毎回delete文とinsert文を使用する必要があります。

2 - 名前がisMappedのABテーブルに新しいビット列を追加する必要があります。そして、AからBまでのすべてのレコードにすべてのレコードのすべてのマッピングを保存します。マッピングの保存アクションでは、更新ステートメントのみを使用します。

  • 利点:毎回削除して挿入する必要はありません。
  • 短所:不要なレコードを保存する必要があります。

あなたは私に最高のソリューションを提供できますか?私が言うと思います

おかげ

+0

なぜあなたは、Aテーブル(1)の更新ごとにすべてのマッピングデータを削除する必要があると思いますか?たとえば、 'AName'を更新すると、マッピング自体は変更されません。 – a1ex07

答えて

3

あなたがリストした2つのオプションの間には、オプションが1つありません。isMappedは意味がありません。

あなたはまだかかわらず、1つのより多くのオプションを持っている:

DELETE FROM AB where Not in the new map 
INSERT INTO AB FROM (New map) where NOT in AB 

これらのマップがたくさんある場合、私は削除して、新しいマッピングから挿入する、そうでなければ私はちょうどあなたが示唆しているように挿入し、すべてを削除します。

3

はいつでもあなたの#2のシナリオ

で2番目の箇条書きを参照してください、そのシナリオを使用しないように、あなたの赤い旗をだ

「不要なレコードを格納する必要があります」。

データはシナリオ1で正しくモデル化されています。つまり、AとBのレコード間にマッピングがあり、Aのレコード間にマッピングがない場合はマッピングテーブルにマッピングが存在しない場合、マッピングテーブルにマッピングがあります。そしてB.

また、更新ステートメントの根本的な仕組みは、削除と挿入のため、実際にデータベースを保存しているわけではありません。

最後に、データベースの作業を保存することについて、この段階で試してやってはいけません。これが彼らのために設計されたものです。 :)

シナリオ1のようにデータモデルを正しく実装することが最適です。

基本正規化構造を用意し、テストデータを取得したら、必要に応じてパフォーマンスとリファクタリングをテストできます。インデックスを追加する、データ構造を変更する、など