0

データベース設計に関するちょっとしたアドバイスを探しています。

私は symfony2 プラットフォームでスライドショー アプリケーションを構築しており、4 つの異なるタイプのスライドショー コンテナー (会社、地理エリア、プロパティ、および個々のモニター) があります。これは、コンテンツを整理し、コンテンツを継承することを目的としています (モニターはプロパティに配置され、プロパティはジオエリアの一部であるなど)。

さて、フラットな PHP では、「コンテナ」と「コンテンツ」の 2 つのテーブルのみを使用し、コンテナ テーブルにタイプ フィールドを配置して、問題のコンテナが地理的エリア、プロパティなどであるかどうかを定義し、各コンテンツをリンクするだけです。適切なコンテナーへの FK を持つピース (つまりスライド)。

さて、symfony2 のエンティティ システムについて学ぶと、代わりにさまざまなコンテナ タイプを個別のエンティティとして定義することで、継承に関して多くのことを得ることができたようです。したがって、たとえば地理領域をフェッチし、そのすべての子を自動的に返すことができます。オブジェクト (すべてのプロパティ、およびそのプロパティに属するすべてのモニター) をオンザフライで。ただし、コンテンツの「所属」を異なるコンテナー間および異なるコンテナー タイプ間で切り替えられるようにしたいと考えています。4 つの異なるエンティティ タイプのいずれかに「属する」機能が必要な場合、コンテンツの関係 (FK) に問題が発生する可能性が最も高いことを考えると、これは説明したアプローチではやや複雑になると思います。

symfony2 の世界で経験を積んだ誰かが、ここで進むための最も賢明な道を教えてくれるでしょうか?

4

1 に答える 1

1

私たちのプロジェクトでは、Propel 1.6PropelBundleを使用しています。

その構文は開発者にとって非常に使いやすいです。の大きな利点の 1 つPropelは、テーブル間の「偽の」関係です。スキーマでskipSql = trueは、フラグを定義するだけで FK の生成を省略できますが、偽のリレーションを定義するだけで、あるオブジェクトを別のオブジェクトで取得できます。

あなたの場合、それは以下のようなものになります:

$containers = ContainerQuery::create()->findByXXX('xxx');
$containers->getFirst()->getContents(); // Will return all joined content for the first container

関連するオブジェクトを含むオブジェクトの作成中に、逆の関係を使用する絶好の機会が得られます。

$contents = $container->getContents();
$container = $contents->getContainer();

コメントで質問してください。必要なものは何でもお答えします ;)

于 2012-07-31T11:47:36.017 に答える