質問

私のサイトでは多くの製品を利用できますが、それらは完全に異なるサイト(ドメイン)に分類されます。

私の質問は、すべての製品を1つのデータベースにまとめて、IDを使用してサイトを区別する方がよいのですか、またはサイトごとにテーブルやDBを設定する必要があるのですか?

ここに私の考えがあります

別のデータベース

  • バックエンドから読みやすい
  • より適切に分類
  • バックアップをより困難にします
  • スキーマを変更する必要がある場合、すべてのデータベースにプッシュする必要があります

同じデータベース

  • すべてを1か所で
  • 扱いにくい
  • 1つのデータベースのファイルサイズが非常に大きくなり、ルックアップが低下する可能性があります

誰かが私にどの方法が最善で、なぜかについてアドバイスをください

役に立ちましたか?

解決

あまり多くの詳細を提供しなかったので(良い答えを提供するのが難しくなりました)、質問で使用することを選んだ言葉は、これが異なる「スキン」を持つ単一のアプリケーションであると信じさせます。

  

私のサイトでは多くの製品が利用可能になりますが、それらは完全に異なるサイト(ドメイン)に分類されます。

私の想定では、cool-widgets.com、awesome-sprockets.com、neato-things.comなど、いくつかの異なるストアフロントを持つ単一のWebストアがあるということです。これらはすべて同じで、多分保存しますCSSスキンまたはそのような単純なもの。ストア管理はすべて中央システムで行われ、ドメイン名は単にカテゴリ名として機能します。

そのため、任意の基準(category_ name == 'cool-widges.com')を使用して同じデータを2つの異なるコンテナに分割することは、アンチパターンであるデータパーティション分割です。ユーザー名に基づいた2つの異なるユーザーテーブル([Users $ A-to-M]および[Users $ N-to-Z])がないように、2つの異なるテーブル(またはデータベース)を使用することはほとんど意味がありません。 )カテゴリ名。

ユーザー管理、管理、注文処理、データのインポートなど、カテゴリ間で共通のコードが多数あります。共通のコードで複数のデータストアを集約することは、それよりもはるかに困難です。店舗表示コードでカテゴリを分離します。それだけでなく、分離のバグはより明確になります。価格比較ページには3つすべてのストアのアイテムが表示されます。集約のバグははるかに少なくなります:4つのストアのうち3つだけが更新されました。これがアンチパターンである理由です。

副次的注意:はい、データの分割に用途があると言う前に(そうする)、これらの用途はパフォーマンスの問題が発生したずっと後になります。多くの深刻なデータベースプラットフォームでは、間抜けなデータモデルを作成しないように、舞台裏でのパーティション分割が許可されています。

他のヒント

すべてのサイト間でデータを共有する必要がある場合、データ転送が排除されるため、同じデータベースを共有することをお勧めします。また、データがより集中化されます。

すべてのサイト間でデータを共有する必要がない場合は、サイトごとに1つのデータベースを分割することをお勧めします。テーブル構造の更新の難しさについて言えば、データベースの変更(SQLファイルでのALTER、UPDATE、DELETEクエリの保存)を記録し、同じSQLファイルで他のデータベースを更新することができます。

異なるデータベースに保存することもセキュリティに役立つ場合があります。サイトごとに異なるユーザー権限を設定できます。侵害された場合、他のサイトを保護します。

また、データベースが明確に分割されている場合、データベースを簡単に維持および追跡できます。

既に述べたように、両方のオプションには長所と短所があります。 2つの店舗について話しているので、おそらく大した問題ではありません。

ただし、次の質問を自問することもできます。

  • 実際には2店舗ですか、それともそれ以上ですか?複数の場合、1つのデータベースがよりスマートになる可能性があります。
  • 製品は本当に同じですか?製品が異なるため(たとえば、車と食品、保存する詳細の量と性質がまったく異なる)、1つの一般的なデータベースで製品を絞る必要がある場合は、そうしないでください。代わりに2つのデータベース/テーブルを使用してください。

中心的な質問は、今後さらに精巧になる可能性が最も高いのは、店舗、または製品ですか?

個別のデータベースの方が簡単だと思います。クイックスタートテンプレートデータベースを使用して、そこから新しいストアデータベースを構築できます。共通のデータベースを作成し、共通のテーブルとストアのリストとそのデータベースを含めることもできます。修飾名を使用して同じサーバー内の任意のデータベースにアクセスできるため、次のことに注意してください:

SELECT value FROM CommonDB.currencies WHERE type='euro';
SELECT price FROM OldTownDB.Products WHERE id=newtownprodid;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top