Zurück zur Startseite

ArchDB: modulare DB-Schemata als Code

ArchDB verwandelt DB-Schemata in versionierten Code mit Vorlagen und Modulen. Deklarative Beschreibung eliminiert Duplikate, erzeugt DDL und Dokumentation. Beispiele: Core, Product, Order für E-Commerce.

ArchDB in der Praxis: DB-Vorlagen und Module
Advertisement 728x90

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:

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

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:

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

Export-Versionierung (export ... version) gewährleistet Modulkompatibilität.

| Vorteil | Beschreibung |

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

Google AdInline article slot

| 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

Advertisement 728x90

Weiterlesen