概述
TPC-H(Transaction Processing Performance Council - H)是由 TPC 组织制定的决策支持基准测试标准,模拟了一个典型的订单管理系统的数据仓库环境。TPC-H 数据模型广泛应用于数据库性能测试、查询优化验证和商业智能场景。
业务场景
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));