订单表设计思路

订单表设计思路订单表通常采用的结构是订单主表与订单明细表一对多关系结构 比如 在电商系统中 一个订单购买的多件不同的商品 设计订单表和订单明细表 1 订单表 记录订单编号 用户信息 订单状态 总金额等信息

大家好,欢迎来到IT知识分享网。

订单表通常采用的结构是订单主表与订单明细表一对多关系结构,比如:在电商系统中,一个订单购买的多件不同的商品,设计订单表和订单明细表:

(1)订单表:记录订单编号、用户信息、订单状态、总金额等信息。

(2)订单明细表:订单号、记录该订单每个商品的信息,包括:商品名称、单价、数量、总价等。

如果系统需求是一个订单只包括一种商品,此时无须记录订单明细,将购买商品的详细信息记录在订单表即可,设计字段包括:订单编号、用户信息、订单状态、总金额、商品名称、单价、数量、总价等。

1. 订单表与订单明细表的关系

在电商系统中,通常采用订单主表与订单明细表一对多的关系:

  • 订单表(Order):存储订单的总体信息,如订单编号、用户信息、订单状态、总金额等。
  • 订单明细表(Order Item):存储订单中每个商品的详细信息,如商品名称、单价、数量、总价等。

这种设计方式可以更好地管理订单和商品之间的关系,支持一个订单包含多个商品的情况。

2. 订单表(Order)的设计

2.1 基础信息

  • 订单ID(order_id):主键,唯一标识一个订单,通常使用自增ID或UUID。
  • 订单编号(order_number):对用户可见的订单编号,通常具有一定的规则,方便用户查询。
  • 用户ID(user_id):下单用户的唯一标识,关联用户表。
  • 订单状态(order_status):表示订单的当前状态,如待支付、已支付、已发货、已完成、已取消等。

2.2 价格信息

  • 订单总金额(total_amount):所有商品的总金额,未扣除优惠。
  • 优惠金额(discount_amount):订单享受的总优惠金额。
  • 应付金额(payable_amount):订单实际需要支付的金额,等于总金额减去优惠金额。

2.3 支付信息

  • 支付方式(payment_method):如微信支付、支付宝、信用卡等。
  • 支付状态(payment_status):未支付、已支付、退款中、已退款等。
  • 支付时间(payment_time):订单完成支付的时间。

2.4 物流信息

  • 收货人姓名(receiver_name):收货人的姓名。
  • 收货人电话(receiver_phone):收货人的联系电话。
  • 收货地址(receiver_address):详细的收货地址。
  • 物流公司(shipping_company):承运的物流公司名称。
  • 物流单号(tracking_number):物流公司的运单号。
  • 发货时间(shipping_time):订单发货的时间。
  • 收货时间(delivery_time):用户确认收货的时间。

2.5 时间信息

  • 创建时间(create_time):订单创建的时间。
  • 更新时间(update_time):订单信息最近一次更新的时间。

2.6 其他信息

  • 订单备注(order_note):用户下单时填写的备注信息。
  • 订单来源(order_source):订单的来源渠道,如APP、小程序、网页等。
  • 是否删除(is_deleted):逻辑删除标记,0表示未删除,1表示已删除。

3. 订单明细表(Order Item)的设计

3.1 基础信息

  • 订单明细ID(order_item_id):主键,唯一标识一条订单明细记录。
  • 订单ID(order_id):外键,关联到订单表的订单ID。
  • 商品ID(product_id):外键,关联到商品表的商品ID。
  • 商品名称(product_name):商品的名称,冗余字段,防止商品信息变化影响订单记录。
  • 商品图片(product_image):商品的主图URL,方便展示。

3.2 价格和数量

  • 商品单价(unit_price):商品的销售单价。
  • 购买数量(quantity):购买的商品数量。
  • 小计金额(subtotal_amount):商品单价乘以数量,等于该商品的总价。

