Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 一对多关系。单个';一个';不是一个实体_Database_Oop_Database Design_Symfony - Fatal编程技术网

Database 一对多关系。单个';一个';不是一个实体

Database 一对多关系。单个';一个';不是一个实体,database,oop,database-design,symfony,Database,Oop,Database Design,Symfony,在我的项目中,我有以下实体: 项目类别和横幅 横幅通过类别id链接到类别。因此一个类别有多个横幅 问题是,除了类别之外,我还有一个(当前是一个)页面,在这里我还需要插入横幅 我有几种解决方案: 从类别中取消链接横幅,通过代码检查约束,类别id-1表示此cms页面。很好,但未检查约束。我们需要约束吗 取消标题与类别的链接,创建页面表。页面可以作为类别,也可以作为简单页面。附加表,单页将可能保持单页 向类似is_主页的表中添加参数。将横幅附加到随机类别。可能发生级联问题 最好的解决方案是什么 另外,

在我的项目中,我有以下实体: 项目类别和横幅

横幅通过类别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页。