Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 如何最好地实现三维SQL关系?_Mysql_Sql_Database - Fatal编程技术网

Mysql 如何最好地实现三维SQL关系?

Mysql 如何最好地实现三维SQL关系?,mysql,sql,database,Mysql,Sql,Database,这个问题是关于MySQL中多对多关系的扩展。 我目前有3个表需要与第4个中间表链接: 存储,产品,以及状态 我的中间表\u stores\u products\u states,将其他三个表中的id组合起来,以确定哪个产品由哪个商店出售,哪个州出售 现在,据我所知,我需要在\u商店\产品\州中为这三种可能的组合创建一个条目,对吗?这将导致在1-2列中出现数千个重复的值(尽管不是全部3列) 例如,如果Best Guy在所有50个州同时销售GI Bros和Darbie,那么仅这两种产品就有100个条

这个问题是关于MySQL中多对多关系的扩展。

我目前有3个表需要与第4个中间表链接:

存储
产品
,以及
状态

我的中间表
\u stores\u products\u states
,将其他三个表中的
id
组合起来,以确定哪个
产品
由哪个
商店出售,哪个
州出售

现在,据我所知,我需要在
\u商店\产品\州
中为这三种可能的组合创建一个条目,对吗?这将导致在1-2列中出现数千个重复的值(尽管不是全部3列)

例如,如果Best Guy在所有50个州同时销售GI BrosDarbie,那么仅这两种产品就有100个条目。如果这些产品由另一家商店出售,它们也会有100个条目

这是实现这种关系的正确方式吗

编辑: 整个设置基本上只是为了确定特定产品的可用性。用户将搜索产品,并收到在其所在州销售该产品的商店列表。

第四个表格就是方法!
因此,如果我没有弄错,您的“\u stores\u products\u states”表甚至可以称为sale

您不需要为产品、状态和商店的所有可能组合创建记录。您只需要为现有的组合创建一个记录,即某个州某个商店的产品可用性(可能附带本地价格和数量等内容)

您必须以某种方式存储此信息;一个3关系链接表,特别是存储为,将是一个非常标准的解决方案,具有良好的性能特征


我想知道的一件事是,为什么你们的商店与各州分开。我希望一个商店与一个州有关联。使用3关系链接表,您可以将同一商店与处于几个不同状态的产品相关联。这就是您的业务领域所假设的吗?

如果需要组合
产品标识、门店标识、状态标识的值来确定在哪个状态下在哪个门店销售了哪个产品,那么您就没有重复。如果两列的数据包含相同的数据,又有什么关系呢?你需要3条信息,这是你自己说的——这3条信息的组合永远不会重复。你离这里不远,但你可以在同一家商店里多次销售同一种产品,对吗?那案子呢?在这种情况下,您是否只是增加数量?这只是为了确定特定产品的可用性。本质上,用户将搜索一个产品,一个列表将显示哪些商店在其状态下销售该产品(想想在线商店,而不是本地建筑)。这意味着你要查询的表是一个销售分类账,但你关注的是产品的可用性。因此,如果您关注产品可用性(产品、门店组合),为什么不创建一个表
product\u availability
,通过外键连接
product
store
?因为这不考虑状态。这家商店可以在多个州销售同一种产品,但事实并非如此。这只是为了确定特定产品的可用性,而不是记录实际销售情况。这是正确的。在我们的真实数据中,商店可以在多个州销售同一产品,因此不能只与一个州关联。