多くの人がそうであるように、私はProducts /Product Properties
データベース スキーマを探しています。ファセット検索には Ruby on Rails と (Thinking) Sphinx を使用しています。
要件:
- 新しい製品タイプとそのオプションを追加しても、データベース スキーマを変更する必要はありません。
- Sphinx を使用したファセット検索をサポートします。
私が遭遇した解決策:
(Bill Karwinの回答を参照)
オプション 1: 単一テーブルの継承
本当にオプションではありません。テーブルには、多くの列が含まれます。
オプション 2: クラス テーブルの継承
Ruby on Rails は、起動時にデータベース スキーマをキャッシュします。これは、新しいタイプの製品が導入されるたびに再起動することを意味します。十分なサイズの製品カタログがある場合、これは数百のテーブルを意味する可能性があります。
オプション 3: シリアル化された LOB
複雑なアプリケーション ロジックなしでファセット検索を実行できることは致命的です。
オプション 4: エンティティー属性値
テスト目的では、EAV は問題なく動作しました。ただし、オプションを追加すると (オプションによって価格や納期が増加する場合など)、すぐに混乱してメンテナンス地獄になる可能性があります。
どのオプションを使用する必要がありますか? 他にどのようなソリューションがありますか? 私が見落としていた特効薬(ハ)はありますか?