3. 供应商报价数据模型

供应商报价数据模型是采购管理平台中所有报价分析、比价与趋势预测的基石。一个规范、完整的报价单数据结构,决定了系统能否高效地存储、检索与计算报价信息。本节将深入解析报价单的核心数据结构,并逐一拆解关键字段的业务含义与设计规范。

3.1 报价单数据结构总览

一份标准的供应商报价单,在数据库中通常以“主表 + 明细表”的范式进行设计。主表记录报价单的头部信息(如供应商、有效期、报价单号),明细表则记录具体的物料行项目。这种结构既能减少数据冗余,又能灵活支持一张报价单包含多个物料。

设计原则: 报价单数据模型应遵循“一单多料、一料一价、时效驱动”的核心原则。主表与明细表通过报价单ID(Quotation ID)进行关联。

3.1.1 报价单主表(Quotation Header)

字段名称 数据类型 业务含义 示例值
Quotation_ID VARCHAR(20) 报价单唯一编号(主键) QTN-2025-00123
Supplier_Code VARCHAR(10) 供应商编码(外键关联供应商主数据) SUP-0089
Quotation_Date DATE 报价单创建日期 2025-03-10
Valid_From DATE 报价有效期起始日 2025-03-10
Valid_To DATE 报价有效期截止日 2025-06-10
Currency VARCHAR(3) 币种(ISO 标准) CNY / USD
Payment_Terms VARCHAR(50) 付款条件(如:30天账期) Net 30
Status VARCHAR(20) 报价单状态(待审批/已批准/已过期) 已批准

3.1.2 报价单明细表(Quotation Line Item)

字段名称 数据类型 业务含义 示例值
Line_ID INT 行项目序号(主键) 1
Quotation_ID VARCHAR(20) 所属报价单ID(外键) QTN-2025-00123
Material_Code VARCHAR(15) 物料号(外键关联物料主数据) MAT-10089
Material_Name VARCHAR(100) 物料描述(冗余字段,提升查询效率) 工业级轴承 6205
Quantity DECIMAL(12,2) 报价数量(单位:个/千克/米) 500.00
Unit_Price DECIMAL(10,4) 单价(不含税,精确到4位小数) 12.5000
Tax_Rate DECIMAL(5,2) 税率(百分比) 13.00
Delivery_Date DATE 承诺交货日期 2025-04-15
Lead_Time INT 交货周期(天数) 30

3.2 关键字段深度解析

在众多字段中,有五个字段构成了报价趋势分析的核心维度,它们分别是:物料号、数量、单价、有效期和交货期。理解这些字段的语义与约束,是进行后续数据清洗与建模的前提。

3.2.1 物料号(Material Code)

物料号是识别物料的唯一标识。在数据模型中,它必须与物料主数据(Material Master)保持严格一致。趋势分析中,物料号是分组聚合的第一维度。如果物料号存在一物多码或一码多物的情况,将直接导致趋势曲线失真。

最佳实践: 在报价单明细表中,建议冗余存储物料名称和规格型号,避免每次分析都需要关联物料主表,从而提升查询性能。

3.2.2 数量(Quantity)与单价(Unit Price)

数量与单价共同决定了报价的总金额。在趋势分析中,单价是核心指标,但数量决定了报价的规模效应。采购方通常需要关注“阶梯报价”场景:同一物料在不同数量区间下,单价可能存在显著差异。

  • 数量阶梯: 例如:采购100个时单价为15元,采购500个时单价为12元。数据模型应支持同一物料在同一报价单中出现多条不同数量的行项目。
  • 单价精度: 建议保留4位小数,避免因四舍五入导致的总价偏差累积。
  • 单位一致性: 所有报价单中的物料单位必须统一(如:个、千克、米),否则无法直接比较单价。

3.2.3 有效期(Validity Period)

有效期由 Valid_From 和 Valid_To 两个字段共同定义。它是报价数据时效性的核心约束。在趋势分析中,只有处于有效期内的报价数据才应被纳入计算。

常见陷阱: 部分供应商会提供“长期有效”报价,但在数据模型中必须设定一个合理的截止日期(如一年),否则系统在自动过期清理时会出现异常。建议将 Valid_To 设为必填字段。

3.2.4 交货期(Delivery Date / Lead Time)

