0

Symfony で広告のようなサイトのリスティング システムを作成しようとしています。異なるフィールド (およびいくつかの共通フィールド) を持つ複数のリスティング タイプが必要です。

すべての共通フィールド (名前、説明、価格) を持つメインの Listing クラスを作成してから、さまざまなタイプに固有のフィールドを持つサブクラスを作成するつもりでした。

私の調査によると、Doctrine の Class Table Inheritance が最良の解決策のようです。私はこれで正しいですか?最大 10 の「サブタイプ」があるかもしれませんが、パフォーマンスが良くない可能性があると聞きました。

    /**
    * Listing
    *
    * @ORM\Table(name="listing")
    * @ORM\InheritanceType("JOINED")
    * @ORM\DiscriminatorColumn(name="discr", type="string")
    * @ORM\DiscriminatorMap({"listing" = "Listing","recreation-vehicle" = "RecreationVehicle","vehicle" = "Vehicle","event" = "Event","classified" = "Classified","buyandsell" = "BuySell","real-estate" = "RealEstate","business" = "Business"})
    */
    class Listing
    {

}

ありがとう!

4

1 に答える 1

0

Class Table Inheritanceのドクトリン文書では、それを使用する際の考慮事項を見つけることができます。いくつかの重要な事実の抜粋:

  • 型への変更は常にその型の専用テーブルに限定されるため、設計時に最大の柔軟性を提供します。
  • この戦略では、特に大きなテーブルや大規模な階層で、パフォーマンスに悪影響を与える可能性のあるほぼすべてのクエリを実行するために複数の JOIN 操作が本質的に必要です。

継承レベルは 1 つしかないため (すべてのリストがベースを拡張しますListing)、大きな影響はありません。

于 2013-06-30T14:00:15.943 に答える