1

SQL Server DBの設計時のシナリオがあります。データベースにさまざまな組織(つまり、顧客、ベンダー、ディストリビューターなど)に関するデータを保存する必要があります。すべてのdiff組織は、(ほぼ)同じタイプの情報を共有します..アドレスの詳細など...そしてそれらは他のテーブルで参照されます(つまり、OrgIdを介してリンクされ、多くのdiffの場所でOrgNameを検索する必要があります)

2つのオプションがあります。

  1. OrgCustomer、OrgDistributor、OrgVendorなどの組織ごとにテーブルを作成します...すべてのテーブルは同様の構造になり、一部のテーブルには、顧客がフィールドHomeAddress(他のOrgテーブルにはない)を持つように特別なフィールドがあります。 ) .. およびその逆。

  2. 共通のOrgMasterテーブルを作成し、すべての差分組織を1か所に保存します。テーブルには、Orgのdiffタイプを区別するためのOrgTypeフィールドがあります。そして、特別なフィールドがOrgMasterテーブルに追加されます(関連するOrgレコードのみがそのようなフィールドに値を持ち、それ以外の場合はNULLになります)

#1のいくつかの長所と短所

長所:

  • 組織データのdiffタイプにアクセスする際に負荷を分散するのに役立つため、パフォーマンスが向上すると思います。
  • 他の既存のOrgタイプに影響を与えることなく、特定のOrgテーブルをカスタマイズするための完全なスコープを提供します。
  • 差分/分散テーブルの差分インデックスが単一の大きなテーブルよりもうまく機能するかどうかはわかりません。

短所:

  • デザインの複製。ZipCodeフィールドのサイズを増やす必要がある場合は、すべてのテーブルで行う必要があります。
  • 操作の実装におけるレプリケーション(つまり、CRUD操作にストアドプロシージャを使用したため、レプリケーションはn倍になります..3-4 Inert SP、2-3 SELECT SPなど...)
  • DB制約\インデックス作成からSP、アプリケーションコード内のビジネスオブジェクトまで、すべてがn倍に拡大します。
  • ある場所での変更(共通)は、他のすべての場所でも行う必要があります。

#2のいくつかの長所と短所:

長所:

  • N倍は1倍になります:-)
  • すべての操作に対して単一のエントリポイントを実装できるため、メンテナンスが容易になります(つまり、CRUD操作を処理する単一のSPなど)。
  • 単一のテーブルを維持することを心配する必要があります。インデックス作成およびその他の最適化は、単一のテーブルに制限されています。

短所:

  • ボトルネックが発生しますか?ビューやその他の最適化されたデータアクセス戦略を実装することで管理できますか?
  • 一元化された実装のもう1つの側面は、すべての場所で1つの変更をテストおよび検証する必要があることです。抽象的ではありません。
  • デザインは、特に「組織化/構造化」されていないように見えるかもしれません。'特別な'フィールド(他のテーブルとは無関係)を追加する必要があるいくつかの組織のため

また、オプション#3-Orgテーブルを分離したまま、共通のフィールドを格納するための共通のOrgAddressテーブルを作成することも念頭に置いています。しかし、これは私を#1と#2の真ん中に連れて行き、さらに混乱を引き起こしています!

正直なところ、私は経験豊富なプログラマーですが、同じように経験豊富なDBAではありません。これは私の主流の仕事ではないため、設計の複雑さやパフォーマンスなどのパラメーター間の正しいトレードオフを導き出すのを手伝ってください。

前もって感謝します。技術的な質問や提案は大歓迎です。

ヘマント

4

2 に答える 2

1

私は、すべてのオプションを実装したさまざまなアプリケーションに取り組んできました。正直なところ、おそらく、ユーザーがデータを操作する方法、予想されるレコードの数、共通性 (複数の機能を持つ同じ組織)、および予想されるレコードの更新レベルを考慮する必要があります。

オプション 1 は、共通点がほとんどないアプリでうまく機能しました。私は、より多くの共通性があるアプリでオプション 3 を効果的に使用しましたが、あまり好きではありませんでした (常に異なるレイヤーからデータを取得するには、より多くの作業が必要です)。このため、このアプリを書き直すと、オプション 2 が実装されます。

HTH

于 2009-10-26T12:36:35.033 に答える
1

2番目のオプションは近いと思いますが、いくつかの点があります:

顧客、ディストリビューター、ベンダーは組織のタイプであるため、次のことをお勧めします。

  1. すべての組織に共通のすべての列と行の主キーを持つテーブル [組織]。

  2. テーブル [Vendor]、[Customer]、[Distributor] をそれぞれ特定の列で区切り、[Organization] 行の PK に FK します。

「スーパータイプ/サブタイプの関係」のように聞こえます。

org_model_01

于 2009-10-26T20:41:38.877 に答える