fenghuo/packages/db/prisma/schema.prisma

405 lines
8.7 KiB
Plaintext
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 优化后的架构 - 数据中台 v4.0 (完全通用化)
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-1.1.x"]
output = "../generated/prisma"
}
datasource db {
provider = "postgres"
url = env("DATABASE_URL")
}
// ============= 数据源层 =============
model DataSource {
id String @id @default(cuid())
name String
code String @unique
type SourceType
config Json // 连接配置
description String?
status Status @default(ACTIVE)
// 元数据版本管理
schemaVersion String? @default("1.0")
lastSynced DateTime?
// 关联
pipelines Pipeline[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("data_sources")
}
// ============= 统一流水线层 =============
model Pipeline {
id String @id @default(cuid())
name String
type PipelineType // SYNC | TRANSFORM | STREAM | HYBRID
schedule String? // Cron表达式
config Json // 流水线配置
description String?
status Status @default(ACTIVE)
// 关联数据源(可选)
dataSource DataSource? @relation(fields: [dataSourceId], references: [id])
dataSourceId String?
// 执行记录
executions PipelineExecution[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("pipelines")
}
// 统一执行记录
model PipelineExecution {
id String @id @default(cuid())
executionId String @unique
status ExecutionStatus @default(PENDING)
// 统计信息
inputRecords Int @default(0)
outputRecords Int @default(0)
errorRecords Int @default(0)
// 时间信息
startedAt DateTime @default(now())
completedAt DateTime?
duration Int? // 毫秒
// 元数据
metadata Json? // 灵活的元数据存储
errorMsg String?
// 关联
pipeline Pipeline @relation(fields: [pipelineId], references: [id])
pipelineId String
// 产生的数据资产
dataAssets DataAsset[]
// 数据血缘
lineageRecords LineageRecord[]
@@map("pipeline_executions")
}
// ============= 数据资产层 =============
model DataAsset {
id String @id @default(cuid())
assetId String @unique
name String
type AssetType @default(BATCH)
format DataFormat @default(PARQUET)
// 存储信息(支持多种存储)
storageConfig Json // 统一存储配置
// 元数据管理
schema Json?
partitions Json? // 分区信息
size BigInt? // 数据大小
recordCount BigInt? // 记录数
// 数据质量
qualityScore Float? // 0-1之间的质量分数
// 关联
execution PipelineExecution? @relation(fields: [executionId], references: [id])
executionId String?
// 查询记录
queries Query[]
status AssetStatus @default(ACTIVE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([type, status])
@@index([createdAt])
@@map("data_assets")
}
// ============= 查询层 =============
model Query {
id String @id @default(cuid())
queryId String @unique
sql String
engine QueryEngine @default(DUCKDB)
// 执行信息
status QueryStatus @default(PENDING)
resultCount BigInt?
resultPath String?
duration Int? // 毫秒
errorMsg String?
// 查询标签
tags Json?
// 关联资产
dataAsset DataAsset @relation(fields: [assetId], references: [id])
assetId String
// 审计信息
userId String? // 执行用户
createdAt DateTime @default(now())
completedAt DateTime?
@@index([status, createdAt])
@@map("queries")
}
// ============= 通用实体层 =============
// 通用实体模型(支持优雅的树形层级)
model Entity {
id String @id @default(cuid())
code String @unique
name String
type EntityType // PERSON, EQUIPMENT, FACILITY, MATERIAL, ORGANIZATION等
attributes Json? // 灵活的属性存储
status Status @default(ACTIVE)
// 树形层级关系(直接支持)
parentId String?
parent Entity? @relation("EntityTree", fields: [parentId], references: [id])
children Entity[] @relation("EntityTree")
// 层级路径(用于快速查询)
path String? // 如: "/org1/dept1/team1" 便于层级查询
level Int? // 层级深度根节点为0
// 作为源实体的关系(非树形关系)
sourceRelations EntityRelation[] @relation("SourceEntity")
// 作为目标实体的关系
targetRelations EntityRelation[] @relation("TargetEntity")
// 数据血缘
lineageRecords LineageRecord[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([type, status])
@@index([code])
@@index([type, code])
@@index([parentId])
@@index([path])
@@index([type, parentId])
@@index([level])
@@map("entities")
}
// ============= 通用关系层 =============
// 通用实体关系表(处理非树形的复杂关系)
model EntityRelation {
id String @id @default(cuid())
sourceId String // 源实体ID
targetId String // 目标实体ID
relationship String // 关系类型
// 关系属性
attributes Json? // 关系属性:权限级别、时间范围等
startDate DateTime?
endDate DateTime?
// 关系元数据
metadata Json? // 其他元数据
// 关联实体
sourceEntity Entity @relation("SourceEntity", fields: [sourceId], references: [id])
targetEntity Entity @relation("TargetEntity", fields: [targetId], references: [id])
status Status @default(ACTIVE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([sourceId, targetId, relationship])
@@index([sourceId])
@@index([targetId])
@@index([relationship])
@@index([sourceId, relationship])
@@index([targetId, relationship])
@@index([relationship, status])
@@map("entity_relations")
}
// ============= 优化的血缘层 =============
model LineageRecord {
id String @id @default(cuid())
sourceType String // 来源类型
sourceId String // 来源ID
targetType String // 目标类型
targetId String // 目标ID
relationship String // 关系类型: CREATE, UPDATE, DERIVE
// 元数据
metadata Json? // 血缘元数据
// 关联执行(可选)
execution PipelineExecution? @relation(fields: [executionId], references: [id])
executionId String?
// 关联实体(可选)
entity Entity? @relation(fields: [entityId], references: [id])
entityId String?
status LineageStatus @default(ACTIVE)
createdAt DateTime @default(now())
@@unique([sourceType, sourceId, targetType, targetId])
@@index([relationship])
@@map("lineage_records")
}
// ============= 数据治理层 =============
model QualityRule {
id String @id @default(cuid())
name String
description String?
rule Json // 质量规则定义
threshold Float? // 阈值
// 应用范围
entityType String? // 应用的实体类型
entityId String? // 特定实体ID
status Status @default(ACTIVE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("quality_rules")
}
model DataCatalog {
id String @id @default(cuid())
name String
description String?
tags Json? // 标签
owner String? // 数据负责人
// 分类
category String?
sensitivity String? // 敏感度级别
// 关联资产或实体
assetType String // 资产类型DataAsset, Entity等
assetId String // 资产ID
status Status @default(ACTIVE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([assetType, assetId])
@@index([category])
@@map("data_catalogs")
}
// ============= 精简的权限层 =============
model User {
id String @id @default(cuid())
username String @unique
email String @unique
name String
roles Json? // 简化为JSON存储角色
status Status @default(ACTIVE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("users")
}
// ============= 枚举定义 =============
enum Status {
ACTIVE
INACTIVE
}
enum SourceType {
DATABASE
API
FILE
ERP
MES
IOT
STREAM
}
enum PipelineType {
SYNC
TRANSFORM
STREAM
HYBRID
}
enum ExecutionStatus {
PENDING
RUNNING
SUCCESS
FAILED
CANCELLED
}
enum DataFormat {
PARQUET
JSON
CSV
AVRO
DELTA
}
enum AssetType {
BATCH
STREAM
TABLE
VIEW
MODEL
}
enum AssetStatus {
ACTIVE
ARCHIVED
DEPRECATED
}
enum QueryEngine {
DUCKDB
ATHENA
SPARK
TRINO
}
enum QueryStatus {
PENDING
RUNNING
SUCCESS
FAILED
CANCELLED
}
enum EntityType {
PERSON
EQUIPMENT
FACILITY
MATERIAL
ORGANIZATION
PROJECT
CUSTOM
}
enum LineageStatus {
ACTIVE
ARCHIVED
}