2、金融实体模型基础:实体类型、属性与关系图设计

金融实体模型是解析回放对比分析的数据基石。在金融业务中,实体(Entity)指代具有独立业务意义且可被唯一标识的对象,例如一家银行、一位客户或一只基金。本章将系统梳理金融实体的三大类型、核心属性体系以及实体关系图(ER图)的设计方法,为后续的SQL回放对比提供精确的数据结构支撑。

2.1 实体类型:机构、个人、产品

金融实体按业务角色可划分为三大类:机构(Institution)、个人(Individual)和产品(Product)。三者之间的交互构成了金融交易与风险管理的核心闭环。

实体类型 业务定义 典型示例 唯一标识(PK)
机构 依法设立、从事金融或非金融业务的组织 工商银行、中信证券、中国平安 机构代码(如统一社会信用代码)
个人 具有民事行为能力的自然人客户或从业人员 张三(零售客户)、李四(基金经理) 身份证号或客户ID
产品 金融机构发行或代销的可交易金融工具 余额宝、沪深300ETF、某信托计划 产品代码(如ISIN或内部编码)
实体类型划分原则:在回放对比场景中,机构、个人、产品必须严格区分,因为同一笔交易可能涉及多个实体类型(例如:个人通过机构购买产品)。SQL关联时,实体类型字段是过滤与分组的关键维度。

2.2 实体属性体系

每个实体类型都拥有一组核心属性,用于描述其身份、状态与业务特征。属性设计需兼顾唯一性、时效性和可追溯性。

2.2.1 机构实体属性

  • 基础属性:机构全称、机构简称、统一社会信用代码、注册地址、注册资本。
  • 分类属性:机构类型(银行/证券/保险/基金/其他)、监管机构、是否上市。
  • 状态属性:经营状态(正常/停业/注销)、成立日期、注销日期。
  • 关系属性:上级机构ID、所属集团ID、关联机构列表。

2.2.2 个人实体属性

  • 身份属性:姓名、证件类型、证件号码、国籍、出生日期。
  • 联系属性:手机号、电子邮箱、居住地址(加密存储)。
  • 职业属性:职业类别、任职机构、职务、从业资格编号。
  • 风险属性:客户风险等级、黑名单标识、反洗钱评级。

2.2.3 产品实体属性

  • 识别属性:产品代码、产品全称、产品简称、ISIN码。
  • 分类属性:产品类型(股票/债券/基金/理财/衍生品)、投资标的、风险等级。
  • 交易属性:发行机构ID、托管机构ID、成立日期、到期日期、面值、单位净值。
  • 状态属性:产品状态(存续/到期/清盘)、暂停交易标识。
属性设计要点:在SQL回放对比中,实体属性常作为WHERE过滤条件或GROUP BY分组依据。建议为高频过滤字段(如机构类型、产品风险等级)建立索引,以提升回放查询性能。

2.3 实体关系图(ER图)设计

实体关系图(ER图)用于描述机构、个人、产品之间的业务关联。在金融解析回放场景中,核心关系包括:持有(个人持有产品)、发行(机构发行产品)、任职(个人在机构任职)、交易(个人通过机构交易产品)。

以下ER图展示了三大实体之间的主要关系及关键属性:

金融实体关系图(ER图) 机构 机构代码 (PK) 机构名称 | 机构类型 个人 客户ID (PK) 姓名 | 证件号 | 风险等级 产品 产品代码 (PK) 产品名称 | 产品类型 发行 持有 任职 交易记录 交易ID | 交易时间 | 交易金额 | 交易方向 参与机构 交易对手 交易产品 图例说明 机构实体 个人实体 产品实体 交易记录(关联实体) 关系标签 直接关系(实线) 间接关系(虚线) 注:交易记录作为关联实体,同时连接机构、个人、产品,形成星型模型。
ER图设计要点:
  1. 主键(PK)设计:每个实体必须拥有业务含义的唯一主键(如机构代码、客户ID、产品代码),避免使用自增ID作为业务关联依据。
  2. 关系基数:机构与产品之间是“一对多”发行关系;个人与产品之间是“多对多”持有关系;交易记录是“多对一”关联到三个实体。
  3. 时间维度:所有关系表必须包含生效日期和失效日期,以支持回放对比中的“时间点快照”查询。

