データベースのセットアップに関するヘルプ
-
07-07-2019 - |
質問
私のサイトでは多くの製品を利用できますが、それらは完全に異なるサイト(ドメイン)に分類されます。
私の質問は、すべての製品を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;