一、业务场景
TPC-H 模拟的是一个全球化的零售批发供应商系统,涵盖以下核心业务流程:
·零件供应:供应商向客户提供各种零件
·订单管理:客户下单购买零件
·物流配送:订单明细记录每个零件的配送状态
·财务结算:跟踪订单金额、折扣、税费等财务信息
·全球化运营:涉及多个国家和地区的业务
二、1. REGION (区域表)
业务含义:全球业务区域划分(如亚洲、欧洲、美洲等)
CREATE TABLE region ( r_regionkey INT NOT NULL, — 区域键(主键) r_name CHAR(25) NOT NULL, — 区域名称 r_comment VARCHAR(152), — 备注信息 PRIMARY KEY (r_regionkey));
三、2. NATION (国家表)
业务含义:国家信息,隶属于某个区域
CREATE TABLE nation ( n_nationkey INT NOT NULL, — 国家键(主键) n_name CHAR(25) NOT NULL, — 国家名称 n_regionkey INT NOT NULL, — 所属区域键(外键 -> region) n_comment VARCHAR(152), — 备注信息 PRIMARY KEY (n_nationkey), FOREIGN KEY (n_regionkey) REFERENCES region(r_regionkey));
四、3. CUSTOMER (客户表)
业务含义:客户基本信息,包括账户余额、市场细分等
CREATE TABLE customer ( c_custkey INT NOT NULL, — 客户键(主键) c_name VARCHAR(25) NOT NULL, — 客户名称 c_address VARCHAR(40) NOT NULL, — 客户地址 c_nationkey INT NOT NULL, — 所属国家键(外键 -> nation) c_phone CHAR(15) NOT NULL, — 联系电话 c_acctbal DECIMAL(15,2) NOT NULL,– 账户余额 c_mktsegment CHAR(10) NOT NULL, — 市场细分 c_comment VARCHAR(117) NOT NULL, — 备注信息 PRIMARY KEY (c_custkey), FOREIGN KEY (c_nationkey) REFERENCES nation(n_nationkey));
五、4. PART (零件表)
业务含义:产品零件信息,包括规格、品牌、价格等
CREATE TABLE part ( p_partkey INT NOT NULL, — 零件键(主键) p_name VARCHAR(55) NOT NULL, — 零件名称 p_mfgr CHAR(25) NOT NULL, — 制造商 p_brand CHAR(10) NOT NULL, — 品牌 p_type VARCHAR(25) NOT NULL, — 零件类型 p_size INT NOT NULL, — 尺寸 p_container CHAR(10) NOT NULL, — 容器类型 p_retailprice DECIMAL(15,2) NOT NULL,– 零售价格 p_comment VARCHAR(23) NOT NULL, — 备注信息 PRIMARY KEY (p_partkey));
六、5. SUPPLIER (供应商表)
业务含义:零件供应商信息
CREATE TABLE supplier ( s_suppkey INT NOT NULL, — 供应商键(主键) s_name CHAR(25) NOT NULL, — 供应商名称 s_address VARCHAR(40) NOT NULL, — 供应商地址 s_nationkey INT NOT NULL, — 所属国家键(外键 -> nation) s_phone CHAR(15) NOT NULL, — 联系电话 s_acctbal DECIMAL(15,2) NOT NULL,– 账户余额 s_comment VARCHAR(101) NOT NULL, — 备注信息 PRIMARY KEY (s_suppkey), FOREIGN KEY (s_nationkey) REFERENCES nation(n_nationkey));
七、6. PARTSUPP (零件供应关系表)
业务含义:零件与供应商的多对多关系,包括库存和成本信息
CREATE TABLE partsupp ( ps_partkey INT NOT NULL, — 零件键(外键 -> part) ps_suppkey INT NOT NULL, — 供应商键(外键 -> supplier) ps_availqty INT NOT NULL, — 可用数量 ps_supplycost DECIMAL(15,2) NOT NULL,– 供应成本 ps_comment VARCHAR(199) NOT NULL,– 备注信息 PRIMARY KEY (ps_partkey, ps_suppkey), FOREIGN KEY (ps_partkey) REFERENCES part(p_partkey), FOREIGN KEY (ps_suppkey) REFERENCES supplier(s_suppkey));
八、7. ORDERS (订单表)
业务含义:客户订单主表,记录订单基本信息
CREATE TABLE orders ( o_orderkey INT NOT NULL, — 订单键(主键) o_custkey INT NOT NULL, — 客户键(外键 -> customer) o_orderstatus CHAR(1) NOT NULL, — 订单状态 o_totalprice DECIMAL(15,2) NOT NULL, — 订单总价 o_orderdate DATE NOT NULL, — 订单日期 o_orderpriority CHAR(15) NOT NULL, — 订单优先级 o_clerk CHAR(15) NOT NULL, — 订单处理员 o_shippriority INT NOT NULL, — 配送优先级 o_comment VARCHAR(79) NOT NULL, — 备注信息 PRIMARY KEY (o_orderkey), FOREIGN KEY (o_custkey) REFERENCES customer(c_custkey));
九、8. LINEITEM (订单明细表)
业务含义:订单的明细行项,记录每个零件的配送信息,是数据量最大的事实表
CREATE TABLE lineitem ( l_orderkey INT NOT NULL, — 订单键(外键 -> orders) l_partkey INT NOT NULL, — 零件键(外键 -> part) l_suppkey INT NOT NULL, — 供应商键(外键 -> supplier) l_linenumber INT NOT NULL, — 行号 l_quantity DECIMAL(15,2) NOT NULL, — 数量 l_extendedprice DECIMAL(15,2) NOT NULL, — 扩展价格 l_discount DECIMAL(15,2) NOT NULL, — 折扣率 l_tax DECIMAL(15,2) NOT NULL, — 税率 l_returnflag CHAR(1) NOT NULL, — 退货标志 l_linestatus CHAR(1) NOT NULL, — 行状态 l_shipdate DATE NOT NULL, — 发货日期 l_commitdate DATE NOT NULL, — 承诺日期 l_receiptdate DATE NOT NULL, — 收货日期 l_shipinstruct CHAR(25) NOT NULL, — 配送说明 l_shipmode CHAR(10) NOT NULL, — 配送方式 l_comment VARCHAR(44) NOT NULL, — 备注信息 PRIMARY KEY (l_orderkey, l_linenumber), FOREIGN KEY (l_orderkey) REFERENCES orders(o_orderkey), FOREIGN KEY (l_partkey, l_suppkey) REFERENCES partsupp(ps_partkey, ps_suppkey));
十、参考资源
·TPC-H 规范
·TPC-H 数据生成工具 (dbgen)
·tpc-h_v2.18.0.pdf