一、先画“业务泳道图”——把字段归到 5 大主题域
1. 
订单域(OMS)
主键:oms_order_id
字段:平台、站点、店铺、计划数量、申报总价、目的国、省州、城市、邮编、地址、税号、收货人、境内主体 …
2. 
仓库域(WMS)
主键:wms_shipment_id
字段:建仓单号、建仓时间、打包时间、出库时间、提货仓库、实发数量、箱数、纸箱规格、总实重 …
3. 
物流域(TMS / T6)
主键:tms_delivery_id
字段:FBA 批次号(系统单号)、物流商、渠道、货代渠道、出口城市、船期、预计妥投、实际妥投、签收时效 …
4. 
费用域(COST)
主键:cost_id
字段:计费重、报价、燃油费率/费、报关费、清关费、其他费用、运费总金额、降本金额 …
5. 
基础编码域(MASTER)
国家、省州、城市、物流渠道、物流商、仓库、平台、站点 … 全部做成维表,避免冗余。
二、再定“关联关系”——一张事实表 + 多张维表 最常用、最省存储的做法是:
“wms_order_delivery” 作为事实表(或叫发货单事实表),
其余主题域表通过 1:1 或 1:N 挂在这条事实表上。
逻辑主键:
wms_order_delivery.delivery_id(自增 PK)
唯一业务键:
wms_order_delivery.fba_batch_no(FBA批次号,UK)
其余表均用“业务键”做外键,而非自增 ID,这样即使 OMS/WMS/T6 三个系统异构,也能靠“FBA批次号 / 建仓单号 / 系统单号”对齐。
三、字段类型映射——截图→MySQL 快速对照 截图里的类型 → MySQL 建议 文本型(编码) → varchar(64) + utf8mb4
文本型(多行) → varchar(500)
下拉选择型 → tinyint/smallint 存编码,关联维表
布尔型 → boolean
日期型 → date
数值型(保留2位) → decimal(12,2)
数值型(整数) → int
百分比 → decimal(5,2) -- 存 5.30 表示 5.3%
四、最终 DDL(可直接执行) 下面给出“最小可用”的 7 张表,其余维表可按需再补。
已兼顾:
 
所有业务字段无遗漏
 
外键级联更新 / 限制删除
 
常用索引(业务键 + 时间)
 