3.3 服务信息(适用于服务类商品)

  • 服务类型名称(service_type_name):如果是服务类商品,记录服务的类型名称。
  • 服务项名称(service_item_name):具体的服务项名称。
  • 服务单价(service_unit_price):服务的单价。
  • 价格单位(price_unit):如次、小时、天等。
  • 购买数量(service_quantity):购买的服务数量。

3.4 其他信息

  • 售后状态(after_sale_status):该商品的售后状态,如未申请、退货中、已退货等。
  • 是否评价(is_commented):标记该商品是否已被用户评价。

4. 设计考虑

4.1 冗余存储

  • 商品信息冗余:在订单明细表中存储商品的名称、图片、单价等信息,防止商品信息修改后影响历史订单记录。
  • 用户信息冗余:在订单表中存储下单时的用户联系信息,防止用户修改联系方式后影响历史订单。

4.2 状态设计

  • 订单状态码:使用枚举或常量定义订单状态,方便维护和扩展。
  • 支付状态码:同样使用枚举或常量定义支付状态。

4.3 金额精度

  • 金额类型:建议使用 decimal(12, 2),可以精确存储金额,支持大多数场景。

这里decimal(12, 2)表示总共可以存储12位数字,其中2位用于小数部分,适合表示较大金额的场景。

4.4 扩展性

  • 优惠信息:预留字段或关联优惠券表,记录订单使用的优惠信息。
  • 多币种支持:如果有需要,添加币种字段,支持不同的货币类型。

4.5 性能优化

  • 索引设计:为经常查询的字段(如订单号、用户ID、订单状态)建立索引,提高查询性能。
  • 分库分表:对于大规模订单数据,可以考虑按照时间、用户ID等进行分库分表。

5. 示例表结构

5.1 订单表(order)

CREATE TABLE `order` ( `order_id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID', `order_number` varchar(32) NOT NULL COMMENT '订单编号', `user_id` bigint NOT NULL COMMENT '用户ID', `order_status` tinyint NOT NULL COMMENT '订单状态', `total_amount` decimal(12, 2) NOT NULL COMMENT '订单总金额', `discount_amount` decimal(12, 2) DEFAULT 0 COMMENT '优惠金额', `payable_amount` decimal(12, 2) NOT NULL COMMENT '应付金额', `payment_method` tinyint DEFAULT NULL COMMENT '支付方式', `payment_status` tinyint DEFAULT NULL COMMENT '支付状态', `payment_time` datetime DEFAULT NULL COMMENT '支付时间', `shipping_company` varchar(64) DEFAULT NULL COMMENT '物流公司', `tracking_number` varchar(64) DEFAULT NULL COMMENT '物流单号', `shipping_time` datetime DEFAULT NULL COMMENT '发货时间', `delivery_time` datetime DEFAULT NULL COMMENT '收货时间', `receiver_name` varchar(32) NOT NULL COMMENT '收货人姓名', `receiver_phone` varchar(20) NOT NULL COMMENT '收货人电话', `receiver_address` varchar(256) NOT NULL COMMENT '收货地址', `order_note` varchar(256) DEFAULT NULL COMMENT '订单备注', `order_source` tinyint DEFAULT NULL COMMENT '订单来源', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除', PRIMARY KEY (`order_id`), KEY `idx_user_id` (`user_id`), KEY `idx_order_number` (`order_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表'; 

5.2 订单明细表(order_item)

CREATE TABLE `order_item` ( `order_item_id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单明细ID', `order_id` bigint NOT NULL COMMENT '订单ID', `product_id` bigint NOT NULL COMMENT '商品ID', `product_name` varchar(128) NOT NULL COMMENT '商品名称', `product_image` varchar(256) DEFAULT NULL COMMENT '商品图片', `unit_price` decimal(12, 2) NOT NULL COMMENT '商品单价', `quantity` int NOT NULL COMMENT '购买数量', `subtotal_amount` decimal(12, 2) NOT NULL COMMENT '小计金额', `after_sale_status` tinyint DEFAULT NULL COMMENT '售后状态', PRIMARY KEY (`order_item_id`), KEY `idx_order_id` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表'; 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156713.html

(0)
上一篇 2025-02-10 17:26
下一篇 2025-02-10 17:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信