4

私は次のPHPクラス構造を持っています:

ここに画像の説明を入力

オブジェクトをデータベースに保存したい (MySQL、MSSQL、postgreSQL、およびすべての標準プロバイダーが提供する)。

私の要件は次のとおりです。

  1. すべての electric_devices / すべてのコンピューター / ノートブックのリスト ... フィルターと順序の可能性があるオブジェクトに属するすべての属性を持つサブクラスのオブジェクトを含む (すべての属性のフィルター)
  2. ID を使用して単一のレコードを選択する
  3. DB 構造に新しいオブジェクトを挿入します (読み取りは書き込みよりもはるかに重要です)。
  4. 結合が多すぎず、データベース要求ができるだけ少ない

いくつかの可能性を見つけましたが、私のすべての要件に一致するものはありません。

  1. クラス テーブルの継承: サブクラスを含むすべての項目を取得するのは非常に複雑で、適切な結合を生成するための (サブクラスごとに個別の結合ステートメントを定義する必要がないように) 自動的な方法を見つけることができませんでした。もう 1 つの問題: オブジェクトを ID で検索したい場合、どの結合パスを使用すればよいかわかりません。
  2. 単一テーブルの継承: 個別の属性が多すぎます --> NULL フィールド
  3. 具体的なテーブルの継承: すべてのアイテムを検索するには、多くのデータベース リクエストを実行する必要があります。UNION は同じ数の列を必要とするためです。
  4. EAV: フィルターが 1 つの結合/属性が必要な場合 --> パフォーマンスが非常に悪くなります (フィルター属性と残りを行として結合する可能性はありますか?)
  5. NoSQL データベース: プロバイダーなし (サーバーが高すぎて、管理を気にしたくない)
  6. postgreSQL組み込み継承:必要な方法で機能していません(基本的に、すべてのelectric_devicesをリストできますが、共通の属性のみをリストできます)

情報:

  • 保存されたオブジェクトの総数は約 100 になります
  • 属性の完全な数 (~100) はめったに変化しません
  • 多くの属性には、事前定義された複数の選択肢の値があります
  • 各オブジェクトには 20 ~ 50 の可能な属性があります

最後に、私には方法がありませんが、可能性はあるに違いないと思います。他のポータルでも同じように行われます (eBay や小さな広告ポータルなど)。最も簡単な方法。

すべての要件を満たすアプローチはありますか?

すべてのヘルプ (リンク、キーワード、...) に感謝します。不明な点がある場合は、質問してください。

4

2 に答える 2

1

クラス テーブルの継承を十分に詳しく見ていない可能性があります。特に、サブクラス テーブルの ID フィールドがどのように入力されるかを確認する必要があります。これは自動採番ではありません。これは、対応するスーパークラスからの ID フィールドのコピーです。これが「貧乏人の遺産」です。新しい項目の挿入をプログラムするのは少し複雑ですが、必要な結合は滑らかで、簡単で、高速です。結合条件でサブクラスの ID とスーパークラスの ID を使用するだけで完了です。

また、5 つのビューを作成して、一般化された属性と特殊化された属性を結合することができます。

于 2012-07-30T10:19:04.927 に答える
0

あなたの研究のためにno-sqlをリストしたように:それはあなたにとって非常に簡単な解決策だと思います.mongodbと言ってください. この場合の要件は満たされ、Doctrine ODM などのオブジェクト マッピングの適切なソリューションが手元にあります。また、ホスティングは、たとえばhttp://dotcloud.comで確実に利用できます。いくらの予算があなたに利用できるかわかりませんが。このプロバイダーを使用すると、appr から開始できます。月額8ドル。

于 2012-08-07T15:09:54.553 に答える