Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Mysql数据库设计问题_Mysql_Database - Fatal编程技术网

Mysql数据库设计问题

Mysql数据库设计问题,mysql,database,Mysql,Database,我知道我做错了,所以我希望这里有人能帮忙。这有点复杂,所以我会尽量解释清楚 我有一个带有id和标题的产品表。一个产品可以有许多证书,一个证书可以有许多产品。到目前为止,这些是我的表格: 产品 证书 产品证书 问题出在这里。我还需要能够一起提供产品。假设我有这些产品: 毛巾 俱乐部 帽子 球 在一张证书上,我提供带球杆的毛巾。在另一张证书上,我提供带帽子的毛巾,而在另一张证书上,我提供带球的帽子。更复杂的是,客户可以选择每个证书。因此,一个证书可以有多个产品。例如,客户可以在证书A上选择球和帽子或

我知道我做错了,所以我希望这里有人能帮忙。这有点复杂,所以我会尽量解释清楚

我有一个带有id和标题的产品表。一个产品可以有许多证书,一个证书可以有许多产品。到目前为止,这些是我的表格:

产品 证书 产品证书

问题出在这里。我还需要能够一起提供产品。假设我有这些产品:

毛巾 俱乐部 帽子 球

在一张证书上,我提供带球杆的毛巾。在另一张证书上,我提供带帽子的毛巾,而在另一张证书上,我提供带球的帽子。更复杂的是,客户可以选择每个证书。因此,一个证书可以有多个产品。例如,客户可以在证书A上选择球和帽子或毛巾和球杆

我尝试创建一个名为product_x_product的表,字段是a_id、b_id、certificate_id,但是我在尝试显示随产品提供的产品时遇到了各种各样的问题

任何帮助都将不胜感激


谢谢

我想你需要的桌子大部分都有了。在*Product_x_Certificate*中,您可以有多个证书ID和多个产品ID,这意味着您可以进行如下设置:

Product_x_Certificate table
CertificateID - ProductID
45                  4
45                  7
46                  8
46                  9
47                  10
这样,每个证书都有一个或多个产品满足您的第一个要求。对于具有多组产品的同一证书,为什么不创建一个新的证书ID?然后,如果需要从概念上对它们进行分组,则可以创建CertificateGroup和Certificate_x_CertificateGroup表,以便:

CertificateGroup table
CertificateGroupID     Name
1                       Hitting things

Certificate_x_CertificateGroup table
CertificateGroupID     CertificateID
1                         46
1                         47
这有用吗?

试试这样的方法

产品组组标识,产品标识引用产品产品标识 组证书组id,证书id引用证书证书证书id


您不能真正删除所有冗余

听起来您的层次结构应该是:

证书有一个或多个选项。 一个选项有一个或多个产品。 为此,以下模式是一个良好的开端:

certificates:
    certificateId   primary key
options:
    optionId        primary key
products:
    productId       primary key
    productName
optionProducts:
    optionId        references options(optionId)
    productId       references products(productId)
certificateOptions:
    certificateId   references certificates(certificateId)
    optionId        references options(optionId)
certificateOptions表使您能够在单个证书上拥有任意数量的选项


optionProducts表允许给定选项使用任意数量的产品。

我不确定是否完全理解问题描述,因为我不知道为什么不能为不同的选项创建新证书。但是,您似乎有三个不同的对象,它们彼此任意关联,因此创建一个链接所有三个对象的表似乎很方便。因此,我建议的表格是:

产品 证书 选择 产品x证书x选择
因此,在上一个表中,您可以将给定的产品添加到特定的证书/选项组合中。由于证书/选项组合定义了一个唯一的对象,您还可以创建一个证书和选项引用表,该表将包含所有这些对象,然后您可以创建关系表product x。。。这会将产品分配给组合。

从我迄今为止收到的答案来看,我忘了提到我只有一定数量的证书,因此我的证书表实际上是一个查找表。基本上,我们的客户有能力在他们的证书上构建或选择他们想要的内容。我提出了一个与您非常接近的解决方案,因此我认为您的回答让我思考了这个问题。基本上,我将把product_x_product表的名称更改为product_group。它将有4个字段:prod_group_idprimary、cert_id、group_num、product_idunique。我不需要单独的组表,我只需要为与某个证书关联的组中的不同产品创建任意组号。谢谢你的帮助。