mysql订单表如何设计?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: <p><span style="color:rgb(34,34,34); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; line-height:30.6px"><strong><span style="font-size:18px">mysql订单表如何设计?</span></strong></span></p> <p>

mysql订单表如何设计?

商品表和订单表 。

通过一个表来关联。

那删除了商品,相关联的订单表如何显示出这个已经删除的商品?


订单表需要冗余商品名、商品编号、价格等基本信息。


不能只保存一个商品主键,这个是订单表的基本原则,同时生成了订单的商品是不能删除的。


订单表中引用商品表主键,删除使用状态假删。

同时引入商品的状态,总之就是反范式设计,保证一次可以获得全部要的状态,不要进行多表jion。


订单:  分为以下几种
        订单凭证(接到客户的订单表),采购订单, 销售订单,委外订单

我的数据库 该怎样设计

1:  订单类型表: 分 订购,采购,销售,委外
       订单表: 
      订单详情表:

2: 订单凭证表 - 订单凭证表详情
       采购订单

采购订单详情表
       一次类推

他们之间可以相互切换,  就是   订单凭证 (产品产线做完以后),可以转换成 销售订单



在记录订单凭证那张表里面加个状态 是否完成 如果完成了就可以打了标记 然后记录到销售订单 

不需要订单类型表,在订单表中加个订单类型的字段来记录就是了,如果防止误输入错误的订单类型,在这个字段上加约束就行了。

两个表就够了。

订单表 用一个类型字段进行区分,需要转换时直接改订单类型。
订单详情表 订单的明细记录。


相互切换 也不要 对 同一个记录进行 改标志,而是应该 完成原单,新增新单

所有单据都用一套主从表:
一个主表,有单据类型字段
一个从表


要看业务需求的。
如果一个订单按流程走下去,不同的步骤被称为不同的名称,改标志就够了。
最多加上几个时间字段,用来记录转换类型的时间点。

要是内容没变化,同样的明细复制几份没有意义,反而平白增加了数据量。

订单凭证,采购订单,销售订单,委外订单各建一个表存储(主表), 必要时建各自对应的明细表.
各种订单的主表之间可通过各自的内码(InterID)关联.

买家购买商品后,产生一个订单,那么订单进行的每个步骤的数据如付款、付款时间,发货、发货时单,确认收货等信息应该如何设计,都放在订单表中吗?


每个步骤的数据如付款、付款时间,发货、发货时单,确认收货等信息应该如何设计,都放在订单表中吗?

订单表:订单编号、下单时间、提交人、订单类型、收货人信息、订单状态[待发货-已发货等]、订单审核人、订单金额、收货人ID[来至客户信息表]、
订单商品信息记录表:订单编号、商品ID、

其实你应该是有一个顺序生成不同的单据,并不是一个订单这么简单,
客户下好单可以叫一个基本订单、确认后,生成一个付款单、再后来就是发货单、最后收到钱了还有一个
收款单、这是最基本的几个单据!


一个订单需要包含以下信息:客户信息、商家信息、产品信息、订单自定义信息(订单状态、编号等)。数据库里面与之关联的有以下表:客户表、商家表、产品表、订单表
  
  所遇到的问题:
   一个订单不只包含一个产品,如果一个订单包含2个或者两个以上的产品时,如何解决?
  
  当前解决方案:
   另外建立一张关系表、一张历史记录表。将每个订单的产品信息存入关系表里面,在查询订单明细的时候,从关系表里读出该订单的产品信息。因为关系表的增长速度非常快,为了提高查询速度,将很久以前的数据移入历史记录表里面。


你可以将定单表中唯一标识定单的字段与产品定单表中唯一标识产品的字段,重新定义一个表,在此表中,将这两个字段作为联合主键就可以了
  你上面的解决方案,当运行到一定程度时, 历史记录表会很大.查询会很麻烦
  你可以在定单表中,增加这两个字段,并将订单状态设置成标志位,在业务逻辑中进行判断,那么此订单中,只要客有想买的商品,即可以成交.
  谢谢您的解答,我似乎明白您的意思了.但是需要查询订单详情的时候,是不是也从新定义的这个表里获取产品的ID ,然后再从产品表里获取资料呢? 这样是不是也算是定义了一个关系表? 如果有多个产品的话,怎么解决呢?这点我还是没有搞懂,请明示. 谢谢.
你用一个新表来定义新购的产品就可以了,完全可以使用定单信息这一个表就可以了.

