在sql数据库中存储同质分隔列表
我试图在关系数据库中对“零售商店”进行建模。 一家商店在sql数据库中存储同质分隔列表,sql,database,database-design,relational-database,database-schema,Sql,Database,Database Design,Relational Database,Database Schema,我试图在关系数据库中对“零售商店”进行建模。 一家商店 唯一的Id 所有者Id 它可能有多个出口 一家商店的所有门店都有相同的店主 一家商店的所有门店都可能有相同的产品,也可能没有。在同一家零售店的另一家门店可能无法买到某个门店提供的某些产品 我的桌子 Products productId* productPrice fooAndBars Store outletId* ownerId fooAndBars productStoreJoin productId
Products
productId*
productPrice
fooAndBars
Store
outletId*
ownerId
fooAndBars
productStoreJoin
productId \__Primary key
ownerId /
我的问题是:
可能有一些产品在一个销售点可用,而在另一个销售点可能不可用。
要获取一个门店的所有产品,我将查询联接表。但我会得到所有的产品,即使它在该销售点不可用,因为我将查询ownerId
我能想到的解决方案是:
解决这个问题的正确方法应该是什么 肯定是。如果您需要知道哪些产品在哪些门店可用,那么您应该有一个将产品映射到门店的联接表。这个表应该有很多行,一个存储10^5行就可以了。MySQL对于使用整数值的连接查询非常快速。根据您的命名约定,我将联接表重命名为
productOutletJoin
对于像“outlet 1008中有哪些产品?”这样简单的查询,您的#2方法将是一场噩梦,想象一下尝试使用该模式插入、更新或删除数据。存储以逗号分隔的ID列表从来都不是一个好主意。肯定是1。如果您需要知道哪些产品在哪些门店可用,那么您应该有一个将产品映射到门店的联接表。这个表应该有很多行,一个存储10^5行就可以了。MySQL对于使用整数值的连接查询非常快速。根据您的命名约定,我将联接表重命名为productOutletJoin
对于像“outlet 1008中有哪些产品?”这样简单的查询,您的#2方法将是一场噩梦,想象一下尝试使用该模式插入、更新或删除数据。存储以逗号分隔的ID列表从来不是一个好主意
productId ownerId outletIds
56 2 [1001, 1005, 1008, 1009]
57 2 [1001, 1005, 1008]