私は次のPHPクラス構造を持っています:
オブジェクトをデータベースに保存したい (MySQL、MSSQL、postgreSQL、およびすべての標準プロバイダーが提供する)。
私の要件は次のとおりです。
- すべての electric_devices / すべてのコンピューター / ノートブックのリスト ... フィルターと順序の可能性があるオブジェクトに属するすべての属性を持つサブクラスのオブジェクトを含む (すべての属性のフィルター)
- ID を使用して単一のレコードを選択する
- DB 構造に新しいオブジェクトを挿入します (読み取りは書き込みよりもはるかに重要です)。
- 結合が多すぎず、データベース要求ができるだけ少ない
いくつかの可能性を見つけましたが、私のすべての要件に一致するものはありません。
- クラス テーブルの継承: サブクラスを含むすべての項目を取得するのは非常に複雑で、適切な結合を生成するための (サブクラスごとに個別の結合ステートメントを定義する必要がないように) 自動的な方法を見つけることができませんでした。もう 1 つの問題: オブジェクトを ID で検索したい場合、どの結合パスを使用すればよいかわかりません。
- 単一テーブルの継承: 個別の属性が多すぎます --> NULL フィールド
- 具体的なテーブルの継承: すべてのアイテムを検索するには、多くのデータベース リクエストを実行する必要があります。UNION は同じ数の列を必要とするためです。
- EAV: フィルターが 1 つの結合/属性が必要な場合 --> パフォーマンスが非常に悪くなります (フィルター属性と残りを行として結合する可能性はありますか?)
- NoSQL データベース: プロバイダーなし (サーバーが高すぎて、管理を気にしたくない)
- postgreSQL組み込み継承:必要な方法で機能していません(基本的に、すべてのelectric_devicesをリストできますが、共通の属性のみをリストできます)
情報:
- 保存されたオブジェクトの総数は約 100 になります
- 属性の完全な数 (~100) はめったに変化しません
- 多くの属性には、事前定義された複数の選択肢の値があります
- 各オブジェクトには 20 ~ 50 の可能な属性があります
最後に、私には方法がありませんが、可能性はあるに違いないと思います。他のポータルでも同じように行われます (eBay や小さな広告ポータルなど)。最も簡単な方法。
すべての要件を満たすアプローチはありますか?
すべてのヘルプ (リンク、キーワード、...) に感謝します。不明な点がある場合は、質問してください。