首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql数据库中存储同级分隔列表

在sql数据库中存储同级分隔列表
EN

Stack Overflow用户
提问于 2016-01-02 06:07:55
回答 1查看 46关注 0票数 0

我试图在关系数据库中建立一个“零售商店”模型。一家商店

  1. 唯一的Id
  2. 所有者Id
  3. 它可能有多个插座
  4. 一家商店的所有门店都将拥有相同的店主。
  5. 一家商店的所有销售点可能有也可能没有相同的产品。在同一家零售店的另一家商店,可能有一些产品在同一家零售店的另一家分店里买不到。

我的桌子

代码语言:javascript
复制
Products
  productId*
  productPrice
  fooAndBars

Store
  outletId*
  ownerId
  fooAndBars

productStoreJoin
  productId        \__Primary key
  ownerId          /

我的问题是:

可能有一些产品可以在一个销售点,但可能不是在另一个。要获得一个出口的所有产品,我将查询连接表。但我会得到所有的产品,即使它不能在那个插座,因为我将查询与ownerId。

我能想出的解决办法是:

  1. 在联接表中使用outletId而不是ownerId。但是,一个分店大约有1000个产品,一个商店可能有大约100个分店,这相当于一个商店的联接表中的10^5行!在联接表中使用ownerId,从而将其减少到1000行!
  2. 在联接表" outletIds“中添加另一列,这将是一个以逗号分隔的outletIds列表,其中包含有该产品的插座列表。所以看起来会是这样-
代码语言:javascript
复制
productId ownerId        outletIds
代码语言:javascript
复制
   56      2      [1001, 1005, 1008, 1009]

   57      2      [1001, 1005, 1008] 

..。

解决这个问题的正确方法应该是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-02 06:38:01

如果您需要知道哪些产品可以在哪个分店中使用,您应该有一个连接表,该表可以将产品映射到出口。这个表应该有很多行,一个存储区有10^5行就可以了。对于使用整数值的联接查询,MySQL非常快速。按照您的命名约定,我将join表重命名为productOutletJoin

对于像“哪些产品在1008分店?”这样简单的查询来说,您的第二种方法将是一场噩梦。想象一下尝试使用该架构插入、更新或删除数据。存储以逗号分隔的ids列表绝不是一个好主意。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34563158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档