21. Dez. 2024·7 Min. Lesezeit

Datenbank‑Constraints für Formularvalidierung in No‑Code‑Apps

Nutze Datenbank‑Constraints für Formularvalidierung, um schlechte Daten früh zu blockieren, klare Fehler zu zeigen und No‑Code‑Apps teamübergreifend konsistent zu halten.

Datenbank‑Constraints für Formularvalidierung in No‑Code‑Apps

Warum sich schlechte Formulardaten so schnell ausbreiten

Schlechte Daten bleiben selten an einem Ort. Ein falscher Wert in einem Formular kann kopiert, referenziert und von allen Teilen der App vertraut werden, die damit arbeiten.

Es beginnt oft klein: Jemand tippt eine E‑Mail mit einem trailing space, wählt den falschen Kunden aus oder gibt eine negative Menge ein, weil das Feld es zulässt. Das Formular akzeptiert es, also behandelt das System es als korrekt.

Dann passiert die Welle schnell. Reports zeigen falsche Summen, Automatisierungen laufen auf den falschen Datensätzen, und Kundenmitteilungen ziehen unordentliche Felder und wirken unprofessionell. Teams bauen dann Workarounds wie private Tabellen, was noch mehr Inkonsistenz schafft. Am schlimmsten: derselbe falsche Wert taucht später wieder auf, weil er als Option erscheint oder in neue Datensätze kopiert wird.

Daten später zu bereinigen ist langsam und riskant, weil Cleanup selten ein einzelner Edit ist. Du musst jeden Ort finden, an dem der falsche Wert gelandet ist, verwandte Datensätze updaten und alles, was davon abhängt, erneut prüfen. Eine „einfache“ Korrektur kann Workflows zerschießen, doppelte Benachrichtigungen auslösen oder Audit‑Historie verwirren.

Der Sinn von Datenbank‑Constraints für Formularvalidierung ist, diese Kettenreaktion bereits im ersten Schritt zu stoppen. Wenn die Datenbank unmögliche oder inkonsistente Daten ablehnt, verhinderst du stille Fehler und bekommst einen klaren Moment, um hilfreiches Feedback in der UI zu zeigen.

Stell dir ein internes Bestellformular in einem No‑Code‑Tool wie AppMaster vor. Wenn eine Bestellung mit fehlender Kundenverknüpfung oder doppelter Bestellnummer gespeichert wird, kann das Rechnungen, Versandaufträge und Umsatzreports vergiften. Das Abfangen beim Absenden hält alles stromabwärts sauber und spart später mühsame Bereinigungen.

Datenbank‑Constraints, ohne Fachjargon erklärt

Datenbank‑Constraints sind einfache Regeln, die in der Datenbank leben. Sie laufen jedes Mal, wenn Daten gespeichert werden — egal woher sie kommen: ein Webformular, ein mobiler Bildschirm, ein Import oder ein API‑Aufruf. Wenn eine Regel verletzt wird, lehnt die Datenbank das Speichern ab.

Das ist der große Unterschied zur reinen UI‑Validierung. Ein Formular kann Felder prüfen, bevor du auf „Speichern“ klickst, aber diese Prüfungen sind leicht zu übersehen oder zu umgehen. Ein anderer Bildschirm vergisst vielleicht dieselbe Regel. Eine Automation schreibt vielleicht direkt in die Datenbank. Bald hast du Daten, die an einer Stelle korrekt aussehen und an anderer Stelle Reports kaputtmachen.

Wenn man von Datenbank‑Constraints für Formularvalidierung spricht, meint man das: Lass die Datenbank das letzte Urteil fällen, und lass die UI den Nutzer so führen, dass er selten gegen diese Wand läuft.

Die meisten echten Apps kommen mit drei Basics weit:

  • Unique: „Dieser Wert muss einzigartig sein.“ Beispiel: E‑Mail, Mitarbeiter‑ID, Rechnungsnummer.
  • Check: „Diese Bedingung muss wahr sein.“ Beispiel: quantity > 0, start_date <= end_date.
  • Foreign key: „Das muss auf einen echten Datensatz in einer anderen Tabelle zeigen.“ Beispiel: jede Bestellung muss auf einen existierenden Kunden verweisen.