首先,需要表产品订单库存出库这4个表,根据你的需求来说。

产品记录产品名称产品价格等等产品信息。
订单记录订单号订单创建人等等
库存记录产品的ID产品总量等等
出库记录产品的ID订单的ID产品数量打单员等等

这样可以通过查找出库记录的时候,根据订单的ID可以看到这个订单一共有什么产品。
其实我觉得如果你这里不涉及一个出库的需求,单纯需要知道每个订单的产品,应该有更加简洁的设计方案。



存在这样一个关系:商品,客户,订单。

每个客户对应多个订单
每个订单对应多个商品

请问如何设计订单表?

还有,所有客户的订单都存在一张表中,还是为每个客户都创建一个订单表?



商品:ID,名称,价格,。。。。
客户:ID,名称,。。。。。
订单主表:流水号,订单日期,客户ID。。。(一个订单一条)
订单辅表:流水号,主表流水号,商品ID。。。(同一主表的流水下对应多个商品 )


 典型的购物车案例,  用户在商城购买商品, 同一个商品可以购买多次。 最后形成一个订单。我的数据库是这样设计的:

     因为一个订单可以包含很多商品条目, 而一个商品也可以由很多订单订购。所以2者是多对多的关系。  另外还有需求,用户可以修改订单中商品的数量, 就是说,用户可以买10个或者更多个商品。

     表设计如下

     Order(订单表):
     ............ id, int
     ............ name,string


     Product(商品表)
     ............ id, int
     ............ name,int

    
     Ref_OP(订单商品关联表)
     ............ order_id, int
     ............ product_id, int
     ............ quantity, int   /**  一个订单同一个商品的数量 */
     
     请注意,最后的关联表 中有个 quantity , 我想和各位探讨的是, 这样的设计是否合理?


很不合理。
订单表管理的订单,商品表管理的是库存。他们没有关系的。

需要有订单表,订单明细表和商品表,其中商品表和订单明细没有关联,记入明细时需要复制全部商品信息。



很不合理。
订单表管理的订单,商品表管理的是库存。他们没有关系的。

需要有订单表,订单明细表和商品表,其中商品表和订单明细没有关联,记入明细时需要复制全部商品信息。



拿京东网来举个例子:

如果没有关联,就是说,我在查看订单时,在订单里看到的商品信息都是订单详细表自已存储的吗?

那商品性能,描述等很多信息全存一份在订单里,太可怕了吧。

不知道我的理解是否正确:-)

为什么要这样设计?



拿京东网来举个例子:

如果没有关联,就是说,我在查看订单时,在订单里看到的商品信息都是订单详细表自已存储的吗?

那商品性能,描述等很多信息全存一份在订单里,太可怕了吧。

不知道我的理解是否正确:-)

为什么要这样设计?


考虑一下两份定单的情形,假定它们是在不同时间作成的,在这段时间里同种商品的价格单位或者描述都是可以变化的,而定单上则应记录下作成时的产品信息。因此,两份定单上对同种商品的记录可以是不同的,所以不能使用商品表里的信息。

Ref_OP(订单商品关联表)

这个名称取得不好,其实就是 LineItem(销售项/订单项)。

考虑一下两份定单的情形,假定它们是在不同时间作成的,在这段时间里同种商品的价格单位或者描述都是可以变化的,而定单上则应记录下作成时的产品信息。因此,两份定单上对同种商品的记录可以是不同的,所以不能使用商品表里的信息。



有道理。商品的价格、描述等信息是动态变化的。

商品表信息,可以分成可变,不变的(比如序列号)。

ProductSpec 中可以只放不变信息,并暂存动态数据(如最新价格)。

预期动态变化的信息,应该拷贝到 LineItem 中。

lodge >> 其中商品表和订单明细没有关联,记入明细时需要复制全部商品信息。

二者可以(最好)有关联。

不变信息或辅助信息,可以不用复制,如产品说明、厂家等。

全部复制会造成信息冗余。




lodge >> 其中商品表和订单明细没有关联,记入明细时需要复制全部商品信息。

二者可以(最好)有关联。

不变信息或辅助信息,可以不用复制,如产品说明、厂家等。

全部复制会造成信息冗余。

每份定单上的信息都是定单作成时被记录下来的,每份定单都是独立存在的,它们之间没有相互参照的关系,即便是同种商品的信息不一致,也不会破坏数据的一致性,因此这只是重复而并非冗余。
减少重复数据个人认为意义不大,这么作只能缩小数据库的大小,由于存在多对多的复杂关系容易影响检索效率。

