DatenintegritĂ€t gefĂ€hrdet => Wie ich dafĂŒr sorge, dass Daten konsistent und korrekt bleiben

Wenn „passt schon“ irgendwann nicht mehr passt

Access macht vieles einfach. Aber auch vieles kaputt, wenn man nicht aufpasst.

SQL Server ist stabil – aber auch nur, wenn man ihm Regeln gibt.

Ich zeig Dir, wie ich DatenintegritÀt so absichere, dass Du nachts ruhig schlafen kannst.

Drei Sorten IntegritÀt, die Du im Griff haben musst

  • EntitĂ€tsintegritĂ€t → jeder Datensatz hat eine eindeutige ID
  • Referentielle IntegritĂ€t → verknĂŒpfte DatensĂ€tze passen zusammen
  • DomĂ€nenintegritĂ€t → Werte sind gĂŒltig, vollstĂ€ndig, im Rahmen

Wenn eine davon fehlt, wird Access unbrauchbar und SQL-Tabellen unbrauchbar genau.

EntitĂ€tsintegritĂ€t: PrimĂ€rschlĂŒssel ist Pflicht

Access

Jede Tabelle braucht ein PrimĂ€rschlĂŒsselfeld.
Kein zusammengesetzter Quatsch.
Autowert ist okay – aber nicht als Ersatz fĂŒr Logik.

CREATE TABLE Kunden (
  KundenID AUTOINCREMENT PRIMARY KEY,
  Name TEXT(100) NOT NULL
);

SQL Server

CREATE TABLE Kunden (
  KundenID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(100) NOT NULL
);

Fehlt der SchlĂŒssel, kannst Du keine Beziehungen sauber abbilden.

Referentielle IntegritÀt: Beziehungen mit Konsequenz

Access

Im Beziehungsfenster:
„Referentielle IntegritĂ€t“ aktivieren

  • Kaskadierendes Löschen nur, wenn Du’s wirklich willst.

SQL Server

ALTER TABLE Bestellungen
ADD CONSTRAINT FK_Bestellungen_Kunden
FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID);

Willst Du nicht, dass gelöschte Kunden alle Bestellungen mitreißen?

Dann:

ON DELETE NO ACTION

DomĂ€nenintegritĂ€t: Regeln fĂŒr jeden Wert

Access

  • Datentypen richtig wĂ€hlen
  • Eingabemasken (wenn nötig)
  • Validierungsregeln
Me!txtPLZ.ValidationRule = "Like '#####'"
Me!txtPLZ.ValidationText = "Bitte genau 5 Ziffern."

Oder in der Tabelle selbst:

Feld: PLZ  
GĂŒltigkeitsregel: Is Null Or Like "#####"

SQL Server

ALTER TABLE Kunden
ADD CONSTRAINT CK_Kunden_PLZ
CHECK (PLZ LIKE '[0-9][0-9][0-9][0-9][0-9]');

Oder ENUM-Ă€hnlich ĂŒber eine Referenztabelle + FK.

Eingabefehler abfangen: VBA mit PrĂŒfung

Private Sub btnSpeichern_Click()
    If IsNull(Me!txtKunde) Then
        MsgBox "Kunde fehlt.", vbExclamation
        Exit Sub
    End If

    If Len(Me!txtPLZ) <> 5 Or Not IsNumeric(Me!txtPLZ) Then
        MsgBox "PLZ ungĂŒltig.", vbExclamation
        Exit Sub
    End If

    DoCmd.RunCommand acCmdSaveRecord
End Sub

So vermeidest Du MĂŒll in der Datenbank.

Transaktionen verwenden – auch in Access

VBA-Beispiel mit DAO

Dim db As DAO.Database
Set db = CurrentDb

db.BeginTrans

On Error GoTo Fehler

db.Execute "INSERT INTO Kunden (Name) VALUES ('Muster GmbH')", dbFailOnError
db.Execute "INSERT INTO Auftraege (KundenID, Betrag) VALUES (42, 1000)", dbFailOnError

db.CommitTrans
Exit Sub

Fehler:
    db.Rollback
    MsgBox "Fehler beim Speichern: " & Err.Description

SQL Server (T-SQL)

BEGIN TRANSACTION;

INSERT INTO Kunden (Name) VALUES ('Muster GmbH');
INSERT INTO Auftraege (KundenID, Betrag) VALUES (SCOPE_IDENTITY(), 1000);

COMMIT;

Oder bei Fehler:

ROLLBACK;

Transaktionen sind Dein Airbag.

PrĂŒfung der DatenqualitĂ€t

SQL Server: Dubletten finden

SELECT KundenID, COUNT(*) 
FROM Kunden 
GROUP BY KundenID 
HAVING COUNT(*) > 1;

Access: UngĂŒltige FremdschlĂŒssel

SELECT Bestellungen.*
FROM Bestellungen
LEFT JOIN Kunden ON Bestellungen.KundenID = Kunden.KundenID
WHERE Kunden.KundenID IS NULL;

Ergebnis: DatenmĂŒll.
Ursache: schlechte Kontrolle.

Tabelle: Maßnahmen zur DatenintegritĂ€t

BereichAccessSQL Server
PrimĂ€rschlĂŒsselAutowert, eindeutige FelderIDENTITY, UNIQUE
FremdschlĂŒsselBeziehungen mit IntegritĂ€tFK mit ON DELETE/ON UPDATE
GĂŒltigkeitsprĂŒfungValidierungsregel, EingabemaskeCHECK, DEFAULT, FK
EingabekontrolleVBA-FormularlogikStored Procedures + Constraints
TransaktionenBeginTrans + RollbackBEGIN TRAN + ROLLBACK
Reporting-ChecksAbfragen mit LEFT JOIN IS NULLViews, Alerts, Triggers

Mein Setup fĂŒr saubere Daten

BereichVorgehen
Tabellenstrukturgetrennt nach EntitÀten, sauber mit PK/FK
EingabenMasken mit VBA-Logik
Automatische PrĂŒfungnĂ€chtliche Reports mit LEFT JOIN-Abfragen
FehlervermeidungVBA-Transaktionen + RĂŒckmeldungen
AufrÀumenSkripte mit Logging, keine Ad-hoc-Löschungen

Wer Daten nicht schĂŒtzt, hat irgendwann keine mehr, auf die er sich verlassen kann.

DatenintegritĂ€t ist kein Luxus – sie ist die Grundlage fĂŒr alles.

Und Access wie SQL Server können das – wenn Du es ihnen beibringst.

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert