Mysql 项目中的数据库设计问题?

Mysql 项目中的数据库设计问题?,mysql,sql,database,Mysql,Sql,Database,我正在为我的应用程序设计一个数据库。我想在多个表之间进行映射。现在的情况就像只有一个用户表。用户可以生成多个订单。所以我在想,我是否可以把json obejct oforder\u id放在order表的一列中。或者我可以在订单表中创建一个用户id列,并为同一用户重复用户id。那么,哪种方法更好呢 PS:标准的做法是什么?用户可以下多个订单。 基于此,您应该维护三个不同的表,如下所示: 用户(用户id,…) 订单(订单id,…) 用户订单(用户id,订单id,…) 只关注上表中的主键 存储逗

我正在为我的应用程序设计一个数据库。我想在多个表之间进行映射。现在的情况就像只有一个用户表。用户可以生成多个订单。所以我在想,我是否可以把json obejct oforder\u id放在order表的一列中。或者我可以在订单表中创建一个用户id列,并为同一用户重复用户id。那么,哪种方法更好呢

PS:标准的做法是什么?

用户可以下多个订单。

基于此,您应该维护三个不同的表,如下所示:

  • 用户
    (用户id,…)
  • 订单
    (订单id,…)
  • 用户订单
    (用户id,订单id,…)
只关注上表中的主键

存储逗号分隔的列表或json对象将恶化设计。这是强烈反对的

编辑:

正如@NevilleK所建议的,上述设计通常用于
多对多
关系。对于
一对多
关系,您可以在
订单
表中创建外键约束,其中
用户id
应参考
用户
表中的
用户id

但是您仍然可以对
一对多
关系采用上述设计,因为
多对多
也符合
一对多
的要求

用户可以下多个订单。

基于此,您应该维护三个不同的表,如下所示:

  • 用户
    (用户id,…)
  • 订单
    (订单id,…)
  • 用户订单
    (用户id,订单id,…)
只关注上表中的主键

存储逗号分隔的列表或json对象将恶化设计。这是强烈反对的

编辑:

正如@NevilleK所建议的,上述设计通常用于
多对多
关系。对于
一对多
关系,您可以在
订单
表中创建外键约束,其中
用户id
应参考
用户
表中的
用户id


但是您仍然可以对
一对多
关系采用上述设计,因为
多对多
也符合
一对多
的要求

您应该在订单表中有用户id,然后进行如下查询

select * from orders where user_id = *some_user_id*

您应该在订单表中有用户id,然后进行如下查询

select * from orders where user_id = *some_user_id*

用户可以下多个订单,而这些订单又可以有多个行项目。每个行项目可以有n个特定产品的数量。所以,当产品出现在图片中时,用户和产品之间就变成了多对多关系,因为用户可以为许多产品下订单,而产品可以由许多用户订购。因此,我的建议是—

  • 使用UserID创建用户表
  • 使用OrderID、UserID和LineItemID创建PurchaseOrder表
  • 使用OrderID、ProductID和LineItemID创建LineItem表
  • 使用ProductID创建SKU表

  • 用户可以下多个订单,而这些订单又可以有多个行项目。每个行项目可以有n个特定产品的数量。所以,当产品出现在图片中时,用户和产品之间就变成了多对多关系,因为用户可以为许多产品下订单,而产品可以由许多用户订购。因此,我的建议是—

  • 使用UserID创建用户表
  • 使用OrderID、UserID和LineItemID创建PurchaseOrder表
  • 使用OrderID、ProductID和LineItemID创建LineItem表
  • 使用ProductID创建SKU表

  • 最好的方法是为你的朋友准备不同的桌子

  • 用户表-承载用户信息的表
  • 交易表-将针对每个用户id设置订单id

  • 事务表将包含所有带有用户id的事务详细信息。如果创建JSON对象,您将如何将用户映射到事务。因此,在检索json信息时,无论如何都必须将其映射到用户表。我建议您使用上述方法,这将帮助您更轻松地维护和扩展应用程序。

    最好的方法是为您的应用程序设置不同的表

  • 用户表-承载用户信息的表
  • 交易表-将针对每个用户id设置订单id

  • 事务表将包含所有带有用户id的事务详细信息。如果创建JSON对象,您将如何将用户映射到事务。因此,在检索json信息时,无论如何都必须将其映射到用户表。我建议您使用上述方法,这将帮助您更轻松地维护和扩展应用程序。

    但通过这种方式,我在一列中为多行重复了user_id的值。这是一种好方法吗?这是关系SQL数据库的工作方式,并且以这种方式工作得最快…但是通过这种方式,我在一列中为多行重复了user_id的值。这是一种好方法吗?这就是关系SQL数据库应该以这种方式工作的方式,并且以这种方式工作得最快…通过这种方式,我创建了多个表。好处是什么?实际上我无法计算好处的数量。考虑一个简单的用例:假设您想显示每个用户的<代码>最小订单价格< /代码>。在建议的设计中,您将如何做到这一点?此设计通常用于多对多关系-一个用户可以下多个订单,一个订单可以有多个用户。我不相信这种情况-一个用户可以下很多订单,但一个订单只属于一个用户。这通常通过在订单上使用“userID”外键来建模。是的,