3

2 つ以上のドメインと 1 つのデータベースがある場合、データベースを設計してデータを整理する方法を教えてください。e コマースを目的としたすべてのサイトと、各サイトで 1 つの商品を販売できます。だから私は2つのアイデアしかありません:

  1. ほとんどすべてのテーブルにもう 1 つのフィールド (site_id) を作成し、データを複製する必要があります。
  2. 他のテーブルの他のすべてのフィールドの site_id 情報を含む 1 つのテーブルを作成する必要があります。

どちらのアイデアにも大きなマイナスがあります。何か案は?ありがとう。

4

5 に答える 5

4

これは、マルチテナント システムを構築する際の典型的な問題です。この件に関してはいくつかの異なる意見を聞いたことがありますが、それらは基本的に 2 つの陣営に分けられます。

  1. site_id特定のテナントのデータを含むすべてのテーブルでテナント ID (この場合) を使用します。このアプローチの支持者は、データが属するテナントを簡単に識別できることを主な利点として挙げ、データのアーカイブ方法 (顧客ごとに異なるテーブルスペース) に影響を与えます。

  2. テナント ID は、高レベルのテーブルでのみ使用してください。このアプローチの支持者は通常、よりクリーンなデータベース構造であるという利点を説明します。

私は、さまざまな顧客からの同じ種類のデータに対してさまざまな物理テーブルを作成するのが好きではありません。これには多くの好ましくない結果があります。

  • ORMツールを介して一貫したオブジェクトモデルを作成することが難しくなる
  • このアプローチは、多数の顧客にうまく対応できません。単一のデータベースからサービスを提供する必要がある 70,000 人の顧客がいる場合、テーブルのセットは 70,000 になります。
  • テーブル名は、SQL ステートメントに対して動的に生成する必要があります。
于 2009-06-18T21:56:30.507 に答える
2

スキーマのどこかに、他のすべてのテーブルにリンクしている少数のテーブルがある可能性があります。データベース内のすべてのテーブルではなく、site_id を入れる必要があるのはこれらのテーブルです。

(非常に不自然な) 例として、スキーマに Customers テーブル、Invoices テーブル、および Invoice Line Items テーブルが含まれている場合、3 つのテーブルすべてに site_id は必要ありません。Customer のテーブルには site_id だけが必要です。

于 2009-06-18T21:50:48.550 に答える
0

私の好みは、必要に応じてマッピング テーブルを作成することです。製品はサイト 1、サイト 2 などに存在できると考えてください。製品の詳細はサイト間で変わりません。商品の価格はそうかもしれません!その場合、Prices テーブルには SiteID と ProductID が必要になる場合があり、ProductID は異なるサイト間でエントリごとに複製される可能性があります。これはユーザーにも言えることですが、ユーザーはこれを「兄貴」と感じるかもしれません。したがって、これは顧客にとってはうまくいくかもしれませんが、通常、顧客はサイトごとに異なるアカウントを持っていることをお勧めします! 物理的に機能しても、論理的に機能するとは限らない場合があります。SiteID は、どこにでも無計画に配置するのではなく、必要な場所に配置してください。アプリケーションが必要とする場所以外の場所で、この SiteID が必要になる場合があることに注意してください... オフラインのクエリについても考えてください。SiteID でフィルタリングするために 5 つの結合を行わなければならないのは最悪です! インデックスを維持することは、フィルタを探し回るよりも優れています!

類似した名前の個別のテーブルによる水平分割に関しては、SQL Server 2005 以降を使用してください。データサイズを心配する必要がなくなるように、パーティショニング機能を備えています。

于 2009-06-18T22:10:51.927 に答える
0

Wordpress と Drupal で使用されているアプローチの 1 つは、テーブルに名前のプレフィックスを付けることだと思います。

dom1_Customers
dom2_Customers

この方法では、テーブルが不釣り合いに大きくなることはなく、site_id の余分なインデックスを維持する必要もありません。とは言っても、コードはそれを補う必要があり、再計測が必要になる可能性があります (ストアド プロシージャは基本的に厄介なものではありません)。

于 2009-06-18T21:53:20.370 に答える