0

マルチサイトシステムとは、同じバージョンの複数のペインを持つシステムを指します。この例として、Gamespotがあります。ここでは、uk.gamespot、us.gamespotなどにいるかどうかに応じて、さまざまなリリース日やさまざまなゲームが表示されます。

ここでは、サイトの選択はこの問題ではありません。問題は、開発のプロセスと容易さ、およびサイト固有のデータをどのように選択または入力するかです。また、さまざまなシステムコンポーネントがサイト固有である必要がない可能性もあり、まれに、すべてのサイトのすべてのデータが表示され、レポートおよび管理目的で選択可能である必要があります。

以下の手法が検討されており、それらが機能することはわかっていますが、それらの実装の面倒な性質に不満があります。

テーブルビュー-各テーブルのサイトごとに複数のビューを作成することで、サイトに固有のクエリ対象のデータを読み込むことができます。ただし、インラインSQLは正しいビューを動的に呼び出す必要があり、新しいサイトが作成された場合は、新しいビューのフルセットを作成する必要があります。

SQLの変更-SQL中間関数を作成することにより、SQLを変更して、サイトに固有のデータのみを選択するターゲット列へのwhere句と結合を変更できます。ただし、このようなデバイスを介してすべてのクエリを実行すると、将来的に深刻な問題が発生する可能性があり、クエリの柔軟性が制限される可能性があると考えています。

インラインサイト条項-これは実装が最も面倒で苛立たしいものですが、コーディング方法に標準を適用できれば、最も信頼性が高いことがわかります。これは潜在的に最も信頼性が高いですが、開発者にとって最も魅力的ではありません。これは、ほぼすべてのクエリに対してサイト句を作成することを意味します。

したがって、システムのより高いレベルでこのシステムを実装するための最良の手段を見つけるのではなく、基本レベルでサイト固有のデータ選択をかなり簡単に実装できる方法を見つけようとしています。

この質問が広すぎる場合はお知らせください。さらに絞り込みます。

最初の編集:

サイト全体のデータのタイプは、テーブルに関して同じです。ユーザーテーブルはすべてのサイトで共有され、各ユーザーは1つ、一部、またはすべてのサイトにのみアクセスできます。

Gamespotの例をもう少し詳しく見てみましょう。1人のユーザーには、UKバージョンを管理する責任が与えられます。

ゲームとそのレビューに関する情報は、グローバルに関連する情報であるため、すべてのサイトにアクセスできるレコードから取得されます。ただし、リリース日は、サイト固有の別のテーブルから取得されます。ゲームに関する情報は通常の方法で取得されますが、リリース日を取得するには、正しいサイトの正しいコードを取得するために少し余分なコードが必要です。

ユーザーに関しては、そのユーザーが現在管理しているサイトは、選択と挿入の対象となるサイトである必要があります。

ご想像のとおり、リリース日はコアテーブルではなく、各日付をそれぞれのゲームに直接マッピングすることはできません。

(Gamespotの動作についての知識があることを意味するものではありません。例は架空のものです)

4

1 に答える 1

1

あなたが構築している実際のサイトについて十分に知らないので、ここに一般的な答えはないと思います。最良の設計に大きな影響を与える質問の例をいくつか示します。

  1. コンテンツはほとんどサイト間で重複していますか、それともほとんど異なりますか?
  2. 「一般的な」コンテンツと「特定の」コンテンツの間に単純な区分はありますか?(つまり、コンテンツはすべてのサイトに共通であるか、1つのサイトのみに固有です)。それとも、もっと柔軟にする必要がありますか?
  3. 要件は時間の経過とともにどの程度進化すると思いますか?

私のアドバイスは、データを格納するための正しいテーブル構造にエネルギーを集中することです。あなたがそれを正しく理解すれば、良いソフトウェア設計はそこから自然に流れるはずです。

そしてもちろん、途中で具体的な質問があれば遠慮なく質問してください。

編集:質問の更新後も、多くのあいまいさが残っていると思います。これは、特定のデザインを作成するときにのみ解決できます。しかし、簡単な答えが必要な場合は、インラインサイト句が提案した3つのオプションの中で最良だと思います。他のものは、不必要な複雑さの層を追加します。

インラインサイト句が「面倒」で「イライラする」理由がわかりません。PHPでプログラムで処理できるため、優れた設計では繰り返しが導入されません。

于 2012-11-20T12:08:55.733 に答える