-- =============================================
-- 数据产品注册表
-- 用于记录数据工厂加工完成后的数据产品信息
-- 创建时间: 2025-12-25
-- =============================================

-- 创建 data_products 表
CREATE TABLE IF NOT EXISTS public.data_products (
    id SERIAL PRIMARY KEY,
    -- 数据产品基本信息
    product_name VARCHAR(200) NOT NULL,              -- 数据产品名称（中文）
    product_name_en VARCHAR(200) NOT NULL,           -- 数据产品英文名（对应目标表名）
    description TEXT,                                 -- 描述
    
    -- 关联信息
    source_dataflow_id INTEGER,                      -- 关联的数据流ID（Neo4j节点ID）
    source_dataflow_name VARCHAR(200),               -- 数据流名称（冗余存储便于查询）
    
    -- 目标表信息
    target_table VARCHAR(200) NOT NULL,              -- 目标表名
    target_schema VARCHAR(100) DEFAULT 'public',     -- 目标schema
    
    -- 数据统计信息
    record_count BIGINT DEFAULT 0,                   -- 记录数
    column_count INTEGER DEFAULT 0,                  -- 列数
    
    -- 更新提示相关
    last_updated_at TIMESTAMP,                       -- 数据最后更新时间
    last_viewed_at TIMESTAMP,                        -- 用户最后查看时间
    
    -- 状态信息
    status VARCHAR(50) DEFAULT 'active',             -- 状态: active, inactive, error
    
    -- 审计字段
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 创建时间
    created_by VARCHAR(100) DEFAULT 'system',        -- 创建人
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP   -- 更新时间
);

-- 添加表注释
COMMENT ON TABLE public.data_products IS '数据产品注册表，记录数据工厂加工完成后的数据产品信息';

-- 添加字段注释
COMMENT ON COLUMN public.data_products.id IS '主键ID';
COMMENT ON COLUMN public.data_products.product_name IS '数据产品名称（中文）';
COMMENT ON COLUMN public.data_products.product_name_en IS '数据产品英文名，对应目标表名';
COMMENT ON COLUMN public.data_products.description IS '数据产品描述';
COMMENT ON COLUMN public.data_products.source_dataflow_id IS '关联的数据流ID（Neo4j节点ID）';
COMMENT ON COLUMN public.data_products.source_dataflow_name IS '数据流名称';
COMMENT ON COLUMN public.data_products.target_table IS '目标数据表名';
COMMENT ON COLUMN public.data_products.target_schema IS '目标表所在schema';
COMMENT ON COLUMN public.data_products.record_count IS '数据记录数';
COMMENT ON COLUMN public.data_products.column_count IS '数据列数';
COMMENT ON COLUMN public.data_products.last_updated_at IS '数据最后更新时间';
COMMENT ON COLUMN public.data_products.last_viewed_at IS '用户最后查看时间';
COMMENT ON COLUMN public.data_products.status IS '状态: active-正常, inactive-停用, error-异常';
COMMENT ON COLUMN public.data_products.created_at IS '创建时间';
COMMENT ON COLUMN public.data_products.created_by IS '创建人';
COMMENT ON COLUMN public.data_products.updated_at IS '更新时间';

-- 创建索引
CREATE INDEX IF NOT EXISTS idx_data_products_target_table 
    ON public.data_products(target_table);

CREATE INDEX IF NOT EXISTS idx_data_products_source_dataflow_id 
    ON public.data_products(source_dataflow_id);

CREATE INDEX IF NOT EXISTS idx_data_products_status 
    ON public.data_products(status);

CREATE INDEX IF NOT EXISTS idx_data_products_created_at 
    ON public.data_products(created_at DESC);

-- 创建唯一索引，确保同一个目标表只有一个数据产品记录
CREATE UNIQUE INDEX IF NOT EXISTS idx_data_products_unique_target 
    ON public.data_products(target_schema, target_table);

