大家好,欢迎来到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