Files
niumalll/docs/数据库表结构说明.md

9.6 KiB
Raw Blame History

数据库表结构说明

连接信息验证

数据库连接信息已验证有效:

  • 主机: 129.211.213.226
  • 端口: 9527
  • 用户名: root 密码aiotAiot123!
  • 数据库: niumall

表结构详情

1. users 表(用户表)

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 表(订单表)

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 表(支付表)

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 表(运输表)

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 表(供应商表)

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 表(车辆表)

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 表(管理员用户表)

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 表数据示例

[
  {
    "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 表数据示例

{
  "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 表数据示例

{
  "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_iddriver_idvehicle_id 等字段的索引以提高查询性能。建议继续为经常查询的字段添加索引,如 orders.statusorders.created_at 等。

  5. 字段命名统一:已完成统一使用下划线命名法,所有字段均采用下划线命名规范,保持了命名一致性。

  6. 数据完整性:可以添加外键约束来保证数据完整性,例如在 orders 表中添加外键约束关联 users 表和 suppliers 表。

  7. 扩展性考虑:已为所有表添加了软删除字段 deleted_at 以支持数据恢复功能。

  8. 字段类型优化:部分字段可以考虑使用更合适的类型,例如 orders.status 可以使用 TINYINT 类型配合枚举值映射来节省存储空间。