新しいプロジェクトとして、e コマース サイトのシステムを構築しています。アイデアは、サプライヤーから製品をインポートし、それらをカタログに直接挿入する代わりに、すべての情報をステージング エリアに保存することです。各サプライヤーには独自のステージ (つまり、データベース内のテーブル) があり、複数のステージング領域を 1 つのエンティティ (現在は 1 つのテーブルですが、後でおそらく Sphinx または Solr に) にフラット化します。次に、マーチャンダイザーは、ステージング製品の関連フィールド (名前と説明) を検索し、一致する製品のリストを表示して、それらの製品をライブ カタログにプッシュすることを選択できます。検索では、単一のテーブル (フラット化されたステージング領域) に対してクエリが実行されます。
私のデザインでは、名前、説明、supplier_id、supplier_prod_id など、単一のフラット化されたテーブルに検索可能およびフィルター可能なフィールドのみを格納するように呼び出します。検索クエリは、一致するアイテムの ID と、使用されるクラス (supplier_id) のみを返します。製品がどのステージングエリアからのものかを識別します。
別のシニア エンジニアは、平坦化された検索テーブルに他のメタ フィールド (検索対象外) を含める必要があると考えていますが、製品をステージからライブ カタログに「プッシュ」するときに使用できます。彼はまた、クエリがこの他のすべての情報を返す必要があると感じています。
フラット化されたテーブルに検索可能なフィールドのみを持ち、検索でクラス/ID のペアのみが返されるようにすることについて、私はかなり強く感じています。 、3))。
私の推論の一部は、これにより、後でフラット化されたテーブルをデータベースから sphinx や solr などの検索サーバーに切り替えることが容易になり、検索の実装が変更されたという理由だけで残りのコードを変更する必要がなくなるというものです。
私は正しい道を進んでいますか?検索可能なフィールドのみを保持し、ID のみを返すことが重要である理由を他のエンジニアに納得させるにはどうすればよいですか? もっと具体的に言えば、なぜ検索アプリケーションはオブジェクトの ID だけを返さなければならないのでしょうか?