交货期反映了供应商的供货能力。在趋势分析中,交货期与单价往往呈现负相关:更短的交货期通常意味着更高的加急成本。数据模型应同时支持日期(Delivery_Date)和相对天数(Lead_Time),以适应不同的业务场景。

3.3 报价单数据模型关系图

下图展示了报价单主表与明细表之间的关联关系,以及它们与供应商主数据、物料主数据的外部依赖。

报价单数据模型关系图 报价单数据模型实体关系图(ERD) 供应商主数据 Supplier_Code (PK) Supplier_Name Contact_Info 报价单主表 Quotation_ID (PK) Supplier_Code (FK) Valid_From / Valid_To Status 报价单明细表 Line_ID (PK) Quotation_ID (FK) Material_Code (FK) Quantity / Unit_Price Delivery_Date 物料主数据 Material_Code (PK) Material_Name Unit / Category 1:N 1:N N:1 说明:主表与明细表通过 Quotation_ID 关联;Supplier_Code 和 Material_Code 作为外键引用主数据表。

3.4 数据模型设计示例(DDL)

以下为基于 PostgreSQL 语法的报价单数据表定义示例,展示了主键、外键约束及字段类型的最佳实践。

-- 报价单主表
CREATE TABLE quotation_header (
    quotation_id   VARCHAR(20) PRIMARY KEY,
    supplier_code  VARCHAR(10) NOT NULL,
    quotation_date DATE NOT NULL,
    valid_from     DATE NOT NULL,
    valid_to       DATE NOT NULL,
    currency       VARCHAR(3) NOT NULL DEFAULT 'CNY',
    payment_terms  VARCHAR(50),
    status         VARCHAR(20) NOT NULL DEFAULT '待审批',
    created_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_supplier
        FOREIGN KEY (supplier_code) REFERENCES supplier_master(supplier_code)
);

-- 报价单明细表
CREATE TABLE quotation_line_item (
    line_id        SERIAL PRIMARY KEY,
    quotation_id   VARCHAR(20) NOT NULL,
    material_code  VARCHAR(15) NOT NULL,
    material_name  VARCHAR(100),
    quantity       DECIMAL(12,2) NOT NULL CHECK (quantity > 0),
    unit_price     DECIMAL(10,4) NOT NULL CHECK (unit_price >= 0),
    tax_rate       DECIMAL(5,2) DEFAULT 13.00,
    delivery_date  DATE,
    lead_time      INT,
    CONSTRAINT fk_quotation
        FOREIGN KEY (quotation_id) REFERENCES quotation_header(quotation_id),
    CONSTRAINT fk_material
        FOREIGN KEY (material_code) REFERENCES material_master(material_code)
);

3.5 数据质量校验规则

为了确保报价趋势分析的准确性,在数据入库前必须执行以下校验规则:

  • 唯一性校验: 同一供应商在同一有效期内,对同一物料号不能存在两条单价不同的报价行(阶梯报价除外,需通过数量区间区分)。
  • 时效性校验: Valid_From 必须早于 Valid_To,且 Valid_To 不能早于当前日期(历史数据归档除外)。
  • 逻辑校验: 单价不能为负数;数量必须大于零;交货日期不能早于报价单创建日期。
  • 引用完整性: 所有外键(Supplier_Code、Material_Code)必须在对应的主数据表中存在。
数据治理提示: 建议在数据库层面建立 CHECK 约束和触发器,自动拦截不合规的报价数据。对于历史遗留的脏数据,应在 ETL 阶段进行清洗和标准化处理。

3.6 报价数据模型与趋势分析的映射

下图展示了从原始报价数据到趋势分析指标的转换路径,帮助理解数据模型如何支撑上层的分析应用。

报价数据到趋势分析的映射流程 从数据模型到趋势分析的映射流程 原始报价数据 主表 + 明细表 数据清洗与校验 去重 / 补全 / 标准化 分析宽表构建 物料+时间+价格 趋势分析 图表/报告 关键字段在趋势分析中的角色 • 物料号(Material_Code):趋势分析的分组维度,决定分析对象。 • 单价(Unit_Price):趋势分析的核心度量指标,反映价格波动。 • 有效期(Valid_From / Valid_To):时间窗口约束,确保数据时效性。

通过上述数据模型与映射流程,采购管理平台能够将分散的报价单转化为结构化的、可分析的数据资产,为后续的供应商报价趋势分析提供坚实的数据底座。