0

私のプロジェクトには、次のエンティティがあります: ProjectCategory と Banner

バナーは、category_id によってカテゴリにリンクされます。したがって、1 つのカテゴリには複数のバナーがあります。

問題は、カテゴリに加えて、バナーを挿入する必要がある単一の (現在は単一の) ページがあることです。

現在、私にはいくつかの解決策があります:

  1. カテゴリからバナーのリンクを解除し、コードによる制約を確認します。category_id -1 はこの cms ページを意味します。良いですが、制約はチェックされていません。制約は必要ですか?
  2. カテゴリからバナーのリンクを解除し、ページ テーブルを作成します。ページはカテゴリとして、つまり単純なページとして表示される場合があります。追加のテーブル、単一ページはおそらく単一のままです。
  3. is_homepage のようなパラメータをテーブルに追加します。ランダムなカテゴリにバナーを添付します。カスケードの問題が発生する可能性があります。

最適なソリューションは何ですか?

PS 私のツールは symfony2.0 と doctrine です

4

1 に答える 1

0

Probably the simplest solution is to have both category_id (NULL-able1 FK towards Category) and page_id (NULL-able FK towards Page) in the Banner. You can either allow or restrict (via a CHECK) the possibility of the same banner belonging to both a category and a page.

To enforce (at most) single banner per page, make page_id an alternate key (UNIQUE constraint).

With all of the above, your model would look like:

enter image description here

CHECK (
    (CATEGORY_ID IS NOT NULL AND PAGE_ID IS NULL)
    OR (CATEGORY_ID IS NULL AND PAGE_ID IS NOT NULL)
)

1 DBMS skips NULL when checking for foreign key violations.

于 2012-07-19T10:10:46.520 に答える