数据库设计(商店+产品)

fli*_*p66 4 mysql database-design

我目前在我的数据库、商店和产品中有 2 个表。每个产品都有自己的ID 1-2000,每个商店都有自己的ID 1-200。

我关于数据库设计的问题是,我如何跟踪每个商店有哪些产品?

  • 例子

    • 商店 1 有产品 1、5、10、200
    • 商店 2 有产品 2、5、7、100
    • 商店 3 有产品 1、7、10、300
    • 等等...
  • 我是否应该在我的商店表中有一列将 id 存储为由诸如 {1;5;10;20} 之类的列分隔的字符串(在 1 字符串中可能有数千个条目)?

  • 我应该有另一个只有 [id|storeID|productID] 的表(表中可能有商店(x)产品)?

Phi*_*lᵀᴹ 10

您提供的第一个选项是“NoSQL”设计模式,并且不允许在普通 RDBMS 中轻松查询。

你的第二个选择是最合适的。有一个第三个表来跟踪哪些产品在哪家商店。可能称为“库存” - 如果您想跟踪每家商店的每件商品的数量,您可以为此添加一个计数。


mir*_*173 6

您的问题可以通过实体关系图(用 dia 创建)建模:

ER图.

有两个实体“product”和“store”,这些实体之间存在一个 mn 关系“stocks”。“product”具有唯一确定产品的属性“productId”。“store”具有唯一属性“storeId”,它唯一地确定了商店。

我添加了属性“quantity”、“storeAddress”和“productName”以使模型更复杂一些。这些属性不能从您的描述中获得,如果您希望设计严格遵循您的描述,您可以将其从图表和结果表中删除。nm-realtionship 意味着商店可以存放不同的产品,并且产品可以在不同的商店中存货。我们有以下问题描述:

  • 每家商店都有唯一的 ID 和地址
  • 每个产品都有一个唯一的 ID 和一个名称
  • 商店可以储存不同数量的不同产品

最后一句也可以这样表达

  • 一个产品可以在不同的商店以不同的数量储存

这样的图可以在关系模型中转换。每个实体都是一个表,其中属性是列。唯一标识符是主键。mn-relation 是一个表,其中主键是一个 (storeId,productId) 对。如果关系具有属性,则该属性是表中的一列。

所以我们有以下关系(表格)

store("storeId", storeAddress)
product("productId",productName)
stock("storeId","productId",quantity)
Run Code Online (Sandbox Code Playgroud)