Constraints sind in No‑Code‑Apps noch wichtiger, weil du meist mehrere Wege hast, Daten zu erstellen oder zu aktualisieren. Du könntest eine Web‑App für Admins, eine Mobile‑App für Außendienstmitarbeiter und automatisierte Prozesse haben, die Datensätze im Hintergrund schreiben. Constraints halten all diese Pfade konsistent.

Sie machen Fehler auch klarer, wenn du sie einplanst. Statt schlechte Daten hereinzulassen und später zu reparieren, kannst du eine fokussierte Meldung wie „Diese Rechnungsnummer existiert bereits“ oder „Bitte wähle einen gültigen Kunden“ anzeigen und die Datenbank von Anfang an sauber halten.

Vom Constraint zur klaren, menschlichen Fehlermeldung

Constraints sind gut darin, schlechte Daten zu stoppen, aber rohe Datenbankfehler sind meist für Entwickler geschrieben, nicht für die Person, die ein Formular ausfüllt. Das Ziel ist einfach: behalte die Regel in der Datenbank und übersetze das Scheitern in eine Nachricht, die erklärt, was passiert ist und wie man es behebt.

Behandle jeden Constraint wie einen kleinen „Fehlervertrag“ mit zwei Teilen: was ist falsch, und wie behebt man es. Deine UI bleibt freundlich, ohne die Datenregeln zu verwässern.

Ein paar Übersetzungen, die gut funktionieren:

  • Schlecht: „Unique constraint violation on users_email_key"

  • Gut: „Diese E‑Mail wird bereits verwendet. Melde dich an oder benutze eine andere E‑Mail.“

  • Schlecht: „Check constraint failed: order_total_positive"

  • Gut: „Der Gesamtbetrag muss größer als 0 sein. Füge mindestens einen Artikel hinzu oder passe die Menge an.“

  • Schlecht: „Foreign key violation on customer_id"

  • Gut: „Wähle einen gültigen Kunden. Falls der Kunde neu ist, lege ihn zuerst an.“

Wo du die Meldung zeigst, ist genauso wichtig wie die Worte. Platziere ein Feld‑spezifisches Fehlerhinweis direkt neben dem Feld. Für übergreifende Regeln (wie „Enddatum muss nach dem Startdatum liegen“) ist ein Banner auf Formularebene oft klarer.

Halte die Menge der Meldestile klein. Inline‑Feldtext für die meisten Probleme, ein kleines Banner für übergreifende Regeln und ein Toast für kurze Bestätigungen (nicht für detailreiche Korrekturen) reicht meist aus.

Stelle außerdem sicher, dass die Wortwahl auf Web und Mobile konsistent ist. Wenn dein Web‑Formular „Wähle einen gültigen Kunden“ sagt, sollte die Mobile‑App nicht „Invalid FK“ anzeigen. Verwende dieselben kurzen Verben („Wähle“, „Gib ein“, „Entferne“) und denselben Ton, damit Nutzer wissen, was sie erwarten können.

Wenn du in AppMaster baust, gestaltest du diese Zuordnung bewusst: die Datenbank bleibt streng, während die UI‑Logik Fehler in ruhige, konkrete Hinweise übersetzt.

Schritt‑für‑Schritt: Regeln zuerst bauen, dann das Formular

Wenn du das Formular zuerst designst, jagst du am Ende ständig Edge‑Cases hinterher. Wenn du die Datenregeln zuerst definierst, wird die UI einfacher, weil sie bestehende Regeln widerspiegelt.

