Datenbankmodellierung richtig machen

Primary Keys, referenzielle Integrität und saubere Beziehungen – strategisch fundiert für IBM i, Db2 for i und moderne Backend-Architekturen.
1. Datenmodellierung ist Architektur
In vielen IBM-i-Landschaften sind Datenbanken historisch gewachsen: DDS-Dateien, logische Files, RPG-Programme mit gewachsener Prüf-Logik, kaum explizite Foreign Keys und Datenintegrität, die „schon immer“ in der Anwendungsschicht abgesichert wurde. Solange ein System isoliert läuft, funktioniert das häufig erstaunlich lange. Die Rechnung kommt später – meistens dann, wenn Integration, Reporting oder Modernisierung ernst wird.
Typische Auslöser, bei denen Modellschwächen sichtbar werden:
- Ein neues Java-, .NET- oder Web-Frontend greift per SQL direkt auf Db2 for i zu.
- Ein Data-Warehouse extrahiert regelmäßig ERP-Daten über ETL oder ELT.
- Eine alte 5250-Anwendung wird schrittweise um APIs, Microservices oder Integrationshubs ergänzt.
- Zwei Unternehmen mit eigenen IBM-i-Systemen fusionieren.
- Mandantenfähigkeit oder Konzernfähigkeit wird nachträglich gefordert.
- Externe Systeme replizieren Daten per CDC oder Synchronisationsprozess.
Dann reicht es nicht mehr, dass „das RPG-Programm schon aufpasst“. Direkte SQL-Zugriffe, neue Services, Batch-Jobs und Reporting-Tools umgehen diese Logik häufig. Was im Monolithen versteckt funktioniert hat, wird in einer integrierten Architektur plötzlich sichtbar – inklusive Dubletten, verwaister Sätze, unklarer Schlüssel und widersprüchlicher Statuswerte.
2. Entitäten richtig schneiden
Eine Entität ist kein Tabellenname. Eine Entität ist ein fachliches Objekt mit stabiler Identität, eigener Verantwortung und einem nachvollziehbaren Lebenszyklus. Tabellen sind nur die technische Umsetzung dieses fachlichen Modells.
Beispiel Auftrag:
- Ein Auftrag wird angelegt, geändert, bestätigt, geliefert, fakturiert, storniert und archiviert.
- Eine Auftragsposition existiert zunächst nur im Kontext dieses Auftrags.
- Wird die Position später eigenständig referenziert – etwa durch Reklamation, Lagerbeleg, Qualitätssicherung oder gesetzliche Aufbewahrung – braucht sie klare eigene Identität.
CREATE TABLE orders (
id BIGINT GENERATED ALWAYS AS IDENTITY,
order_no VARCHAR(30) NOT NULL,
customer_id BIGINT NOT NULL,
order_status CHAR(1) NOT NULL DEFAULT 'O',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
CONSTRAINT uq_orders_order_no UNIQUE (order_no),
CONSTRAINT chk_orders_status CHECK (order_status IN ('O','C','I','S'))
);
CREATE TABLE order_positions (
id BIGINT GENERATED ALWAYS AS IDENTITY,
order_id BIGINT NOT NULL,
position_no INTEGER NOT NULL,
item_id BIGINT NOT NULL,
quantity DECIMAL(11,3) NOT NULL,
net_price DECIMAL(15,4) NOT NULL,
PRIMARY KEY (id),
CONSTRAINT fk_pos_order
FOREIGN KEY (order_id) REFERENCES orders(id)
ON DELETE CASCADE,
CONSTRAINT uq_pos_no UNIQUE (order_id, position_no),
CONSTRAINT chk_pos_quantity CHECK (quantity > 0)
);
Das fachliche Modell kommt zuerst. Wer ohne fachliche Abgrenzung Tabellen entwirft, produziert später unklare Verantwortlichkeiten: Welche Tabelle ist führend? Welche Spalte ist Wahrheit? Welcher Prozess darf löschen? Welche Daten müssen revisionssicher bleiben?
3. Primary Key: Identität ist nicht Bedeutung
Ein Primärschlüssel hat eine einzige Aufgabe: einen Datensatz dauerhaft, eindeutig und stabil zu identifizieren. Er ist kein Anzeigefeld, keine Geschäftsregel und kein Nummernkreis für Menschen.
Warum sprechende Schlüssel langfristig teuer werden
- Fusionen: Zwei Systeme kennen dieselbe Kundennummer für unterschiedliche Kunden.
- Mandantenfähigkeit: Aus
kundennrwird plötzlichmandant + kundennr. - Regeländerungen: Nummernformate ändern sich, Präfixe kommen dazu, alte Nummern bleiben trotzdem historisch relevant.
- Replikation: Dezentrale Systeme vergeben Nummern unabhängig voneinander.
- Schnittstellen: Externe Systeme speichern den Schlüssel und erwarten Stabilität.
Empfohlene Schlüsselstrategie
| Strategie | Geeignet für | Hinweis |
|---|---|---|
BIGINT GENERATED ALWAYS AS IDENTITY |
Kernentitäten in einem zentralen System | Kompakt, indexfreundlich, gut für viele klassische ERP-Tabellen. |
| UUID | Verteilte Erzeugung, Offline-Erfassung, Integration, externe Referenzen | Db2 for i erzeugt mit GENERATE_UUID() UUID v4. Zeitbasierte UUID v7 kommen typischerweise aus der Anwendung. |
Business Key als UNIQUE |
Kundennummer, Artikelnummer, Vertragsnummer, externe IDs | Fachlich wichtig, aber nicht zwingend technischer Primary Key. |
| Komposit-PK | Reine Relationstabellen oder bewusst kleine Zuordnungstabellen | Nicht als Standard für Kernentitäten verwenden, sonst werden FKs schnell schwerfällig. |
UUIDs auf Db2 for i sinnvoll speichern
GENERATE_UUID() liefert auf Db2 for i einen formatierten CHAR(36)-Wert. Für Indexgröße und Speicher kann eine binäre Speicherung als BINARY(16) oder VARBINARY(16) sinnvoll sein. Die Konvertierung gelingt mit VARBINARY_FORMAT (verfügbar in neueren Releases).
CREATE TABLE customers (
id_bin VARBINARY(16) NOT NULL
DEFAULT VARBINARY_FORMAT(GENERATE_UUID(),
'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'),
tenant_id SMALLINT NOT NULL,
customer_no VARCHAR(30) NOT NULL,
name1 VARCHAR(80) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
rowchg_ts TIMESTAMP NOT NULL
GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,
PRIMARY KEY (id_bin),
CONSTRAINT uq_customer_tenant_no UNIQUE (tenant_id, customer_no),
CONSTRAINT chk_customer_no_len CHECK (LENGTH(customer_no) BETWEEN 3 AND 30)
);
-- Lesbar ausgeben
SELECT VARCHAR_FORMAT_BINARY(id_bin,
'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX') AS customer_uuid,
tenant_id,
customer_no,
name1
FROM customers;
VARBINARY_FORMAT-Variante ist kompakt und indexfreundlich, setzt aber ein aktuelles Release voraus. Alternativ kannst Du UUIDs auch als CHAR(36) speichern – das ist einfacher und überall verfügbar. UUID v4 ist robust für verteilte Erzeugung, UUID v7 (zeitbasiert) ist für Indizes meist angenehmer und wird typischerweise in der Anwendung erzeugt.4. Integration, Mandantenfähigkeit und Fusion
Integration ist der Härtetest jedes Datenmodells. Sobald Daten zwischen Systemen bewegt, gespiegelt, konsolidiert oder in Echtzeit synchronisiert werden, zeigt sich, ob Identität und Beziehungen wirklich stabil sind.
Häufige Integrationsfallen
- Überlappende Nummernkreise: Kunde 4711 existiert in System A und System B – aber es sind unterschiedliche Kunden.
- Nachträgliche Mandantenfähigkeit: Jede eindeutige Regel und fast jede Beziehung muss neu bewertet werden.
- Fachliche Schlüssel als technische Kopplung: Änderungen im Geschäft ziehen technische Migrationen nach sich.
- Keine deklarativen Constraints: ETL- oder Reporting-Prozesse entdecken Inkonsistenzen, die die Anwendung nie zugelassen hätte – theoretisch.
- Keine Änderungsstrategie: Ohne saubere Änderungszeitpunkte werden Delta-Extraktion und CDC unnötig kompliziert.
5. Legacy-Tabellen auf IBM i modernisieren
Viele klassische IBM-i-Anwendungen basieren auf DDS-Dateien und logischen Files. Das ist nicht automatisch schlecht. Problematisch wird es, wenn implizite Annahmen nicht als SQL-Constraints sichtbar sind. Moderne Tools sehen dann Tabellen, aber keine klaren Regeln.
Pragmatischer Modernisierungspfad
- Bestandsdaten analysieren: Dubletten, NULL-Werte, ungültige Status, verwaiste Kinddatensätze.
- Technische ID ergänzen:
BIGINT IDENTITYoder UUID, je nach Integrationsanforderung. - Bestehende Sätze sauber befüllen.
- Fachliche Schlüssel als
UNIQUEabsichern. - Referenzen schrittweise auf technische IDs umstellen – zuerst in neuen Tabellen und Services.
- Foreign Keys, CHECK-Constraints und NOT NULL erst nach Datenbereinigung aktivieren.
- Kompatibilitäts-Views bereitstellen, damit alte Programme nicht sofort umgebaut werden müssen.
-- Beispielhaft: technische UUID-Spalte ergänzen
ALTER TABLE kundend
ADD COLUMN id CHAR(36) CCSID 1208;
-- Bestehende Datensätze befüllen
UPDATE kundend
SET id = GENERATE_UUID()
WHERE id IS NULL;
-- Danach erst Datenqualität prüfen:
-- 1) Gibt es NULL-Werte?
-- 2) Gibt es Dubletten im fachlichen Schlüssel?
-- 3) Gibt es abhängige Tabellen ohne passenden Parent?
ALTER TABLE kundend
ALTER COLUMN id SET NOT NULL;
ALTER TABLE kundend
ADD CONSTRAINT pk_kundend PRIMARY KEY (id);
ALTER TABLE kundend
ADD CONSTRAINT uq_kundend_mandant_kundennr
UNIQUE (mandant, kundennr);
ROW CHANGE TIMESTAMP-Spalte wird von Db2 automatisch bei Inserts und Updates gesetzt. Das ist praktisch für einfache Delta-Erkennung. Für belastbares Auditing, Wiederanlauf, Löschhistorie oder gemischte Modernisierungsszenarien bleiben Journaling, CDC oder eigene Audit-Tabellen oft die robustere Lösung.6. Referenzielle Integrität gehört in die Datenbank
Foreign-Key-Constraints sind keine doppelte Business-Logik. Sie sind strukturelle Invarianten: Ein Kind-Datensatz darf nicht auf einen nicht existierenden Parent zeigen. Diese Regel gehört dorthin, wo alle Zugriffe vorbeikommen – in die Datenbank.
IBM beschreibt referenzielle Constraints genau in diesem Sinne: Sie stellen sicher, dass Werte einer abhängigen Tabelle nur dann gültig sind, wenn sie auf passende Werte in einer Parent-Tabelle verweisen. Nach Definition werden sie systemweit bei Änderungen über SQL und andere Schnittstellen erzwungen.
ALTER TABLE aufpos
ADD CONSTRAINT fk_aufpos_auftrag
FOREIGN KEY (auftrag_id)
REFERENCES aufkopf (id)
ON DELETE CASCADE
ON UPDATE RESTRICT;
| Szenario | Typische Regel | Begründung |
|---|---|---|
| Kind ist vollständig abhängig | ON DELETE CASCADE |
Auftragsposition ohne Auftrag hat keine fachliche Existenz. |
| Kind hat eigene Bedeutung | RESTRICT oder NO ACTION |
Löschen des Parents soll verhindert werden, solange abhängige Daten existieren. |
| Audit, Recht, Historie | Restrict + Soft Delete | Daten werden logisch deaktiviert, aber nicht unkontrolliert entfernt. |
| Optionale Beziehung | SET NULL nur bewusst |
Nur sinnvoll, wenn ein Kind fachlich ohne Parent weiterbestehen darf. |
Nein. Constraints kosten Prüfung, aber sie schützen Datenqualität systemweit. Bei sauberer Indexierung und bewusstem Design sind sie in Geschäftsanwendungen meist günstiger als jahrelange Datenbereinigung, Sonderlogik und Fehlersuche.
7. Beziehungen korrekt modellieren
1:n – der Klassiker
Ein Kunde hat mehrere Aufträge. Der Auftrag referenziert den Kunden. Nicht umgekehrt.
customers (id PK)
orders (id PK, customer_id FK -> customers.id)
m:n – fast nie nur eine dumme Kreuztabelle
Viele m:n-Beziehungen bekommen in der Praxis eigene Attribute: Menge, Preis zum Zeitpunkt, Rabatt, Status, Reihenfolge, Quelle, Gültigkeit. Dann ist die Verbindungstabelle selbst eine Entität.
CREATE TABLE order_item (
id BIGINT GENERATED ALWAYS AS IDENTITY,
order_id BIGINT NOT NULL,
item_id BIGINT NOT NULL,
position_no INTEGER NOT NULL,
quantity DECIMAL(11,3) NOT NULL,
price_at_order DECIMAL(15,4) NOT NULL,
discount_percent DECIMAL(5,2) NOT NULL DEFAULT 0,
PRIMARY KEY (id),
CONSTRAINT fk_oi_order FOREIGN KEY (order_id)
REFERENCES orders(id) ON DELETE CASCADE,
CONSTRAINT fk_oi_item FOREIGN KEY (item_id)
REFERENCES items(id) ON DELETE RESTRICT,
CONSTRAINT uq_oi_position UNIQUE (order_id, position_no),
CONSTRAINT chk_oi_quantity CHECK (quantity > 0)
);
'1,7,42' oder ein JSON-Array als Ersatz für eine Kernbeziehung. Das erschwert Constraints, Joins, Indizes, Reporting und Datenqualität.8. Neue Tabelle oder neue Spalte?
Eine der häufigsten Modellierungsfragen lautet: Reicht eine neue Spalte – oder brauchen wir eine neue Tabelle?
| Frage | Wenn ja | Wenn nein |
|---|---|---|
| Hat das Objekt einen eigenen Lebenszyklus? | Neue Tabelle | Spalte prüfen |
| Kann es mehrfach vorkommen? | Neue 1:n-Tabelle | Spalte reicht oft |
| Muss es historisiert werden? | Historientabelle mit von/bis oder Version / Temporal Tables | Spalte oder Timestamp |
| Wird es von anderen Tabellen referenziert? | Eigene Entität | Attribut der bestehenden Entität |
| Ist es selten befüllt und fachlich optional? | Eigene Detailtabelle oder kontrollierte Zusatzstruktur | Nullable Spalte, wenn Semantik klar ist |
| Ist es nur Anzeige- oder Cache-Wert? | Nur bewusst denormalisieren | Berechnen oder View nutzen |
SYSTEM VERSIONING (Temporal Tables). Damit übernimmt die Datenbank automatisch die Historisierung von Änderungen. Das ist oft eleganter als selbst gebaute Historientabellen und funktioniert transparent für bestehende Anwendungen.9. EAV, JSON und Custom Fields
Entity-Attribute-Value, kurz EAV, speichert Attribute zeilenweise statt spaltenweise. Das wirkt flexibel, verschiebt aber Struktur aus dem Modell in die Daten. Typisierung, Constraints, Indizes und Reporting werden dadurch deutlich schwieriger.
CREATE TABLE item_eav (
item_id BIGINT NOT NULL,
attribute_name VARCHAR(80) NOT NULL,
attribute_value VARCHAR(4000),
PRIMARY KEY (item_id, attribute_name)
);
Warum EAV bei Kerndaten weh tut
- Typverlust: Zahlen, Datumswerte und Flags landen als Text.
- Schwache Validierung:
NOT NULL,CHECKundFOREIGN KEYgreifen nur indirekt. - Komplexe Abfragen: Aus einfachen Spalten werden Self-Joins, Pivot-Logik und
MAX(CASE ...). - Schwieriges Reporting: BI-Tools wollen stabile Spalten, nicht dynamische Attributlisten.
- Indexprobleme: Ein Index auf
attribute_namehilft nicht automatisch für Wertvergleiche mit Typumwandlung.
Wann EAV oder JSON vertretbar sein kann
- Sehr viele potenzielle Zusatzattribute, von denen die meisten leer sind.
- Attribute werden kundenspezifisch oder mandantenspezifisch definiert.
- Die Daten sind nicht Teil zentraler Integritätsregeln.
- Reporting erfolgt über kontrollierte Views, Materialisierungen oder definierte Exportmodelle.
CREATE TABLE attribute_def (
attribute_id BIGINT GENERATED ALWAYS AS IDENTITY,
attribute_key VARCHAR(80) NOT NULL,
data_type CHAR(1) NOT NULL,
required SMALLINT NOT NULL DEFAULT 0,
PRIMARY KEY (attribute_id),
CONSTRAINT uq_attribute_key UNIQUE (attribute_key),
CONSTRAINT chk_attribute_type CHECK (data_type IN ('S','N','T','B'))
);
CREATE TABLE item_attribute (
item_id BIGINT NOT NULL,
attribute_id BIGINT NOT NULL,
val_string VARCHAR(4000),
val_number DECIMAL(31,10),
val_timestamp TIMESTAMP,
val_boolean SMALLINT,
PRIMARY KEY (item_id, attribute_id),
CONSTRAINT fk_item_attr_def
FOREIGN KEY (attribute_id) REFERENCES attribute_def(attribute_id),
CONSTRAINT chk_exactly_one_value CHECK (
(CASE WHEN val_string IS NULL THEN 0 ELSE 1 END) +
(CASE WHEN val_number IS NULL THEN 0 ELSE 1 END) +
(CASE WHEN val_timestamp IS NULL THEN 0 ELSE 1 END) +
(CASE WHEN val_boolean IS NULL THEN 0 ELSE 1 END) = 1
)
);
10. Normalisierung pragmatisch erklärt
Normalisierung reduziert Redundanz und verhindert typische Datenanomalien. In der Praxis geht es nicht darum, jedes Modell akademisch bis zur fünften Normalform zu treiben. Es geht darum, Stammdaten sauber zu halten und Redundanz nur bewusst einzusetzen.
auftrag (
aufnr,
kundennr,
kundenname,
kundenstrasse,
kundenplz,
kundenort,
...
)
Ändert sich die Kundenadresse, muss sie in allen Aufträgen nachgezogen werden. Wird sie nur teilweise aktualisiert, entstehen widersprüchliche Daten. Das ist die klassische Update-Anomalie.
| Normalform | Pragmatische Bedeutung |
|---|---|
| 1NF | Atomare Werte, keine kommagetrennten Listen, keine wiederholenden Spaltengruppen. |
| 2NF | Nicht-Schlüsselattribute hängen vom ganzen Schlüssel ab, nicht nur von einem Teil. |
| 3NF / BCNF | Keine versteckten Abhängigkeiten zwischen Nicht-Schlüsselattributen. |
| 4NF / 5NF | Relevant bei sehr komplexen Mehrfachabhängigkeiten und Spezialfällen. |
11. Anti-Patterns im Überblick
- Sprechende Primärschlüssel als Standard.
VARCHAR(5000), CLOB oder JSON als Universaltyp für strukturierte Kerndaten.- Kommagetrennte Listen in einer Spalte.
- Statuswerte als
CHAR(1)ohneCHECKoder Lookup-Tabelle. NULLohne klare Semantik: unbekannt, nicht zutreffend, leer, noch nicht berechnet?- Spalten wie
telefon1,telefon2,telefon3statt eigener 1:n-Struktur. - Historisierung ohne
valid_from,valid_to, Version oder Audit-Konzept. - Soft Delete ohne Archivierungs- und Purge-Strategie.
- Datenintegrität ausschließlich in RPG, Java oder .NET.
- EAV für Kerndaten statt für echte Customizing-Szenarien.
ALTER TABLE aufkopf
ADD CONSTRAINT chk_aufkopf_status
CHECK (status IN ('O','B','F','S'));
-- O = offen, B = bestätigt, F = fakturiert, S = storniert
12. Praktische Checkliste
- Jede Kernentität hat einen stabilen technischen Primärschlüssel.
- Fachliche Schlüssel sind als
UNIQUE-Constraint gesichert. - Mandantenfähigkeit ist explizit modelliert und nicht heimlich in Nummernkreise gepresst.
- Wichtige Beziehungen haben deklarative Foreign Keys.
ON DELETEundON UPDATEsind fachlich entschieden und dokumentiert.- Statuswerte, Wertebereiche und Pflichtfelder sind mit
CHECK,NOT NULLoder Lookup-Tabellen abgesichert. - Historisierung, Audit und Löschstrategie sind vor dem ersten Produktivlauf geklärt.
- Keine kommagetrennten Listen, keine wiederholenden Spaltengruppen, kein JSON als Ersatz für Kernrelationen.
- EAV oder Custom Fields werden nur kontrolliert und nicht für zentrale Geschäftsobjekte eingesetzt.
- Views kapseln Kompatibilität und Soft-Delete-Filter, statt Regeln in jedem Tool neu zu bauen.
- Migrationen werden mit Datenprofiling, Testdaten, Rollback-Plan und Messung vorbereitet.
13. Fazit
UNIQUE, nicht zwingend als Primary Key. Lege referenzielle Integrität in die Datenbank. Modellier Beziehungen explizit. Nutze EAV, JSON und Denormalisierung nur bewusst. Und vor allem: Baue Modelle so, dass nicht nur das heutige RPG-Programm damit klarkommt – sondern auch das Reporting, die API, die Migration, die Fusion und der Entwickler, der in zehn Jahren fluchend vor Deinem Schema sitzt.Glossar
Zentrale Begriffe der relationalen Modellierung – kompakt erklärt.
- Entität
- Fachliches Objekt mit stabiler Identität und eigenem Lebenszyklus, zum Beispiel Kunde, Auftrag, Artikel oder Rechnung.
- Primary Key
- Eindeutiger, nicht-nullbarer Schlüssel einer Tabelle. Er sollte stabil, minimal und dauerhaft unveränderlich sein.
- Surrogate Key
- Künstlicher technischer Schlüssel ohne fachliche Bedeutung, zum Beispiel Identity-Wert oder UUID.
- Business Key / Natural Key
- Fachlicher Schlüssel wie Kundennummer, Artikelnummer oder Vertragsnummer. Wichtig für Anwender und Schnittstellen, aber nicht automatisch ideal als Primary Key.
- Foreign Key
- Deklarative Datenbankregel, die sicherstellt, dass ein Wert in einer Child-Tabelle auf einen existierenden Parent-Datensatz verweist.
- Referenzielle Integrität
- Eigenschaft eines Datenmodells, bei der Beziehungen zwischen Tabellen konsistent bleiben und keine verwaisten Datensätze entstehen.
- DDS
- Data Description Specifications: klassische IBM-i-Technik zur Definition physischer und logischer Dateien.
- Db2 for i
- Die integrierte relationale Datenbank der IBM-i-Plattform.
- Logical File
- Klassisches IBM-i-Objekt für Zugriffspfade und Sichten auf physische Dateien. Nützlich, aber kein Ersatz für deklarative SQL-Constraints.
- Identity Column
- Spalte, deren Werte von Db2 automatisch generiert werden, zum Beispiel
BIGINT GENERATED ALWAYS AS IDENTITY. - UUID
- 128-Bit-Identifier. Db2 for i kann per
GENERATE_UUID()UUID v4 erzeugen; UUID v7 ist zeitbasiert und wird häufig in der Anwendung erzeugt. - ROW CHANGE TIMESTAMP
- Db2-Spalte, die bei Inserts und Updates automatisch aktualisiert wird. Nützlich für Delta-Erkennung, aber nicht automatisch gleichbedeutend mit vollständigem fachlichem Auditing.
- Normalisierung
- Regelwerk zur Reduktion von Redundanz und zur Vermeidung von Insert-, Update- und Delete-Anomalien.
- EAV
- Entity-Attribute-Value: flexibles, aber oft problematisches Muster, bei dem Attribute zeilenweise als Schlüssel-Wert-Paare gespeichert werden.
- Soft Delete
- Logisches Löschen über Flag oder Zeitstempel statt physischem DELETE. Muss mit Archivierungs- und Purge-Strategie kombiniert werden.
- CDC
- Change Data Capture: Verfahren, um Datenänderungen zu erkennen und an andere Systeme weiterzugeben.
- ETL / ELT
- Datenintegration ins Data-Warehouse. Beide Varianten umgehen oft Anwendungscode und profitieren deshalb von robusten Datenbankregeln.
- Denormalisierung
- Bewusste Redundanz für Performance, Reporting oder Vereinfachung. Sollte dokumentiert und technisch abgesichert sein.
- Temporal Tables / SYSTEM VERSIONING
- Db2 for i Feature zur automatischen, transparenten Historisierung von Tabellenänderungen durch die Datenbank.
Quellen & weiterführende Ressourcen
- IBM Docs: Db2 for i SQL Reference 7.6
- IBM Docs: CREATE TABLE – Db2 for i
- IBM Docs: Referential constraints – Db2 for i
- IBM Docs: GENERATE_UUID – Db2 for i
- RFC 9562: Universally Unique IDentifiers (UUIDs)
- IBM Docs: CREATE VIEW – Db2 for i
- Martin Fowler: Patterns of Enterprise Application Architecture – Catalog
- E. F. Codd: A Relational Model of Data for Large Shared Data Banks
Transparenzhinweis
Die Inhalte auf tiny-tool.de werden sorgfältig recherchiert, redaktionell geprüft und regelmäßig aktualisiert. Quellen und Zitate werden nachvollziehbar angegeben. Dennoch übernehmen wir keine Garantie für Richtigkeit, Vollständigkeit oder Aktualität der bereitgestellten Informationen. Irrtümer sind nicht ausgeschlossen.
Urheber & redaktionelle Unterstützung: Texte auf tiny-tool.de sind geistige Werke der Redaktion (Endredaktion: Guido Zeuner). Digitale Werkzeuge – darunter auch KI-basierte Hilfsmittel – kommen lediglich als Assistenzsysteme bei Recherche, Struktur oder Sprachoptimierung zum Einsatz. Auswahl der Inhalte, Struktur, Argumentation und finale Textfassung stammen von uns als natürlichen Personen; KI-Systeme sind keine Urheber.
Reichweitenmessung (VG Wort / METIS): Zur Ermittlung der Textreichweite werden Zählmarken der VG Wort eingesetzt. Aus technischen Gründen werden diese beim Aufruf der Seite geladen und können derzeit nicht über das Cookie-Banner blockiert werden, da keine Cookies gesetzt werden. Die Messung dient ausschließlich der Reichweitenstatistik; personenbezogene Profile werden nicht erstellt. Mehr dazu in unseren Datenschutzhinweisen.
Bitte beachte: Die Inhalte dienen ausschließlich der allgemeinen Information und stellen keine fachliche Beratung (z. B. rechtlicher, steuerlicher oder finanzieller Art) dar. Die Nutzung der Inhalte erfolgt auf eigene Verantwortung. Eine Haftung für Schäden materieller oder immaterieller Art ist ausgeschlossen, sofern kein vorsätzliches oder grob fahrlässiges Verschulden vorliegt.
Werbung & Affiliate-Links: Einige Beiträge enthalten werbliche Hinweise oder sogenannte Affiliate-Links. Diese sind entsprechend gekennzeichnet. Beim Klick entstehen dir keine zusätzlichen Kosten – wir erhalten ggf. eine kleine Provision.
Markenrechtlicher Hinweis: Alle Markennamen, Logos und Produktbezeichnungen sind Eigentum der jeweiligen Rechteinhaber und werden nur zur identifizierenden Beschreibung verwendet. Es besteht keinerlei Verbindung zu den genannten Unternehmen.
Externe Links: Diese Website enthält Verweise auf externe Websites Dritter. Trotz sorgfältiger Prüfung übernehmen wir keine Verantwortung für deren Inhalte. Bei Bekanntwerden rechtswidriger Inhalte entfernen wir entsprechende Links umgehend.



tiny-tool.de
tiny-tool.de