홈으로 돌아가기

ArchDB: 코드로서의 모듈식 DB 스키마

ArchDB는 템플릿과 모듈로 DB 스키마를 버전 관리된 코드로 변환합니다. 선언적 설명으로 중복 제거, DDL 및 문서 생성. 예제: 전자상거래를 위한 Core, Product, Order.

실전 ArchDB: DB 템플릿 및 모듈
Advertisement 728x90

ArchDB로 모듈식 스키마 엔지니어링: 템플릿, 패키지, 선언적 모델링

ArchDB는 .adb 파일로 데이터베이스 구조를 선언적으로 기술하여 Git 저장소에 통합할 수 있게 합니다. 템플릿은 감사 및 식별 필드의 중복을 제거하고, 패키지는 모놀리식을 독립적인 모듈로 분해합니다. 이 모델은 DDL, 문서, 다이어그램을 생성합니다. 이 접근 방식은 변경 검토와 ORM 동기화를 가속화합니다.

// Core.adb - 기본 템플릿
Package com.example.ecommerce.Core

Template IdentifiableUuid {
  id uuid [pk, default: `gen_random_uuid()`]
}

Template Auditable {
  created_at timestamp [not_null, default: `now()`]
  created_by uuid [ref: > User.id, nullable]
  updated_at timestamp [default: `now()`]
  updated_by uuid [ref: > User.id, nullable]
  indexes {
    idx_created_at (created_at)
  }
}

Template BusinessEntity extends IdentifiableUuid, Auditable {
  version_no integer [default: 1]
  status varchar(50) [default: 'active']
}

재사용성을 위한 템플릿

템플릿은 extends를 통해 구성되며, 필드와 인덱스를 상속합니다. BusinessEntity는 식별, 감사, 버전 관리를 결합합니다. 이를 User 테이블에 적용하면 모든 필드가 자동으로 추가됩니다:

  • PK와 기본 생성기가 있는 UUID id
  • 인덱스가 있는 created_at/updated_at 필드
  • 낙관적 잠금을 위한 version_no

체크와 고유 인덱스는 테이블 수준에서 구성됩니다:

Google AdInline article slot
Table User extends BusinessEntity {
  email varchar(255) [unique, not_null]
  password_hash text [not_null]
  checks {
    `char_length(password_hash) >= 8`
  }
}

논리적 그룹은 색상과 설명을 할당하여 문서화 시각화를 향상시킵니다.

패키지를 통한 모듈식 분해

각 .adb 파일은 import가 있는 별도의 패키지입니다. Product.adb는 Core.adb를 import하여 BusinessEntity를 확장합니다:

// Product.adb
Package com.example.ecommerce.Product
import "com.example.ecommerce.Core.adb" version 3.4.0

export Product as "com.example.ecommerce.Product" version 3.6.0

Table Product extends Core.BusinessEntity {
  sku varchar(50) [unique, not_null]
  price decimal(12, 2) [not_null]
  stock_quantity integer [default: 0]
  available_quantity integer [generated: `stock_quantity - reserved_quantity`]
  checks {
    `price >= cost_price`
    `reserved_quantity <= stock_quantity`
  }
}

생성된 필드는 데이터베이스 수준에서 계산됩니다. Relation은 M:N 관계를 설명합니다:

Google AdInline article slot
Relation ProductCategory {
  Product.id <-> Category.id
}

Export 버전 관리(export ... version)는 모듈 호환성을 보장합니다.

| 장점 | 설명 |

|-----------|-------------|

Google AdInline article slot

| 독립성 | 모듈의 병렬 개발 |

| 버전 관리 | import를 위한 Git + 시맨틱 버전 관리 |

| 재사용성 | 라이브러리를 통해 배포되는 템플릿 |

고급 엔티티: 주문과 열거형

Order.adb는 Core와 Product를 import하여 도메인 유형을 추가합니다:

// Order.adb
import "com.example.ecommerce.Core.adb" version 3.4.0
import "com.example.ecommerce.Product.adb" version 3.6.0

Enum OrderStatus {
  pending [note: "결제 대기 중"]
  paid
  shipped
  cancelled
}

Table Order extends Core.BusinessEntity {
  user_id uuid [ref: > Core.User.id]
  status OrderStatus [default: 'pending']
  total_amount decimal(12, 2) [not_null]
}

Enum은 필드 유형으로 통합됩니다. FK에 대한 연쇄 삭제(on_delete: cascade).

핵심 요약

  • 선언적: 원하는 상태를 기술; 생성기가 DDL과 마이그레이션을 생성합니다.
  • 모듈성: 패키지 + import/export로 독립적인 개발과 CI/CD를 가능하게 합니다.
  • 템플릿: extends로 감사 필드, 소프트 삭제, 비즈니스 로직을 복사-붙여넣기 없이 구성합니다.
  • 검증: 스키마 수준의 체크, 계산을 위한 생성된 필드.
  • 문서화: note, Group, Metadata로 다이어그램과 README를 생성합니다.

실용적인 구현 팁

  • Identifiable, Auditable, SoftDeletable 템플릿이 있는 기본 Core.adb를 생성합니다.
  • 모놀리식을 도메인별(User, Product, Order)로 패키지로 분할합니다.
  • 커밋 전 스키마 검증을 위한 Git 훅을 설정합니다.
  • CI와 통합: DDL 생성, 스키마 테스트, 문서 업데이트.
  • ORM용: .adb에서 엔티티를 생성하는 스크립트.

Metadata와 Project는 컨텍스트를 설정합니다: database: "postgresql", version, author.

— Editorial Team

Advertisement 728x90

다음 읽기