Eine praktische Bau‑Reihenfolge:

  1. Schreibe die wenigen Felder auf, die wirklich zählen. Definiere „gültig“ in einfachen Worten. Beispiel: „E‑Mail muss einzigartig sein“, „Quantity muss 1 oder mehr sein“, „Jede Bestellung muss zu einem Kunden gehören.“
  2. Modelliere Tabellen und Beziehungen. Entscheide, was zu was gehört, bevor du Bildschirme zeichnest.
  3. Füge Constraints für die nicht verhandelbaren Regeln hinzu. Nutze Unique für Duplikate, Check für immer-wahre Regeln und Foreign Keys für Beziehungen.
  4. Baue die UI passend zu den Constraints. Markiere Pflichtfelder, verwende passende Eingabetypen und füge einfache Hinweise hinzu. Die UI sollte den Nutzer leiten, aber die Datenbank bleibt das letzte Tor.
  5. Versuche, es absichtlich kaputt zu machen. Füge unordentliche Werte ein, probiere Duplikate und wähle fehlende verwandte Datensätze. Verbessere dann Labels und Fehlermeldungen, bis klar ist, was zu korrigieren ist.

Kurzes Beispiel

Angenommen, du baust ein internes „Neue Bestellung“-Formular. Du lässt den Nutzer vielleicht nach Kundenname suchen, aber die Datenbank sollte nur eine echte Customer‑ID akzeptieren (Foreign Key). In der UI wird das zu einem durchsuchbaren Picker. Wenn der Nutzer ohne Auswahl absendet, kann die Meldung einfach „Wähle einen Kunden“ lauten, statt später mit einer verwirrenden Speicherfehlermeldung zu scheitern.

So bleiben Regeln über Web und Mobile hinweg konsistent, ohne fragile Logik überall zu wiederholen.

Unique‑Constraints, die reale Duplikate verhindern

Menschliche Fehlermeldungen anzeigen
Übersetze Constraint‑Fehler in ruhige, feldbezogene Meldungen, die Nutzer schnell beheben können.
Fehler zuordnen

Ein Unique‑Constraint ist der einfachste Weg, um „das Gleiche, anders eingegeben“ zu stoppen. Die Datenbank lehnt einen doppelten Wert ab, selbst wenn das Formular ihn übersehen hat.

Verwende Unique‑Constraints für Werte, die Nutzer leicht aus Versehen wiederholen: E‑Mails, Benutzernamen, Rechnungsnummern, Asset‑Tags, Mitarbeiter‑IDs oder Ticketnummern aus Tabellen.

Die erste Entscheidung ist der Scope. Manche Werte müssen systemweit eindeutig sein (ein Benutzername). Andere nur innerhalb einer Elterngruppe (Rechnungsnummer pro Firma, Asset‑Tag pro Lager). Wähle den Scope bewusst, damit du keine gültigen Daten blockierst.

Eine praktische Einteilung:

  • Global einzigartig: ein Wert, ein Datensatz überall (Benutzername, öffentlicher Handle)
  • Pro Organisation einzigartig: innerhalb einer Firma/Team (invoice_number + org_id)
  • Pro Standort einzigartig: innerhalb eines Standorts (asset_tag + location_id)

Wie du mit Konflikten umgehst, ist genauso wichtig wie die Regel selbst. Wenn ein Unique‑Constraint scheitert, sage nicht nur „existiert bereits“. Nenne, was kollidiert ist und was der Nutzer als Nächstes tun kann. Beispiel: „Rechnungsnummer 1047 existiert bereits für Acme Co. Versuche 1047‑2 oder öffne die bestehende Rechnung.“ Wenn deine UI den existierenden Datensatz sicher referenzieren kann, hilft ein kleiner Hinweis wie Erstellungsdatum oder Besitzer, ohne sensible Details preiszugeben.

Beim Editieren ist Vorsicht nötig. Ein häufiger Fehler ist, ein Update wie einen neuen Datensatz zu behandeln und eine „Duplikat“-Meldung gegen sich selbst auszulösen. Sorge dafür, dass die Speichermethode den aktuellen Datensatz erkennt, damit er sich nicht mit sich selbst vergleicht.

