Zpět na domů

ArchDB: modulární schémata DB jako kód

ArchDB mění schémata DB na verziovatelný kód se šablonami a moduly. Deklarativní popis vylučuje duplicity, generuje DDL a dokumentaci. Příklady: Core, Product, Order pro e-commerce.

ArchDB v praxi: šablony a moduly DB
Advertisement 728x90

Modulární schémata databází s ArchDB: šablony, balíčky a deklarativní modelování

ArchDB umožňuje deklarativně popsat strukturu databáze v souborech .adb a integrovat ji do Git repozitáře. Šablony (Template) eliminují duplikaci auditních a identifikačních polí, balíčky (Package) rozkládají monolit na nezávislé moduly. Z modelu se generují DDL, dokumentace a diagramy. Tento přístup urychluje revize změn a synchronizaci s ORM.

// Core.adb - základní šablony
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']
}

Šablony pro opakované použití

Šablony se skládají pomocí extends, dědí pole a indexy. BusinessEntity kombinuje identifikaci, audit a verzování. Použití na tabulku User přidá všechna pole automaticky:

  • UUID id s PK a výchozím generátorem
  • Pole created_at/updated_at s indexy
  • version_no pro optimistické zamykání

Kontroly a unikátní indexy se nastavují na úrovni tabulky:

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`
  }
}

Logické skupiny (Group) zlepšují vizualizaci v dokumentaci přiřazením barvy a popisu.

Modulární dekompozice pomocí Package

Každý .adb soubor je samostatný Package s importy. Product.adb importuje Core.adb pro rozšíření 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`
  }
}

Generovaná pole se počítají na úrovni databáze. Relation popisuje M:N vazby:

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

Verzování exportu (export ... version) zajišťuje kompatibilitu modulů.

| Výhoda | Popis |

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

Google AdInline article slot

| Nezávislost | Paralelní vývoj modulů |

| Verzování | Git + semver pro importy |

| Opakované použití | Šablony se šíří přes knihovny |

Rozšířené entity: objednávky a enum

Order.adb importuje Core a Product, přidává doménové typy:

// 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: "Čeká na platbu"]
  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 se integruje jako typ pole. Kaskádové mazání (on_delete: cascade) na FK.

Co je důležité

  • Deklarativnost: popisuje se požadovaný stav, generátory vytvářejí DDL a migrace.
  • Modularita: Package + import/export pro nezávislý vývoj a CI/CD.
  • Šablony: extends skládá pole auditu, soft-delete, obchodní logiku bez kopírování.
  • Validace: kontroly na úrovni schématu, generovaná pole pro výpočty.
  • Dokumentace: note, Group, Metadata generují diagramy a README.

Praktické postupy zavádění

  • Vytvořte základní Core.adb se šablonami Identifiable, Auditable, SoftDeletable.
  • Rozdělte monolit na Package podle domén: User, Product, Order.
  • Nastavte Git hooks pro validaci schémat před commitem.
  • Integrujte s CI: generace DDL, testy schémat, aktualizace dokumentace.
  • Pro ORM: skripty generující entity z .adb.

Metadata a Project nastavují kontext: database: "postgresql", version, author.

— Editorial Team

Advertisement 728x90

Číst dál