SQL Grundkurs 1: Die Sprache erlernen

CHECK

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Einfache Geschäftsregeln lassen sich über Check-Constraints implementieren. Erfahren Sie in diesem Video nicht nur, wie dies funktioniert, sondern auch, wo die Grenzen für derartig festgelegte Regeln sind.

Transkript

In diesem Video zeige ich Ihnen, wie Sie "Check Constraints" zum Durchsetzen von einfachen Geschäftsregeln implementieren können. Ich habe eine Anweisung vorbereitet, die eine Patiententabelle erzeugt. Constraint-seitig ist hier schon ein Primärschlüssel definiert und ein "Unique Key" für die kombinierte Sozialversicherungsnummer aus der vierstelligen Nummer und dem Geburtsdatum. Nun möchte ich hier zwei "Check Constraints" ergänzen. Einerseits möchte ich erzwingen, dass in der Spalte "Geschlecht" nur ein "M" oder ein "W" erfasst werden kann. Ein Constraint kann ich hier auf Spalten- oder Tabellenebene definieren, kann es mir aussuchen, solange nur eine Spalte vom Constraint betroffen ist. Sollten zwei Spalten von einem Constraint betroffen sein oder mehr Spalten, muss ich es auf Tabellenebene, also am Ende der Anweisung, definieren. Ich ergänze also die Anweisung "Constraint" und als Präfix für ein "Check Constraint" wird typischerweise "CK" verwendet. "CK_" wieder gefolgt vom Namen der Tabelle und vom Namen der Spalte. Diesmal handelt es sich um ein "Check Constraint" und der Ausdruck kommt dahinter; nämlich: die Spalte "Geschlecht" soll entweder "M" oder "W" enthalten, also "in hoch Komma M oder W". Allerdings sollten wir darauf achten, dass Oracle hier zwischen Groß- und Kleinbuchstaben unterscheidet. Also würden wir das Constraint so implementieren, würde ein kleines "m" oder ein kleines "w" nicht zugelassen werden. Deshalb ergänze ich jetzt hier noch die Funktion "Upper" in meinem Ausdruck, um das zu verhindern. Nun muss es irrelevant sein, ob ich das "M" oder "W" klein oder groß eintrage. Ich versuche nun, die Tabelle zu erzeugen und hoffe, dass ich keinen Fehler eingebaut habe: Jawohl, die Tabelle ist erfolgreich erstellt worden. Ich versuche nun, zuerst einmal einen gültigen Eintrag vorzunehmen, das heißt, die Elfriede Gesund einzutragen. Diese hat ein "W" hier eingetragen. Ich führe die Anweisung aus und Sie sehen, die Zeile ist eingefügt worden und findet sich auch in der Tabelle. Nun versuche ich, den Gerd Kränklich ebenso einzufügen, aber gebe einfach ein ungültiges Geschlechtskürzel ein. Nun muss das "Check Constraint" das Einfügen verhindern. Sie sehen: "Do not insert values that violate the constraint!" Schauen wir uns die ganze Fehlermeldung an. Sie sehen, das Check Constraint "CK Patientengeschlecht" ist verletzt worden. Das heißt, dieses hat das Einfügen verhindert und genau das wollten wir auch. Ich werde die Tabelle jetzt noch einmal löschen, um noch ein zweites Constraint zu ergänzen. Das ist das Schöne beim Testen und beim Entwickeln, solang noch keine echten Daten enthalten sind, kann man die Tabelle jederzeit löschen, um sie danach neu zu erstellen. Bei einem Echtsystem wäre das leider ja nicht mehr möglich. Ich möchte jetzt festlegen, über ein Constraint, dass die Sozialversicherungsnummer unbedingt vierstellig sein muss. Der Zusatz "not null" ist mir hier zu wenig, weil ich möchte nicht, dass weniger als vier Zeichen hier eingetragen werden. Also ergänze ich auch hier ein Constraint: "CK_Patienten_SVNR ". Check. Und: Was möchte ich prüfen? Dass die Länge, mit der Funktion "Length", von "Sozialversicherungsnummer" 4 sein muss. Das heißt, wenn nur drei Zeichen verwendet werden, darf das nicht funktionieren. Allerdings müssen wir hier etwas berücksichtigen: Die Sozialversicherungsnummer ist als fixer Character definiert. Das heißt, wenn ich weniger Zeichen eingebe, werden diese mit Leerzeichen auf vier Zeichen aufgefüllt, deshalb wäre die Bedingung immer erfüllt. Das heißt, wenn ich auch nur drei Zeichen eingebe, wird es funktionieren. Bevor ich Ihnen demonstriere, dass das wirklich so ist, bessere ich hier noch diesen Tippfehler aus, den ich gerade entdeckt habe. "Length" habe ich falsch geschrieben und nun werde ich diese Tabelle in dieser Form einmal erzeugen. Kontrollieren wir, ob es funktioniert hat: Jawohl, es ist erfolgreich gewesen. Nun versuche ich, einen Datensatz einzufügen, der eine Sozialversicherungsnummer enthält, und der weniger als vier Stellen aufweist. Von der Grundlogik her dürfte das Constraint das ja nicht zulassen, aber, weil es ein fixer Character ist, wird es dennoch funktionieren. Testen wir es aus und Sie sehen, dass die Zeile tatsächlich eingefügt worden ist. Das ist natürlich nicht so gewollt. Also müssen wir dieses Constraint noch etwas erweitern. Ich lösche die Tabelle noch einmal und erweitere das Constraint um die Funktion "Trim." Die Funktion "Trim" schneidet vor dem Vergleich überschüssige Leerzeichen ab und dadurch würde der Ausdruck dann erkennen, dass hier weniger als drei Zeichen erfasst worden sind. Wieder erzeuge ich diese Tabelle neu. Hier habe ich einen Fehler, ich habe nicht aufgepasst: ich habe das "Trim" an der falschen Stelle ergänzt, weil ich ja die Sozialversicherungsnummer trimmen muss und nicht die Länge. Das heißt, ich schneide das noch einmal aus und ergänze das an der richtigen Stelle. Ich muss jetzt auch aufpassen, dass ich die Klammern richtig schließe und hier hinten die Klammer wieder entferne. Und jetzt wird die Sozialversicherungsnummer um Leerzeichen erleichtert und dann die Länge eruiert. So sollte es jetzt funktionieren. Wir haben die Tabelle neu erstellt. Jetzt sollte das Check Constraint so arbeiten, wie wir es wollen. Wenn ich jetzt versuche, diese Zeile einzufügen, bekommen wir einen Fehler. Jawohl, gegen das Constraint ist verstoßen worden. Wenn ich jetzt allerdings die richtige Länge verwende, das heißt noch ein Zeichen ergänze, dann sollte das Anfügen akzeptiert werden. Testen wir es aus: Jawohl, nun ist die Zeile korrekt eingefügt worden. Nun implementieren wir das Ganze noch beim Microsoft SQL-Server, um zu sehen, was anders zu berücksichtigen ist. Ich kopiere mir dieses Constraint gleich dazu in die Zwischenablage. Ich werde es diesmal nicht auf Spalten- sondern auf Tabellenebene implementieren, damit wir diese Variante auch noch einmal sehen. Ich füge die Anweisung ein. Prinzipiell funktioniert es hier ja gleich, das Einzige ist, aufgrund dessen, dass wir nicht case sensitive sind, kann ich die Funktion "Upper" hier getrost wieder entfernen und es wird dennoch funktionieren. Man muss nur aufpassen, dass ich die richtigen Klammern entferne; diese hier sollte ich entfernen, die andere sollte ich hier stehenlassen. Und das zweite Check Constraint würde ich mir hier auch herkopieren und an dieser Stelle einfügen. Die Fehlermeldung kommt, weil die Funktion nicht "Length", sondern "Len" heißt beim Microsoft SQL-Server, die "Trim-Funktion"können wir auch wegnehmen, denn dieses Phänomen tritt hier trotz fixem Character nicht auf. Der Microsoft SQL-Server zählt Leerzeichen am Ende nicht mit, wenn er die Länge von Charactern, von fixen Charactern eruiert, deshalb reicht diese verkürzte Form des Constraints aus. Ich erzeuge diese Tabelle und testen wir die zwei Constraints einmal aus. In der ersten Variante habe ich jetzt nur eine dreistellige Sozialversicherungsnummer, die nicht akzeptiert werden darf. Wir sehen schon, dass das Constraint das nicht zulässt. Ich ergänze jetzt eine vierte Stelle und jetzt wird dieser Eintrag akzeptiert. Damit ist dieses Constraint nun richtig passiert worden. Prüfen wir noch das zweite Constraint, das das Geschlecht prüft. Ich trage beim Kränklich, Gerd nun fälschlicherweise ein "Y" als Geschlechtskürzel ein, das darf natürlich nicht akzeptiert werden. Wieder führe ich die Anweisung aus und bekomme die erwartete Fehlermeldung. Sobald ich das Kürzel auf "M" ausbessere, wird das Einfügen funktionieren. Und wir haben nun diese zwei Datensätze erfolgreich in unsere Tabelle eingetragen. Sie haben in diesem Video gesehen, wie wir beim Erzeugen einer Tabelle "Check Constraints" implementieren können. "Check Constraints" können wie andere Constraints entweder auf Tabellenebene, also am Ende der Anweisung, oder auf Spaltenebene, direkt bei der Spalte, definiert werden. Wenn "Check Constraints" sich auf mehr als eine Spalte beziehen, müssen sie auf Tabellenebene definiert werden. Verwenden Sie "Check Constraints" in der Praxis, um Gültigkeitsregeln zu definieren, die sich über einfache Ausdrücke abbilden lassen. Dabei müssen Sie allerdings berücksichtigen, dass Sie nur auf Informationen zugreifen können, die sich innerhalb des geprüften Datensatzes befinden. Wir können nicht auf andere Datensätze, geschweige denn auf andere Tabellen zugreifen. Verstößt eine DML-Anweisung gegen eines der definierten "Check Constraints", schlägt der Schreibvorgang fehl.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!