In AppMaster definierst du die Unique‑Regel zuerst im Data Designer und spiegelst sie dann im Formular mit einer freundlichen Meldung wider. Die Datenbank bleibt das finale Tor, und die UI bleibt ehrlich, weil sie eine echte Regel erklärt.

Check‑Constraints für Regeln, die immer gelten müssen

Ein Check‑Constraint ist eine Regel, die die Datenbank bei jeder Zeile durchsetzt. Wenn jemand einen Wert eingibt, der die Regel bricht, schlägt das Speichern fehl. Genau das willst du für Regeln, die niemals verletzt werden dürfen — auch wenn Daten von verschiedenen Bildschirmen, Importen oder Automationen kommen.

Die besten Checks sind einfach und vorhersehbar. Wenn ein Nutzer die Regel nicht erraten kann, wird er immer wieder Fehler bekommen. Halte Checks auf Fakten fokussiert, nicht auf komplizierte Policy.

Gängige Check‑Constraints, die sich schnell auszahlen:

  • Bereiche: quantity zwischen 1 und 1000, Alter zwischen 13 und 120
  • Zugewiesene Zustände: status muss Draft, Submitted, Approved oder Rejected sein
  • Positive Zahlen: amount > 0, discount zwischen 0 und 100
  • Datumsreihenfolge: end_date >= start_date
  • Einfache Logik: wenn status = Approved dann approved_at nicht null

Der Trick, damit Checks freundlich wirken, ist die Formulierung der UI‑Meldung. Wiederhole nicht den Constraint‑Namen. Sag dem Nutzer, was er ändern muss.

Gute Muster:

  • „Menge muss zwischen 1 und 1000 liegen.“
  • „Wähle einen Status: Draft, Submitted, Approved oder Rejected.“
  • „Das Enddatum muss gleich oder später als das Startdatum sein.“
  • „Der Betrag muss größer als 0 sein.“

In einem No‑Code‑Builder wie AppMaster ist es in Ordnung, dieselben Checks im Formular für sofortiges Feedback zu spiegeln, aber behalte den Datenbank‑Check als finale Absicherung. So gilt die Regel auch, wenn später ein neuer Bildschirm hinzugefügt wird.

Foreign Keys, die Beziehungen echt halten

Schütze deine Daten mit einfachen Checks
Durchsetze immer-wahre Regeln wie quantity > 0 und Startdatum vor Enddatum.
Checks hinzufügen

Ein Foreign Key (FK) erzwingt ein einfaches Versprechen: wenn ein Feld sagt, es verweist auf einen anderen Datensatz, muss dieser Datensatz existieren. Wenn eine Order eine CustomerId hat, lehnt die Datenbank jede Bestellung ab, die auf einen Kunden verweist, der nicht in der Customers‑Tabelle ist.

Das ist wichtig, weil sich in Beziehungsfeldern oft „fast richtige“ Daten zeigen. Jemand tippt den Kundennamen leicht falsch, fügt eine alte ID ein oder wählt einen Datensatz, der gestern gelöscht wurde. Ohne FK sehen diese Fehler in Ordnung aus, bis Reporting, Rechnungswesen oder Support Probleme bekommen.

Das UI‑Muster ist einfach: ersetze Freitext durch sichere Auswahlmöglichkeiten. Statt eines Texteingabefelds für „Kunde“ nutze ein Select, eine Suche oder Autocomplete, das hinter den Kulissen die Kunden‑ID schreibt. In einem No‑Code‑Builder (zum Beispiel mit AppMaster UI‑Komponenten, die an deine Modelle gebunden sind) heißt das meist, ein Dropdown oder eine Suchliste an die Customers‑Tabelle zu binden und die ausgewählte Referenz zu speichern, nicht das Label.

