Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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
Php 不使用多对多关系有什么好处吗_Php_Sql_Database_Many To Many_Relational Database - Fatal编程技术网

Php 不使用多对多关系有什么好处吗

Php 不使用多对多关系有什么好处吗,php,sql,database,many-to-many,relational-database,Php,Sql,Database,Many To Many,Relational Database,我被要求根据给定的指令为作业创建一个小程序。 我得到了两个必须创建的表: 产品表,包含两个字段:id和name, 产品的类别表,包含两个字段:产品id和名称 据说产品可以有很多种类 我还收到了以下产品示例: 产品:耐克鞋,类别:运动鞋,类别:新款 产品:匡威鞋,类别:运动鞋,类别:新款 等等 为了完成任务,每个示例条目都有两个类别,最后我必须调用数据库以获取属于a类别但不属于b类别的产品 我首先想到的是多对多关系,在我看来,它仍然几乎是唯一的选择。但由于我不得不这样做,我用重复的分类方法,每个分

我被要求根据给定的指令为作业创建一个小程序。 我得到了两个必须创建的表:

产品
表,包含两个字段:
id
name

产品的
类别
表,包含两个字段:
产品id
名称

据说产品可以有很多种类

我还收到了以下产品示例:

  • 产品:耐克鞋,类别:运动鞋,类别:新款
  • 产品:匡威鞋,类别:运动鞋,类别:新款
    等等
  • 为了完成任务,每个示例条目都有两个类别,最后我必须调用数据库以获取属于
    a
    类别但不属于
    b
    类别的产品

    我首先想到的是多对多关系,在我看来,它仍然几乎是唯一的选择。但由于我不得不这样做,我用重复的分类方法,每个分类只能分配给一个产品

    最后,我必须给出他们给我的方法的优缺点,并提出备选方案


    问题是:有没有真正的专业人士可以像这样设置数据库?我认为查询少量数据可能会快一点,但我不确定这是否有利于我们得到的缺点。

    我想不出任何不定义关系的“优点”。如果关系是
    产品具有一对多类别
    ,那么它是一个多对多关系,我们尝试以任何其他方式实现它都是愚蠢的。否则,我们无法保证唯一性、强制外键关系或创建访问数据的有效方法。

    如果一个产品可以有许多类别,而一个类别可以有许多产品,那么它确实是一个M:M关系。出于有用的建模目的,您可以使用映射产品和类别的表将其分解为两个1:M关系together@CaiusJard我发布的第一个产品和第二个产品都属于名为
    New
    的类别。哦,它们都属于
    New
    运动鞋
    运动鞋
    的类别。是的,对不起,我在“类别:运动鞋”和“类别:运动鞋”上停了下来,发现它们属于不同的类别。很少有什么好的理由这样做(基本上你是说你计划在每一行上都有一点CSV,列出一个产品可以包含的所有类别)。一开始它可能会让事情变得更简单,但很快就会让你感到痛苦。好吧,我不打算像你提到的那样将这个应用程序扩展到很多领域。我相信这些都是正确的。这是我面试时必须做的一件小事。我只是想知道不使用多对多有什么好处。但你似乎同意我的看法,没有。。。谢谢你的详细回答!