TMS跨境电商物流系统字段需求分析





一、先画“业务泳道图”——把字段归到 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 亿行也能快速跑。
更多推荐


所有评论(0)