Wenn der referenzierte Datensatz fehlt oder gelöscht wurde, entscheide das Verhalten vorher. Die meisten Teams wählen eine dieser Strategien:

  • Verhindere Löschung, solange verwandte Datensätze existieren (üblich für Kunden, Produkte, Abteilungen)
  • Archivieren statt Löschen (Historie erhalten, ohne Beziehungen zu brechen)
  • Cascade Delete nur, wenn es wirklich sicher ist (selten für Geschäfts‑Daten)
  • Setze die Referenz nur dann auf leer, wenn die Beziehung optional ist

Plane auch den „verwandten Datensatz erstellen“-Flow. Ein Formular sollte Nutzer nicht zwingen, die Seite zu verlassen, einen Kunden woanders anzulegen und dann alles neu einzutippen. Ein praktischer Ansatz ist eine „Neuer Kunde“-Aktion, die den Kunden zuerst anlegt, dann die neue ID zurückgibt und automatisch auswählt.

Wenn ein FK scheitert, zeige keine rohe DB‑Meldung. Sag in einfachen Worten, was passiert ist: „Wähle bitte einen existierenden Kunden (der ausgewählte Kunde existiert nicht mehr).“ Dieser einzelne Satz verhindert, dass eine kaputte Beziehung sich weiter ausbreitet.

Umgang mit Constraint‑Fehlern im UI‑Ablauf

Ein sauberes internes Bestelltool ausliefern
Erstelle ein New‑Order-Formular, das Duplikate und fehlende Kunden beim Speichern blockiert.
Mit dem Bau beginnen

Gute Formulare fangen Fehler früh ab, aber sie sollten nicht so tun, als wären sie das letzte Urteil. Die UI hilft dem Nutzer, schneller zu werden; die Datenbank garantiert, dass nichts Schlimmes gespeichert wird.

Client‑seitige Checks sind für offensichtliche Dinge: ein Pflichtfeld ist leer, eine E‑Mail hat kein @ oder eine Zahl liegt weit außerhalb realistischer Werte. Diese sofortige Rückmeldung macht das Formular reaktionsschnell und reduziert fehlgeschlagene Übermittlungen.

Server‑seitige Checks sind dort, wo Constraints ihre wirkliche Arbeit leisten. Selbst wenn die UI etwas übersieht (oder zwei Personen gleichzeitig absenden), blockiert die Datenbank Duplikate, ungültige Werte und gebrochene Beziehungen.

Wenn ein Constraint‑Fehler vom Server zurückkommt, halte die Antwort vorhersehbar:

  • Bewahre alle Nutzereingaben im Formular. Setze die Seite nicht zurück.
  • Hebe das Feld hervor, das das Problem verursacht hat, und füge eine kurze Nachricht daneben.
  • Wenn mehrere Felder betroffen sind, zeige eine Top‑Meldung und markiere trotzdem das passendste Feld.
  • Biete eine sichere nächste Aktion an: Wert bearbeiten oder den existierenden Datensatz öffnen, wenn das sinnvoll ist.

Protokolliere schließlich, was passiert ist, damit du das Formular verbessern kannst. Erfasse den Constraint‑Namen, Tabelle/Feld und die Nutzeraktion, die es ausgelöst hat. Wenn ein Constraint häufig fehlschlägt, füge einen kleinen Hinweis in der UI hinzu oder eine zusätzliche client‑seitige Prüfung. Ein plötzlicher Anstieg kann auch auf einen verwirrenden Bildschirm oder eine kaputte Integration hinweisen.

Beispiel: ein internes Bestellformular, das über die Zeit sauber bleibt

Stell dir ein einfaches internes Tool vor, das Vertrieb und Support nutzen: ein „Create Order“-Formular. Es wirkt harmlos, berührt aber die wichtigsten Tabellen in deiner Datenbank. Wenn das Formular einmal schlechte Eingaben akzeptiert, verbreiten sich diese Fehler in Rechnungen, Versand, Rückerstattungen und Reports.

Die saubere Bauweise lässt die Datenbankregeln die UI führen. Das Formular wird zur freundlichen Oberfläche für Regeln, die auch dann halten, wenn jemand Daten importiert oder anderswo Datensätze ändert.