注释中文,方便 BI 工具直接读取
sql
-- 1. 发货单事实表(核心)
CREATE TABLE wms_order_delivery (
    delivery_id            BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
    fba_batch_no           VARCHAR(64)  NOT NULL UNIQUE COMMENT '物流核心唯一标识',
    oms_order_code         VARCHAR(64)  COMMENT 'OMS系统单号',
    wms_build_code         VARCHAR(64)  COMMENT '建仓单号',
    build_date             DATE         COMMENT '建仓时间',
    pack_date              DATE         COMMENT '打包时间',
    order_date             DATE         COMMENT '下单时间',
    pickup_date            DATE         COMMENT '取货日期(出库)',
    ship_date              DATE         COMMENT '船期(离岸)',
    eta_delivery_date      DATE         COMMENT '预计妥投时间',
    act_delivery_date      DATE         COMMENT '实际妥投时间',
    delivery_age           SMALLINT     GENERATED ALWAYS AS (DATEDIFF(act_delivery_date, pickup_date)) STORED COMMENT '签收时效(天)',
    
    platform               TINYINT      COMMENT '电商平台编码,关联 dim_platform',
    site                   TINYINT      COMMENT '亚马逊站点编码',
    shop_name              VARCHAR(100) COMMENT '店铺名称',
    plan_qty               INT          COMMENT '计划数量',
    act_qty                INT          COMMENT '实发数量',
    carton_spec            VARCHAR(200) COMMENT '纸箱规格',
    carton_qty             INT          COMMENT '箱数',
    declare_value          DECIMAL(12,2) COMMENT '申报总价(元)',
    weight_gross           DECIMAL(10,2) COMMENT '总实重(KG)',
    weight_volume          DECIMAL(10,2) COMMENT '材积重(KG)',
    weight_charge          DECIMAL(10,2) COMMENT '计费重(KG)',
    
    logistics_mode         TINYINT      COMMENT '运输方式:1海运 2空运 3快递',
    need_customs           BOOLEAN      DEFAULT TRUE COMMENT '是否报关',
    supplier_id            SMALLINT     COMMENT '物流商编码,关联 dim_supplier',
    channel_id             SMALLINT     COMMENT '物流渠道编码',
    agent_channel          VARCHAR(100) COMMENT '货代渠道拼接串',
    country_code           CHAR(2)      COMMENT '目的国二字码',
    province               VARCHAR(60)  COMMENT '省州',
    city                   VARCHAR(60)  COMMENT '城市',
    postcode               VARCHAR(20)  COMMENT '邮编',
    region                 TINYINT      COMMENT '目的区域',
    address                VARCHAR(500) COMMENT 'FBA仓库地址',
    tax_no                 VARCHAR(60)  COMMENT '境外税号',
    consignee              VARCHAR(100) COMMENT '境外收货人',
    export_city            VARCHAR(60)  COMMENT '出口城市',
    domestic_company       VARCHAR(100) COMMENT '境内发货主体',
    
    INDEX idx_fba_batch (fba_batch_no),
    INDEX idx_pickup (pickup_date),
    INDEX idx_delivery (act_delivery_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发货单事实表';

-- 2. 费用表(1:1 挂事实表)
CREATE TABLE wms_order_cost (
    cost_id          BIGINT AUTO_INCREMENT PRIMARY KEY,
    delivery_id      BIGINT NOT NULL,
    unit_price       DECIMAL(10,2) COMMENT '报价(元/KG)',
    fuel_rate        DECIMAL(5,2)  COMMENT '燃油费率%',
    fuel_fee         DECIMAL(10,2) COMMENT '燃油费',
    customs_fee      DECIMAL(10,2) COMMENT '报关费',
    clearance_fee    DECIMAL(10,2) COMMENT '清关费',
    other_fee        DECIMAL(10,2) COMMENT '其他杂费',
    freight_total    DECIMAL(12,2) COMMENT '运费总金额',
    save_amount      DECIMAL(10,2) COMMENT '降本金额',
    UNIQUE KEY uk_deli (delivery_id),
    CONSTRAINT fk_cost_delivery FOREIGN KEY (delivery_id) REFERENCES wms_order_delivery(delivery_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='费用明细表';

-- 3. 物流跟踪事件表(1:N)
CREATE TABLE tms_tracking (
    track_id      BIGINT AUTO_INCREMENT PRIMARY KEY,
    delivery_id   BIGINT NOT NULL,
    track_code    VARCHAR(64) COMMENT '转单号/跟踪号',
    event_time    DATETIME    COMMENT '事件时间',
    event_node    VARCHAR(100) COMMENT '节点描述',
    INDEX idx_delivery (delivery_id),
    CONSTRAINT fk_track_delivery FOREIGN KEY (delivery_id) REFERENCES wms_order_delivery(delivery_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流跟踪事件';

-- 4. 维表示例:物流商
CREATE TABLE dim_supplier (
    supplier_id   SMALLINT AUTO_INCREMENT PRIMARY KEY,
    supplier_code VARCHAR(30) UNIQUE NOT NULL,
    supplier_name VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流商维表';

-- 5. 维表示例:物流渠道
CREATE TABLE dim_channel (
    channel_id    SMALLINT AUTO_INCREMENT PRIMARY KEY,
    channel_code  VARCHAR(30) UNIQUE NOT NULL,
    channel_name  VARCHAR(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流渠道维表';

-- 6. 维表示例:电商平台
CREATE TABLE dim_platform (
    platform_id   TINYINT AUTO_INCREMENT PRIMARY KEY,
    platform_name VARCHAR(30) UNIQUE NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='电商平台维表';

-- 7. 维表示例:国家
CREATE TABLE dim_country (
    country_code CHAR(2) PRIMARY KEY,
    country_name VARCHAR(60) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='国家维表';

五、后续可做的 3 件小事
1. 
定时脚本把 OMS、WMS、T6 的增量数据按“FBA批次号” 对齐后写入事实表;
2. 
用 MySQL 8.0 的列式存储引擎 HeatWave / 或直接同步到 ClickHouse 做签收时效、物流费分析;
3. 
在 wms_order_delivery 上再建分区(按 pickup_date 每月一分区),一年 1 亿行也能快速跑。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