Mysql 如何最好地实现三维SQL关系?
这个问题是关于MySQL中多对多关系的扩展。 我目前有3个表需要与第4个中间表链接: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个条
存储
,产品
,以及状态
我的中间表\u stores\u products\u states
,将其他三个表中的id
组合起来,以确定哪个产品
由哪个商店出售,哪个州出售
现在,据我所知,我需要在\u商店\产品\州
中为这三种可能的组合创建一个条目,对吗?这将导致在1-2列中出现数千个重复的值(尽管不是全部3列)
例如,如果Best Guy在所有50个州同时销售GI Bros和Darbie,那么仅这两种产品就有100个条目。如果这些产品由另一家商店出售,它们也会有100个条目
这是实现这种关系的正确方式吗
编辑:
整个设置基本上只是为了确定特定产品的可用性。用户将搜索产品,并收到在其所在州销售该产品的商店列表。第四个表格就是方法!
因此,如果我没有弄错,您的“\u stores\u products\u states”表甚至可以称为sale您不需要为产品、状态和商店的所有可能组合创建记录。您只需要为现有的组合创建一个记录,即某个州某个商店的产品可用性(可能附带本地价格和数量等内容)
您必须以某种方式存储此信息;一个3关系链接表,特别是存储为,将是一个非常标准的解决方案,具有良好的性能特征
我想知道的一件事是,为什么你们的商店与各州分开。我希望一个商店与一个州有关联。使用3关系链接表,您可以将同一商店与处于几个不同状态的产品相关联。这就是您的业务领域所假设的吗?如果需要组合产品标识、门店标识、状态标识的值来确定在哪个状态下在哪个门店销售了哪个产品,那么您就没有重复。如果两列的数据包含相同的数据,又有什么关系呢?你需要3条信息,这是你自己说的——这3条信息的组合永远不会重复。你离这里不远,但你可以在同一家商店里多次销售同一种产品,对吗?那案子呢?在这种情况下,您是否只是增加数量?这只是为了确定特定产品的可用性。本质上,用户将搜索一个产品,一个列表将显示哪些商店在其状态下销售该产品(想想在线商店,而不是本地建筑)。这意味着你要查询的表是一个销售分类账,但你关注的是产品的可用性。因此,如果您关注产品可用性(产品、门店组合),为什么不创建一个表product\u availability
,通过外键连接product
和store
?因为这不考虑状态。这家商店可以在多个州销售同一种产品,但事实并非如此。这只是为了确定特定产品的可用性,而不是记录实际销售情况。这是正确的。在我们的真实数据中,商店可以在多个州销售同一产品,因此不能只与一个州关联。