Das Order‑Table erzwingt zum Beispiel:

  • Eindeutige Bestellnummer: jedes order_number muss unterschiedlich sein.
  • Checks für immer‑wahre Regeln: quantity > 0, unit_price >= 0 und vielleicht unit_price <= 100000.
  • Foreign Key zu Customer: jede Bestellung muss auf einen echten Kunden verweisen.

Sieh, was in der Praxis passiert.

Ein Verkäufer tippt eine Bestellnummer aus dem Gedächtnis und verwendet versehentlich eine bereits existierende Nummer. Das Speichern scheitert am Unique‑Constraint. Statt einer vagen „Speichern fehlgeschlagen“-Meldung kann die UI anzeigen: „Bestellnummer existiert bereits. Verwende die nächste freie Nummer oder suche die bestehende Bestellung.“

Später wird ein Kunden‑Datensatz zusammengeführt oder gelöscht, während jemand das Formular noch offen hat. Beim Speichern ist der ausgewählte Kunde nicht mehr vorhanden. Der Foreign Key blockiert das Speichern. Eine gute UI‑Antwort wäre: „Dieser Kunde ist nicht mehr verfügbar. Lade die Kundenliste neu und wähle einen anderen.“ Dann lädst du das Kunden‑Dropdown neu und bewahrst den Rest des Formulars, damit der Nutzer seine Arbeit nicht verliert.

Im Laufe der Zeit hält dieses Muster Bestellungen konsistent, ohne dass alle ständig extrem vorsichtig sein müssen.

Häufige Fehler, die zu verwirrenden Meldungen und schmutzigen Daten führen

Formulare mit echten Schutzmechanismen bauen
Modelliere deine Tabellen und füge Unique-, Check- und FK-Regeln hinzu, bevor du die Bildschirme baust.
AppMaster ausprobieren

Der schnellste Weg zu chaotischen Daten ist, sich nur auf UI‑Regeln zu verlassen. Ein Pflichtfeld im Formular hilft zwar, schützt aber nicht vor Importen, Integrationen, Admin‑Edits oder einem anderen Bildschirm, der in dieselbe Tabelle schreibt. Wenn die Datenbank schlechte Werte akzeptiert, tauchen sie später überall auf.

Ein weiterer häufiger Fehler ist, Constraints zu streng zu machen für das reale Leben. Ein Check, der am ersten Tag logisch klingt, kann in einer Woche normale Anwendungsfälle blockieren, z. B. Rückerstattungen, Teillieferungen oder internationale Telefonnummern. Eine gute Regel lautet: schränke das ein, was immer wahr sein muss, nicht das, was meistens wahr ist.

Updates werden oft übersehen. Unique‑Kollisionen bei Editieren sind klassisch: Ein Nutzer öffnet einen Datensatz, ändert ein nicht relevantes Feld und der Save scheitert, weil ein „unique“-Wert anderswo geändert wurde. Statusübergänge sind eine weitere Falle. Wenn sich ein Datensatz von Draft über Approved nach Cancelled bewegen kann, stelle sicher, dass deine Checks den gesamten Pfad erlauben, nicht nur den Endzustand.

Foreign Keys schlagen am leichtesten fehl, wenn du Benutzern erlaubst, IDs einzutippen. Wenn die UI Freitext für eine Beziehung zulässt, bekommst du kaputte Beziehungen. Bevorzuge Picker, die an existierende Datensätze binden, und behalte den FK in der DB als Rückhalt.

Rohe DB‑Fehler erzeugen Panik und Support‑Tickets. Du kannst strikte Constraints behalten und trotzdem menschenlesbare Meldungen zeigen.

Eine kurze Fehlerbehebungsliste:

  • Halte Constraints als Quelle der Wahrheit, nicht nur als Formularregeln
  • Entwirf Checks um reale Workflows, einschließlich Ausnahmen
  • Behandle auch Updates und Übergänge, nicht nur „Create“
  • Nutze Picker für Beziehungen, nicht getippte Identifikatoren
  • Mappe Constraint‑Fehler auf freundliche, feldbezogene Nachrichten

