在我的项目中,我有以下实体: ProjectCategory和Banner
横幅按category_id链接到category。所以一个类别有几个横幅。
问题是除了类别我还有单个(当前是单个)页面,我还需要插入横幅。
Currentl我有几个解决方案:
什么是最好的解决方案?
P.S。我的工具是symfony2.0和doctrine
答案 0 :(得分:0)
可能最简单的解决方案是在横幅中同时具有category_id
(NULL-able 1 FK朝向Category)和page_id
(对于Page为NULL的FK)。您可以允许或限制(通过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。