Modulares Schema-Engineering mit ArchDB: Vorlagen, Pakete und deklarative Modellierung
ArchDB ermöglicht es Ihnen, die Datenbankstruktur deklarativ in .adb-Dateien zu beschreiben und in ein Git-Repository zu integrieren. Vorlagen eliminieren die Duplizierung von Audit- und Identifikationsfeldern, während Pakete einen Monolithen in unabhängige Module zerlegen. Das Modell generiert DDL, Dokumentation und Diagramme. Dieser Ansatz beschleunigt Änderungsprüfungen und die Synchronisation mit ORMs.
// Core.adb - Basisvorlagen
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']
}
Vorlagen für Wiederverwendbarkeit
Vorlagen werden über extends zusammengesetzt und erben Felder und Indizes. BusinessEntity kombiniert Identifikation, Auditierung und Versionierung. Die Anwendung auf eine User-Tabelle fügt automatisch alle Felder hinzu:
- UUID id mit PK und einem Standardgenerator
- created_at/updated_at-Felder mit Indizes
- version_no für optimistische Sperren
Checks und eindeutige Indizes werden auf Tabellenebene konfiguriert:
Table User extends BusinessEntity {
email varchar(255) [unique, not_null]
password_hash text [not_null]
checks {
`char_length(password_hash) >= 8`
}
}
Logische Gruppen verbessern die Visualisierung in der Dokumentation durch Zuweisung von Farben und Beschreibungen.
Modulare Zerlegung via Package
Jede .adb-Datei ist ein separates Paket mit Imports. Product.adb importiert Core.adb, um BusinessEntity zu erweitern:
// 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`
}
}
Generierte Felder werden auf Datenbankebene berechnet. Relation beschreibt M:N-Beziehungen:
Relation ProductCategory {
Product.id <-> Category.id
}
Export-Versionierung (export ... version) gewährleistet Modulkompatibilität.
| Vorteil | Beschreibung |
|-----------|-------------|
| Unabhängigkeit | Parallele Entwicklung von Modulen |
| Versionierung | Git + semantische Versionierung für Imports |
| Wiederverwendbarkeit | Vorlagen verteilt über Bibliotheken |
Erweiterte Entitäten: Bestellungen und Enums
Order.adb importiert Core und Product und fügt Domänentypen hinzu:
// 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: "Warten auf Zahlung"]
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 integriert als Feldtyp. Kaskadierendes Löschen (on_delete: cascade) bei FK.
Wichtige Erkenntnisse
- Deklarativ: Beschreiben Sie den gewünschten Zustand; Generatoren erstellen DDL und Migrationen.
- Modularität: Paket + Import/Export für unabhängige Entwicklung und CI/CD.
- Vorlagen: extends komponiert Audit-Felder, Soft-Delete, Geschäftslogik ohne Copy-Paste.
- Validierung: Checks auf Schemaebene, generierte Felder für Berechnungen.
- Dokumentation: note, Group, Metadata generieren Diagramme und README.
Praktische Implementierungstipps
- Erstellen Sie eine Basis Core.adb mit Identifiable, Auditable, SoftDeletable Vorlagen.
- Teilen Sie den Monolithen in Pakete nach Domäne auf: User, Product, Order.
- Richten Sie Git-Hooks für Schema-Validierung vor Commits ein.
- Integrieren Sie in CI: DDL-Generierung, Schema-Tests, Dokumentationsaktualisierungen.
- Für ORMs: Skripte zur Generierung von Entitäten aus .adb.
Metadata und Project setzen den Kontext: database: "postgresql", version, author.
— Editorial Team
Noch keine Kommentare.