Checkliste und nächste Schritte für No‑Code‑Teams

Bevor du ein Formular auslieferst, geh davon aus, dass es in Eile benutzt wird, an einem schlechten Tag, mit kopierten Daten. Der sicherste Ansatz sind Datenbank‑Constraints für Formularvalidierung, damit die Datenbank die Wahrheit durchsetzt, selbst wenn die UI etwas übersieht.

Kurze Prüfungen vor dem Launch

Führe diese Prüfungen für jedes Formular durch, das in deine Datenbank schreibt:

  • Duplikate: identifiziere, was eindeutig sein muss (E‑Mail, Bestellnummer, externe ID) und bestätige, dass die Unique‑Regel existiert
  • Fehlende Relationen: bestätige, dass jede erforderliche Beziehung erzwungen wird (z. B. eine Order muss einen Customer haben)
  • Ungültige Bereiche: füge Checks für Werte hinzu, die in Grenzen bleiben müssen (quantity > 0, Discount zwischen 0 und 100)
  • Pflichtfelder: sorge dafür, dass „muss vorhanden sein“ auf Datenbank‑Ebene durchgesetzt wird, nicht nur mit UI‑Flags
  • Sichere Defaults: entscheide, was automatisch gesetzt werden soll (z. B. status = "Draft"), damit Nutzer nicht raten müssen

Teste dann wie ein Nutzer, nicht wie ein Entwickler: mache eine vollständige saubere Übermittlung Ende‑zu‑Ende und versuche dann, sie mit Duplikaten, fehlenden Relationen, außerhalb‑des‑Bereichs Zahlen, leeren Pflichtfeldern und falschen Typen zu brechen.

Nächste Schritte in AppMaster

Wenn du auf AppMaster baust (appmaster.io), modellier die Regeln zuerst im Data Designer (Unique, Check und Foreign Keys), baue dann das Formular im Web‑ oder Mobile‑UI‑Builder und verknüpfe das Speichern im Business Process Editor. Wenn ein Constraint fehlschlägt, fange den Fehler ab und mappe ihn auf eine klare Aktion: was zu ändern ist und wo.

Halte Fehlermeldungen konsistent und ruhig. Vermeide Schuldzuweisungen. Bevorzuge Formulierungen wie „Verwende eine eindeutige E‑Mail‑Adresse“ statt „E‑Mail ist ungültig“. Wenn möglich, zeige den kollidierenden Wert oder den benötigten Bereich, damit die Lösung offensichtlich ist.

Wähle ein echtes Formular (z. B. „Kunden anlegen“ oder „Neue Bestellung“), baue es komplett durch und validiere es mit chaotischen Beispieldaten aus dem Alltag deines Teams.

FAQ

Warum sollte ich Validierung in der Datenbank durchsetzen statt nur in der Formular‑UI?

Beginne mit Datenbank‑Constraints, weil sie jeden Schreibpfad schützen: Webformulare, Mobile‑Bildschirme, Importe und API‑Aufrufe. Client‑seitige Validierung ist weiterhin nützlich für schnelles Feedback, aber die Datenbank sollte das letzte Tor sein, damit schlechte Werte nicht über andere Wege hereinschlüpfen.

Welche Datenbank‑Constraints sind für typische Geschäftsformulare am wichtigsten?

Konzentriere dich auf die Basics, die die meisten realen Datenprobleme verhindern: unique gegen Duplikate, check für Regeln, die immer wahr sein müssen, und foreign keys für echte Beziehungen. Füge nur Regeln hinzu, von denen du sicher bist, dass sie nie verletzt werden sollten, auch nicht bei Importen oder Sonderfällen.

Wann sollte ich einen Unique‑Constraint verwenden und wie wähle ich den richtigen Scope?

