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:
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:
Relation ProductCategory {
Product.id <-> Category.id
}
Verzování exportu (export ... version) zajišťuje kompatibilitu modulů.
| Výhoda | Popis |
|--------------|----------|
| 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
Zatím žádné komentáře.