테이블 관계 저장 구현

This commit is contained in:
hyeonsu
2025-09-08 16:46:53 +09:00
parent 37fac630b9
commit 0bdfb2ba92
9 changed files with 1980 additions and 166 deletions

View File

@@ -5100,3 +5100,72 @@ model code_info {
@@id([code_category, code_value], map: "pk_code_info")
@@index([code_category, sort_order], map: "idx_code_info_sort")
}
// 테이블 간 관계 정의
model table_relationships {
relationship_id Int @id @default(autoincrement())
relationship_name String @db.VarChar(200)
from_table_name String @db.VarChar(100)
from_column_name String @db.VarChar(100)
to_table_name String @db.VarChar(100)
to_column_name String @db.VarChar(100)
relationship_type String @db.VarChar(20) // 'one-to-one', 'one-to-many', 'many-to-one', 'many-to-many'
connection_type String @db.VarChar(20) // 'simple-key', 'data-save', 'external-call'
company_code String @db.VarChar(50)
settings Json? // 연결 종류별 세부 설정
is_active String? @default("Y") @db.Char(1)
created_date DateTime? @default(now()) @db.Timestamp(6)
created_by String? @db.VarChar(50)
updated_date DateTime? @default(now()) @db.Timestamp(6)
updated_by String? @db.VarChar(50)
// 역참조 관계
bridges data_relationship_bridge[]
@@index([company_code], map: "idx_table_relationships_company_code")
@@index([from_table_name], map: "idx_table_relationships_from_table")
@@index([to_table_name], map: "idx_table_relationships_to_table")
}
// 테이블 간 데이터 관계 중계 테이블 - 실제 데이터 연결 정보 저장
model data_relationship_bridge {
bridge_id Int @id @default(autoincrement())
relationship_id Int
// 소스 테이블 정보
from_table_name String @db.VarChar(100)
from_column_name String @db.VarChar(100)
from_key_value String? @db.VarChar(500) // 실제 연결 키 값
from_record_id String? @db.VarChar(100) // 소스 레코드의 Primary Key
// 타겟 테이블 정보
to_table_name String @db.VarChar(100)
to_column_name String @db.VarChar(100)
to_key_value String? @db.VarChar(500) // 실제 연결 키 값
to_record_id String? @db.VarChar(100) // 타겟 레코드의 Primary Key
// 메타데이터
connection_type String @db.VarChar(20) // 'simple-key', 'data-save', 'external-call'
company_code String @db.VarChar(50)
created_at DateTime @default(now()) @db.Timestamp(6)
created_by String? @db.VarChar(50)
updated_at DateTime @default(now()) @db.Timestamp(6)
updated_by String? @db.VarChar(50)
is_active String @default("Y") @db.Char(1)
// 추가 설정 (JSON)
bridge_data Json? // 연결 종류별 추가 데이터
// 관계 설정
relationship table_relationships @relation(fields: [relationship_id], references: [relationship_id], onDelete: Cascade)
@@index([relationship_id], map: "idx_data_bridge_relationship")
@@index([from_table_name, from_key_value], map: "idx_data_bridge_from_table")
@@index([to_table_name, to_key_value], map: "idx_data_bridge_to_table")
@@index([company_code], map: "idx_data_bridge_company")
@@index([is_active], map: "idx_data_bridge_active")
@@index([connection_type], map: "idx_data_bridge_connection_type")
@@index([from_table_name, from_column_name, from_key_value], map: "idx_data_bridge_from_lookup")
@@index([to_table_name, to_column_name, to_key_value], map: "idx_data_bridge_to_lookup")
@@index([company_code, is_active], map: "idx_data_bridge_company_active")
}