Verwende einen Unique‑Constraint, wenn ein Wert einen Datensatz innerhalb eines klaren Bereichs identifizieren soll — z. B. E‑Mail, Rechnungsnummer oder Mitarbeiter‑ID. Bestimme zuerst den Scope (global vs. pro Organisation/Standort), damit du keine gültigen Wiederholungen blockierst, die in deinem Geschäft normal sind.

Was macht einen guten Check‑Constraint aus, der Benutzer nicht frustriert?

Halte Check‑Constraints einfach und vorhersehbar: Bereiche, positive Zahlen, Datumsreihenfolgen. Wenn Nutzer die Regel nicht aus dem Feldlabel erraten können, werden sie wiederholt Fehler erzeugen. Formuliere die UI‑Hinweise klar und vermeide Checks, die komplizierte Policy‑Logik kodieren.

Wie helfen Foreign Keys und was sollte die UI anders machen?

Ein Foreign Key verhindert „fast korrekte“ Referenzen, etwa eine Bestellung, die auf einen nicht mehr existierenden Kunden zeigt. In der UI solltest du Freitext für Beziehungen vermeiden und stattdessen Picker oder Suche verwenden, die die ID des gewählten Datensatzes speichern, damit die Beziehung valide bleibt.

Wie übersetze ich rohe Constraint‑Fehler in klare, menschliche Meldungen?

Behandle jeden Constraint wie einen kleinen „Fehler‑Vertrag“: übersetze den technischen Fehler in einen Satz, der sagt, was passiert ist und was der Nutzer als Nächstes tun soll. Beispiel: Anstelle von einem rohen Unique‑Fehler zeige: “Diese E‑Mail wird bereits verwendet. Verwende eine andere E‑Mail oder melde dich an.”

Wo sollte ich Constraint‑bezogene Fehler im Formular anzeigen?

Zeige einzelne Feldfehler direkt neben dem betroffenen Feld und bewahre die Nutzereingaben, damit sie schnell korrigieren können. Bei übergreifenden Regeln (z. B. Start/End‑Datum) ist ein kurzes Form‑Banner oft klarer — markiere dennoch das relevanteste Feld, damit die Korrektur offensichtlich ist.

Brauche ich noch Client‑seitige Validierung, wenn ich Datenbank‑Constraints habe?

Client‑seitige Validierung fängt offensichtliche Probleme früh ab (Pflichtfelder, grundlegendes Format), um fehlgeschlagene Einsendungen zu reduzieren. Die Datenbank braucht jedoch weiterhin Constraints für Rennbedingungen und alternative Schreibpfade, z. B. wenn zwei Nutzer gleichzeitig dieselbe Rechnungsnummer speichern.

Was sind die häufigsten Fehler, die zu verwirrenden Meldungen oder schmutzigen Daten führen?

Verlasse dich nicht nur auf UI‑Regeln, mach Constraints nicht strenger als die tatsächlichen Workflows, und vergiss Updates und Statusübergänge nicht. Lass Nutzer keine IDs tippen für Beziehungen — nutze Selektoren — und halte die Datenbank‑Constraint als Rückhalt. Rohe DB‑Fehler sollten vermieden und stattdessen menschenlesbare Meldungen gezeigt werden.

Wie wende ich diesen Ansatz in AppMaster an, ohne die App zu verkomplizieren?

Modelliere zuerst deine Daten und Constraints im Data Designer, baue dann das Formular und mappe Constraint‑Fehler auf freundliche Meldungen in deinem UI‑Flow. In AppMaster bedeutet das typischerweise: definiere unique/check/FK‑Regeln im Modell, verknüpfe Saves im Business Process Editor und halte Fehlermeldungen konsistent über Web und Mobile. Fange mit einem wichtigen Formular an und versuche, es mit chaotischen Beispieldaten zu brechen.

Einfach zu starten
Erschaffe etwas Erstaunliches

Experimentieren Sie mit AppMaster mit kostenlosem Plan.
Wenn Sie fertig sind, können Sie das richtige Abonnement auswählen.

Starten