# 数据库表结构说明 ## 连接信息验证 数据库连接信息已验证有效: - 主机: 129.211.213.226 - 端口: 9527 - 用户名: root 密码:aiotAiot123! - 数据库: niumall ## 表结构详情 ### 1. users 表(用户表) ```sql CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `openid` varchar(64) NOT NULL UNIQUE, `nickname` varchar(50) NOT NULL, `avatar` varchar(255), `gender` enum('male','female','other'), `birthday` datetime, `phone` varchar(20) UNIQUE, `email` varchar(100) UNIQUE, `uuid` varchar(36) UNIQUE, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); ``` ### 2. orders 表(订单表) ```sql CREATE TABLE `orders` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `order_no` varchar(32) NOT NULL UNIQUE, `user_id` bigint(20) NOT NULL, `supplier_id` bigint(20) NOT NULL, `cattle_type` varchar(50) NOT NULL, `cattle_breed` varchar(50) NOT NULL, `cattle_count` int(11) NOT NULL, `expected_weight` decimal(10,2) NOT NULL, `actual_weight` decimal(10,2), `unit_price` decimal(10,2) NOT NULL, `total_amount` decimal(15,2) NOT NULL, `paid_amount` decimal(15,2) NOT NULL DEFAULT '0.00', `remaining_amount` decimal(15,2) NOT NULL, `status` enum('pending','confirmed','preparing','shipping','delivered','accepted','completed','cancelled','refunded') NOT NULL DEFAULT 'pending', `delivery_address` varchar(200) NOT NULL, `expected_delivery_date` datetime NOT NULL, `actual_delivery_date` datetime, `notes` text, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); ``` ### 3. payments 表(支付表) ```sql CREATE TABLE `payments` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `order_id` bigint(20) NOT NULL, `user_id` bigint(20) NOT NULL, `amount` decimal(15,2) NOT NULL, `paid_amount` decimal(15,2), `payment_type` enum('wechat','alipay','bank') NOT NULL, `payment_method` enum('mini_program','app','web') NOT NULL, `payment_no` varchar(50) NOT NULL UNIQUE, `third_party_id` varchar(100), `status` enum('pending','paid','failed','refunded') DEFAULT 'pending', `paid_time` datetime, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); ``` ### 4. transports 表(运输表) ```sql CREATE TABLE `transports` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `order_id` bigint(20) NOT NULL, `driver_id` bigint(20) NOT NULL, `vehicle_id` bigint(20) NOT NULL, `start_location` varchar(255) NOT NULL, `end_location` varchar(255) NOT NULL, `scheduled_start_time` datetime NOT NULL, `actual_start_time` datetime, `scheduled_end_time` datetime NOT NULL, `actual_end_time` datetime, `status` enum('scheduled','in_transit','completed','cancelled') DEFAULT 'scheduled', `estimated_arrival_time` datetime, `cattle_count` int(11) NOT NULL, `special_requirements` text, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_order_id` (`order_id`), KEY `idx_driver_id` (`driver_id`), KEY `idx_vehicle_id` (`vehicle_id`) ); ``` ### 5. suppliers 表(供应商表) ```sql CREATE TABLE `suppliers` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `code` varchar(20) NOT NULL UNIQUE, `contact` varchar(50) NOT NULL, `phone` varchar(20) NOT NULL UNIQUE, `address` varchar(200) NOT NULL, `business_license` varchar(255), `qualification_level` varchar(10) NOT NULL, `certifications` json, `cattle_types` json, `capacity` int(11), `rating` decimal(3,2), `cooperation_start_date` datetime, `status` enum('active','inactive','suspended') DEFAULT 'active', `region` varchar(20) NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); ``` ### 6. vehicles 表(车辆表) ```sql CREATE TABLE `vehicles` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `license_plate` varchar(20) NOT NULL UNIQUE, `vehicle_type` varchar(50) NOT NULL, `capacity` int(11) NOT NULL, `driver_id` bigint(20) NOT NULL, `status` enum('available','in_use','maintenance','retired') DEFAULT 'available', `last_maintenance_date` datetime, `next_maintenance_date` datetime, `insurance_expiry_date` datetime, `registration_expiry_date` datetime, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); ``` ### 7. admins 表(管理员用户表) ```sql CREATE TABLE `admins` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL UNIQUE, `password_hash` varchar(255) NOT NULL, `phone` varchar(20) NOT NULL UNIQUE, `email` varchar(100), `user_type` enum('client','supplier','driver','staff','admin') NOT NULL, `status` enum('active','inactive','locked') DEFAULT 'active', `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); ``` ## 表索引信息 ### users 表索引 - PRIMARY: 主键索引 (id) - openid: 唯一索引 - phone: 唯一索引 - email: 唯一索引 - uuid: 唯一索引 ### orders 表索引 - PRIMARY: 主键索引 (id) - order_no: 唯一索引 - orders_order_no: 唯一索引 - orders_user_id: 普通索引 - orders_supplier_id: 普通索引 - orders_status: 普通索引 - orders_created_at: 普通索引 ### payments 表索引 - PRIMARY: 主键索引 (id) - payment_no: 唯一索引 ### suppliers 表索引 - PRIMARY: 主键索引 (id) - code: 唯一索引 - phone: 唯一索引 ### transports 表索引 - PRIMARY: 主键索引 (id) - idx_order_id: 普通索引 - idx_driver_id: 普通索引 - idx_vehicle_id: 普通索引 ### vehicles 表索引 - PRIMARY: 主键索引 (id) - license_plate: 唯一索引 ### admins 表索引 - PRIMARY: 主键索引 (id) - username: 唯一索引 - phone: 唯一索引 ## 表关系说明 1. `users` 表与 `orders` 表通过 `user_id` 字段关联 2. `suppliers` 表与 `orders` 表通过 `supplier_id` 字段关联 3. `orders` 表与 `payments` 表通过 `order_id` 字段关联 4. `users` 表与 `payments` 表通过 `user_id` 字段关联 5. `orders` 表与 `transports` 表通过 `order_id` 字段关联 6. `users` 表与 `transports` 表通过 `driver_id` 字段关联 7. `vehicles` 表与 `transports` 表通过 `vehicle_id` 字段关联 8. `users` 表与 `vehicles` 表通过 `driver_id` 字段关联 ## 数据示例 ### orders 表数据示例 ```json [ { "id": 1, "order_no": "ORD20240520001", "user_id": 2, "user_name": "采购商", "supplier_id": 3, "supplier_name": "供应商", "trader_id": null, "trader_name": null, "cattle_breed": "西门塔尔牛", "cattle_count": 10, "expected_weight": "5000.00", "actual_weight": null, "unit_price": "35.00", "total_amount": "175000.00", "paid_amount": "50000.00", "remaining_amount": "125000.00", "status": "pending", "delivery_address": "北京市朝阳区某某路123号", "expected_delivery_date": "2024-06-01T00:00:00.000Z", "actual_delivery_date": null, "notes": "请按时交货,质量要保证", "created_at": "2025-09-18T15:04:29.000Z", "updated_at": "2025-09-18T15:04:29.000Z", "deleted_at": null } ] ``` ### suppliers 表数据示例 ```json { "id": 3, "name": "内蒙古草原牧业有限公司", "code": "NM001", "contact": "张牧", "phone": "13800000001", "address": "内蒙古自治区呼和浩特市草原牧场1号", "business_license": "", "qualification_level": "A", "certifications": "[]", "cattle_types": "[\"西门塔尔牛\",\"夏洛莱牛\"]", "capacity": 1000, "rating": "0.00", "cooperation_start_date": "2025-09-18T15:25:05.000Z", "status": "active", "region": "north", "created_at": "2025-09-18T15:25:05.000Z", "updated_at": "2025-09-18T15:25:05.000Z", "deleted_at": null } ``` ### admins 表数据示例 ```json { "id": 1, "username": "admin", "password_hash": "$2a$10$yQ2odJuDRDjPwiyT6v/NuO/V0wjTaUx9DlDmHqXwa.hMQ9km0cWPe", "phone": "13800138001", "email": "admin@niumall.com", "user_type": "admin", "status": "active", "created_at": "2025-09-18T15:04:28.000Z", "updated_at": "2025-09-18T15:04:28.000Z", "deleted_at": null } ``` ## 使用建议 1. **数据初始化**:当前数据库中已有一些基础数据,包括5个供应商、3个管理员用户和2个订单。在开发过程中可以直接使用这些数据进行测试。 2. **权限管理**:admins 表中包含了不同角色的用户(admin、client、supplier),可以通过 user_type 字段进行权限控制。 3. **订单状态管理**:orders 表中的 status 字段包含了完整的订单状态流程,从 pending(待确认)到 completed(已完成)或 cancelled(已取消)。 4. **索引优化**:已为 `transports` 表添加了 `order_id`、`driver_id`、`vehicle_id` 等字段的索引以提高查询性能。建议继续为经常查询的字段添加索引,如 `orders.status`、`orders.created_at` 等。 5. **字段命名统一**:已完成统一使用下划线命名法,所有字段均采用下划线命名规范,保持了命名一致性。 6. **数据完整性**:可以添加外键约束来保证数据完整性,例如在 `orders` 表中添加外键约束关联 `users` 表和 `suppliers` 表。 7. **扩展性考虑**:已为所有表添加了软删除字段 `deleted_at` 以支持数据恢复功能。 8. **字段类型优化**:部分字段可以考虑使用更合适的类型,例如 `orders.status` 可以使用 TINYINT 类型配合枚举值映射来节省存储空间。