0

在我的项目中,我有以下实体:ProjectCategory 和 Banner

横幅通过 category_id 链接到类别。所以一个类别有几个横幅。

问题是,除了类别之外,我还有单个(当前为单个)页面,我还需要在其中插入横幅。

目前我有几个解决方案:

  1. 从类别中取消链接横幅,通过代码检查约束,category_id -1 表示此 cms 页面。很好,但没有检查约束。我们需要约束吗?
  2. 从类别中取消链接横幅,创建页面表。页面可以作为类别,也可以作为简单页面。附加表,单页可能会保持单页。
  3. 向表中添加参数,例如 is_homepage。将横幅附加到随机类别。可能会出现级联问题。

什么是最好的解决方案?

PS我的工具是symfony2.0和学说

4

1 回答 1

0

可能最简单的解决方案是在横幅中同时具有category_id(NULL-able 1 FK to Category)和(NULL-able FK to Page)。page_id您可以允许或限制(通过 CHECK)同一横幅同时属于类别和页面的可能性。

要强制每页(最多)单个横幅,请创建page_id一个备用键(UNIQUE 约束)。

有了以上所有内容,您的模型将如下所示:

在此处输入图像描述

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

1 DBMS 在检查外键违规时跳过 NULL。

于 2012-07-19T10:10:46.520 回答