首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库设计(商店+产品)

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

Database Administration用户
提问于 2012-08-03 00:07:55
回答 2查看 2.7K关注 0票数 4

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

我关于DB设计的问题是,如何跟踪每家商店都有哪些产品?

  • 示例
    • 一店有1,5,10,200种产品。
    • 商店2有产品2,5,7,100
    • 商店3有产品1,7,10,300。
    • 等等。

  • 我是否应该在存储表中有一个列,该列将id存储为字符串,由{1;5;10;20}等列分隔(可能在1字符串中包含数千个条目)?
  • 我应该再要一张只有id_的桌子吗?
EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-08-05 13:08:03

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

有两个实体“产品”和“商店”,在这些实体之间有一个m关系的“股票”。" product“有一个属性"productId”,它唯一地决定了产品。“存储”具有唯一的属性"storeId“,该属性决定了存储的惟一性。

我添加了属性"quanity“、"storeAddress”和"productName“,以使模型更加复杂。这些属性不能由您的描述派生,您可以从图表和结果表中删除它,如果您希望设计严格遵循您的描述。N-m关系是指一家商店可以储存不同的产品,一种产品可以在不同的商店中储存。我们有以下问题:

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

最后一句也可以这样表述。

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

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

因此,我们有以下关系(表)

代码语言:javascript
运行
复制
store("storeId", storeAddress)
product("productId",productName)
stock("storeId","productId",quantity)
票数 6
EN

Database Administration用户

发布于 2012-08-03 00:36:44

您提出的第一个选项是"NoSQL“设计模式&不允许在普通关系数据库管理系统中轻松查询。

你的第二个选择是最合适的。有第三个表,跟踪哪些产品在哪个商店。可能被称为“股票”--如果你想要跟踪每一家商店有多少商品,你可以在上面加一个计数。

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

https://dba.stackexchange.com/questions/21925

复制
相关文章

相似问题

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