事实上我认为还要考虑一下客户退货、修改订货时的数量,或者订单中某一用户的优惠(包括大客户的优惠、某节假日促销的优惠等信息),当然也可以不放在同一张表内,不过那就需要关联一些表了,如取舍要设计者根据实际情况自行把握!

这些都和 Use Case 有关。

脱离了系统需求来讨论表设计,等于白讨论。

事实上我认为还要考虑一下客户退货、修改订货时的数量,或者订单中某一用户的优惠(包括大客户的优惠、某节假日促销的优惠等信息),当然也可以不放在同一张表内,不过那就需要关联一些表了,如取舍要设计者根据实际情况自行把握!

这样考虑才全面啊


我有个问题,就是我现在有一张订单关联表,和一张订单主表,还有一张商品表。
订单关联表:
           ID 自动增长 主键
           orderId 订单编号
           productId 商品编号
           price  价格
           number  数量
----------------------------
主表:orderId订单编号
     用户名、电话、地址...

商品表:id,name...

怎么才能做到一张订单对应多个商品呢,我买东西的时候,一张单子可能会有很多商品的。 插入数据库的时候如何实现,我现在脑子里感觉只能一张订单对应一个商品呀


买家购买商品后,产生一个订单,那么订单进行的每个步骤的数据如付款、付款时间,发货、发货时单,确认收货等信息应该如何设计,都放在订单表中吗?

看你其他表的关联,建议建立主子表,将付款金额等消息,放入子表中,将发货等信息,使用ID和其他表关联


每个步骤的数据如付款、付款时间,发货、发货时单,确认收货等信息应该如何设计,都放在订单表中吗?

订单表:订单编号、下单时间、提交人、订单类型、收货人信息、订单状态[待发货-已发货等]、订单审核人、订单金额、收货人ID[来至客户信息表]、
订单商品信息记录表:订单编号、商品ID、

其实你应该是有一个顺序生成不同的单据,并不是一个订单这么简单,
客户下好单可以叫一个基本订单、确认后,生成一个付款单、再后来就是发货单、最后收到钱了还有一个
收款单、这是最基本的几个单据!


请各位牛人指教,一个困扰我很久的订单表设计问题


旅游电商订单表设计问题问题描述:网站提供酒店,机票,旅游线路等等...多种产品的预定。用户可以同时预定多个产品,怎么把这么多不同类型的产品糅合到一个订单记录中也就是一个订单号。??????????????因为这些产品的每个订单属性都不一样。一个订单记录怎么去做这么多种订单的订单详情关联,,????????????例如:订单号是DK3453545,那这个订单号里用户是预定了机票,门票,酒店,以及旅游车的那这个订单记录中该怎么把这些订单详情关联到这个订单记录中,而且这些用户需要预定的产品是不固定的。??????????????我也想过把每个产品类型的订单记作为一个单独产品类型订单记录,那么就会存在很多个订单表,当系统需要查询当前用户的订单时,就需要把所有的类型订单表都遍历一遍。这样效率太慢。而且感觉很不好维护,?麻烦各位做过订单电商的牛人给点经验。



最满意答案



1、商品基础属性及库存(SKU)
2、订单以及订单详情(Order&OrderItems),OrderItems里面的record肯定与某个SKU关联上。同时你们的这种订单,一定包含个性化定制信息,一般都可以用一个字段将个性化信息保存起来(比如订酒店,可能包含日期、住几晚、单间还是标间、其他特殊要求等)
3、Shipment,订单只是与客户签订的一个意向合同,那么shipment就是你们如何去履约这个合同的载体。这种情况下,一类商品就可以设计成一种shipment,具体的履约方式、过程和状态,都可以放到这个模型里。

总结:订单是面向用户的模型,代表着一个销售或者销售意向合同。shipment是面向内部实际操作环节的模型,代表系统如何去跟踪和记录订单的每个不同类型的商品是如何履约的。






相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
安全 关系型数据库 MySQL
【MySQL】表的增删查改
【MySQL】表的增删查改
|
6月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
6月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
44 1
|
6月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
5月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
6月前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
156 3
|
5月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
61 1
|
6月前
|
存储 关系型数据库 MySQL
【MySQL】表的约束
【MySQL】表的约束
下一篇
DataWorks