Database 一对多关系。单个';一个';不是一个实体
在我的项目中,我有以下实体: 项目类别和横幅 横幅通过类别id链接到类别。因此一个类别有多个横幅 问题是,除了类别之外,我还有一个(当前是一个)页面,在这里我还需要插入横幅 我有几种解决方案:Database 一对多关系。单个';一个';不是一个实体,database,oop,database-design,symfony,Database,Oop,Database Design,Symfony,在我的项目中,我有以下实体: 项目类别和横幅 横幅通过类别id链接到类别。因此一个类别有多个横幅 问题是,除了类别之外,我还有一个(当前是一个)页面,在这里我还需要插入横幅 我有几种解决方案: 从类别中取消链接横幅,通过代码检查约束,类别id-1表示此cms页面。很好,但未检查约束。我们需要约束吗 取消标题与类别的链接,创建页面表。页面可以作为类别,也可以作为简单页面。附加表,单页将可能保持单页 向类似is_主页的表中添加参数。将横幅附加到随机类别。可能发生级联问题 最好的解决方案是什么 另外,
另外,我的工具是symfony2.0和条令可能最简单的解决方案是在横幅中同时包含
类别id
(NULL-able1 FK朝向类别)和页面id
(NULL able FK朝向页面)。您可以允许或限制(通过检查)同一横幅同时属于类别和页面的可能性
要强制(最多)每页使用一个横幅,请将page\u id
设为备用键(唯一约束)
考虑到以上所有因素,您的模型将如下所示:
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。这似乎是最好的解决方案。但它意味着新的实体页面。不幸的是,到目前为止,只有一个页面(主页),我会想到你的,可能是我会使字段为空,如果字段为空,这将意味着这是主页。我知道这不是一个好的解决方案:)),但我不想搞砸add。实体,因为有1页。