2.4 实体关系在SQL回放中的映射

在SQL回放对比分析中,实体关系图直接映射为数据库表结构。以下是一个简化的DDL示例,展示机构、个人、产品及交易记录表的定义:

-- 机构表
CREATE TABLE dim_institution (
    inst_code      VARCHAR(20)  PRIMARY KEY,          -- 机构代码
    inst_name      VARCHAR(100) NOT NULL,             -- 机构全称
    inst_type      VARCHAR(20)  NOT NULL,             -- 机构类型
    reg_capital    DECIMAL(18,2),                     -- 注册资本
    status         VARCHAR(10)  DEFAULT 'ACTIVE',     -- 状态
    eff_date       DATE         NOT NULL,             -- 生效日期
    exp_date       DATE         DEFAULT '9999-12-31'  -- 失效日期
);

-- 个人表
CREATE TABLE dim_individual (
    cust_id        VARCHAR(30)  PRIMARY KEY,          -- 客户ID
    cust_name      VARCHAR(60)  NOT NULL,             -- 姓名
    id_type        VARCHAR(10)  NOT NULL,             -- 证件类型
    id_no          VARCHAR(30)  NOT NULL,             -- 证件号码
    risk_level     VARCHAR(10),                       -- 风险等级
    eff_date       DATE         NOT NULL,
    exp_date       DATE         DEFAULT '9999-12-31'
);

-- 产品表
CREATE TABLE dim_product (
    prod_code      VARCHAR(30)  PRIMARY KEY,          -- 产品代码
    prod_name      VARCHAR(100) NOT NULL,             -- 产品名称
    prod_type      VARCHAR(20)  NOT NULL,             -- 产品类型
    issuer_code    VARCHAR(20)  NOT NULL,             -- 发行机构代码
    risk_level     VARCHAR(10),                       -- 风险等级
    eff_date       DATE         NOT NULL,
    exp_date       DATE         DEFAULT '9999-12-31',
    FOREIGN KEY (issuer_code) REFERENCES dim_institution(inst_code)
);

-- 交易记录表(关联实体)
CREATE TABLE fact_transaction (
    trans_id       BIGINT       PRIMARY KEY,          -- 交易ID
    trans_time     TIMESTAMP    NOT NULL,             -- 交易时间
    cust_id        VARCHAR(30)  NOT NULL,             -- 客户ID
    inst_code      VARCHAR(20)  NOT NULL,             -- 参与机构
    prod_code      VARCHAR(30)  NOT NULL,             -- 交易产品
    trans_amount   DECIMAL(18,2) NOT NULL,            -- 交易金额
    trans_dir      VARCHAR(4)   NOT NULL,             -- 交易方向(买入/卖出)
    batch_id       VARCHAR(30),                       -- 回放批次ID
    FOREIGN KEY (cust_id)   REFERENCES dim_individual(cust_id),
    FOREIGN KEY (inst_code) REFERENCES dim_institution(inst_code),
    FOREIGN KEY (prod_code) REFERENCES dim_product(prod_code)
);
回放对比注意事项:在回放对比SQL中,实体表通常使用LEFT JOIN关联交易记录表,并利用eff_date和exp_date做时间范围过滤,确保每个交易时间点关联到正确的实体快照。例如:ON t.cust_id = i.cust_id AND t.trans_time BETWEEN i.eff_date AND i.exp_date。

2.5 实体模型设计检查清单

在开始SQL回放对比之前,请使用以下清单验证实体模型是否完备:

检查项 说明 验证方法
实体类型覆盖 是否包含机构、个人、产品三大类 检查维度表数量
主键唯一性 每个实体表是否有业务主键 执行SELECT COUNT(DISTINCT pk) FROM table
时间维度 是否包含生效/失效日期 检查表结构中的eff_date和exp_date
外键完整性 关联字段是否引用正确的主键 执行SELECT * FROM fact WHERE fk NOT IN (SELECT pk FROM dim)
属性完备性 是否包含回放对比所需的过滤字段 与业务需求文档核对