PostgreSQL Grundkurs

Beziehungen zwischen Tabellen herstellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
SQL ermöglicht die praktische Implementierung von Beziehungen zwischen einzelnen Tabellen mit Hilfe des Primärschlüssels sowie des Fremd- oder Nachschlageschlüssels.

Transkript

Ich möchte Ihnen in diesem Video zeigen, wie Sie ausgehend von einer guten Datenbankplanung zwei Tabellen in Beziehung zueinander setzen und greife auf die Planung, die wir zuvor beschrieben haben zurück, nämlich eine Personaltabelle und eine Projekttabelle. Und über den Primary Key und den Foreign Key werden diese beiden Tabellen nun miteinander in Beziehung gesetzt. Ich habe dafür eine neue Datenbank angelegt. Den Namen sehen Sie hier, Firma ABC. Durch einen Doppelklick da drauf, gehe ich in diese Datenbank und es sei an der Stelle gesagt, selbstverständlich kann ich all diese Schritte, die ich Ihnen jetzt demonstriere, auch in der Kommandozeilen-Ebene durchführen. Nur dort haben wir jetzt natürlich eine ganze Menge Tipperei. Ich beschränke mich darauf, dass ich Ihnen ab und zu auch mal das SQL Statement zeigen möchte. Gut, schauen wir uns zunächst mal die Tabelle "Kunden" an. Das ist ja die Tabelle, die jetzt von den dreien, die insgesamt benötigt werden, im Großen und Ganzen alleine steht. Also da gibt es keine Beziehung zu und dann sehen wir, genauso wie in der Planung vorgesehen, haben wir die Kunden ID, den Namen, den Vornamen und das Geburtsdatum. Als Datentypen sehen Sie hier integer, zweimal text und einmal date. Und das ist schon ein Hinweis auf diverse Datentypen, die Sie in PostgreSQL einsetzen können. Da sei mir gestattet, es lohnt sich in dem Falle einen Blick in die Dokumentationen von PostgreSQL und dann sehen Sie nämlich dort alle Datentypen aufgelistet, die es gibt. Und je nachdem, was Sie für einen grafischen Client benutzen, unter je nachdem welchem Betriebssystem, können Sie diese sogar teilweise direkt in einem Pulldown-Menü auswählen. Also ganz praktisch. Wir haben also einen numerischen Datentyp, zwei alphanumerische Datentypen und hier auch einen numerischen, nämlich in Form einer Datumseingabe. So, hier muss ich nichts mehr ändern, ich gehe also direkt zurück. Die Tabelle "Personal" ist ja die gleiche Struktur, der gleiche Aufbau. Die habe ich auch bereits angelegt. Allerdings brauche ich jetzt hier, in dieser Tabelle selber, nichts mehr zu verändern. Ich muss jetzt lediglich eine weitere Tabelle noch hinzufügen, nämlich die Tabelle "Projekt". Und das machen wir kurz gemeinsam. Die Tabelle "Projekt" ist so aufgebaut, dass sie eine Projekt ID, eine Bezeichnung und eben diesen Verweis auf den Projektleiter hat. Das ist sehr schön und praktisch hier umzusetzen. Ich erzeuge mir mit der rechten Maustaste und dem Menüpunkt "New" eine neue Tabelle. Diese Tabelle bekommt den Namen "Projekt". Ich kann, wenn ich möchte, da sogar noch einen Kommentar zu hinterlegen. Ich mache das jetzt nur mal der Verdeutlichung halber. Projekttabelle referenziert auf Personaltabelle. Soweit soll das mal ausreichen. Dann habe ich auch hier wieder meine Projekt ID und die bekommt auch genau den Namen, projekt_id. Der Rest kann so stehen bleiben. Dann brauche ich eine weitere Spalte, die heißt "Bezeichnung". Nehmen wir hier mal einen variable character von zum Beispiel 100. Und jetzt wird es spannend. Jetzt kommen wir nämlich zu der Spalte, die den Projektleiter beinhaltet oder beinhalten soll. Und hier müssen wir jetzt ein bisschen aufpassen. Den Namen als Projektleiter, also den Spaltennamen, den Column Name, den kann ich theoretisch beliebig nehmen. Der muss nichts mit dem Spaltenbezeichner in der Tabelle "Personal" zu tun haben oder gar gleich heißen, aber wo ich drauf achten muss ist, dass der Datentyp übereinstimmt und zwar auf das Feld, auf das ich nachschlage. Jetzt funktioniert hier Gott sei Dank beides. Wenn Sie sich das hier anschauen, dann sehen Sie, steht hier der Datentyp "serial" drin. Das ist allerdings etwas Besonderes, denn "serial" ist im Großen und Ganzen ein Datentyp, der auch automatisch zählen kann. Das heißt, ich muss nicht extra einen Wert eingeben. Durch Primary Key und den Wert "serial", oder den Typ "serial", kann ich mir die Eingabe sparen und er zählt einfach immer eins weiter hoch und es ist sehr praktisch. Jetzt könnten Sie hier, wenn Sie sich jetzt nicht sicher sind, den Wert "serial" eingeben. Probieren Sie es ruhig mal. Das funktioniert. Aber in Wirklichkeit ist das hier, also dieser Datentyp "serial", ein "integer" und genau das gebe ich ein. Integer steht im Übrigen für eine Ganzzahl, ein ganzer Datentyp in einem relativ kleinen Wertebereich. Damit sind wir aber noch nicht fertig. Jetzt haben wir das nur vorbereitet, denn in dieser Spalte muss jetzt ja der Wert des Primary Key aus der Tabelle "Personal" abgelegt werden. Und wie gesagt, das ist der Datentyp "integer" und durch Klick auf das Plus Symbol kann ich nun sagen, bitte erstelle mir dafür einen Foreign Key. Und jetzt wird es spannend. Jetzt öffnet sich nämlich ein Dialog und hier kann ich nun einen Namen eingeben und dann müssen Sie überlegen, wie Sie das machen. Ich persönlich benutze in der Regel Kürzel wie FK von Foreign Key und dann den Namen, in dem Falle wäre das personal_id, auf den ich nachschlage. Und zwar den Column-Bezeichner, den Spaltenbezeichner aus der Tabelle Personal. Da gibt's verschiedene Varianten, aber Hauptsache ist, Sie wissen, was Sie dort eintragen. Für die Funktion ist es theoretisch egal. Es ist es nur wichtig, dass man hinterher noch durchblickt, wo man wie wo drauf verwiesen hat. Auch hier kann man das Ganze wieder kommentieren, aber jetzt kommt praktisch gesehen eigentlich die wichtigste Funktion, nämlich die Auswahl der richtigen Tabelle. Und da haben wir jetzt schon zwei zur Auswahl, aber ich möchte ja die Tabelle "Personal" nachschlagen und dann schlägt er schon vor die richtige Spalte, nämlich den Primärschlüssel und Sie sehen, auf die anderen kann ich nicht zugreifen, weil das keine Primärschlüsselwerte sind. Also es bleibt nur diese eine Spalte über und deswegen kann er das auch schon entscheiden. Bis dahin würde es schon ausreichen. Ich kann das mit "Done" bzw. mit OK auch bestätigen, aber hier gibt es noch ein paar ganz interessante Varianten. Und zwar haben wir einmal sogenannte Referenzüberprüfungen. Was soll denn geschehen, wenn zum Beispiel jetzt in dieser Tabelle der Projektleiter oder der Datensatz mit einem Projektleiter gelöscht wird? Und das kann ich dann hier zum Beispiel definieren. Ich kann es strikt verbieten, ich kann den Wert, der nicht mehr existiert, auf Null setzen oder ich kann es sogar kaskadierend machen. Das heißt, das was ich dann in der Tabelle "Personal" lösche, würde hier auch gelöscht werden. Also noch mal zur Erklärung, "On Delete" auf die Referenztabelle bedeutet, wenn ich in der Referenztabelle "Personal" einen Mitarbeiter entlasse und ihn aus der Datenbank lösche, dann wird jetzt mit der Einstellung hier in der Tabelle "Projekt" nichts geschehen. Wenn ich das "Restrict" einstelle, dann wird das verboten. Ich kann keinen Mitarbeiter löschen, solange der Projektleiter ist. Das wäre fast die sinnvollste Variante. Ich kann es aber auch kaskadierend einstellen, dann bedeutet das, der Mitarbeiter wird gelöscht und da er auch kein Projektleiter mehr sein kann, wird das ganze Projekt gelöscht. Und wenn ich das nicht möchte, dann setze ich eben entsprechend hier in der Tabelle einen NULL-Wert, also nicht Null gesprochen dieser Wert, sondern NULL und NULL steht einfach für nichts. Das ist nicht eine leere Zeichenkette oder das ist nicht eine Null, sondern das ist wirklich nichts. Das sollte man kennen. Das Gleiche gibt es jetzt auch für Update Aktionen oder für Überprüfungsvariationen. Und das ist eine ganz, ganz wichtige Funktion bzw. ganz wichtige Mittel, um eine Datenbank Logik auch wirklich zu erzwingen und in der Planung schon dafür zu sorgen, bzw. auch in der Implementierung schon dafür zu sorgen, dass der Benutzer so wenig Fehler mit seinen Aktionen und seinen Eingaben und Manipulationen, Datenmanipulationen machen kann, wie nur irgend möglich. Ich speicher das jetzt einfach erst mal so ab und bestätige das. Dann ist dieser Schlüssel eingetragen. Jetzt gucken wir uns mal kurz das SQL Statement an und ja, das hat es so gesehen in sich. Das alles zu tippen, ist schon nicht schlecht. Und zwar einmal wieder der bereits bekannte SQL Befehl CREATE TABLE, dann der Tabellenname und jetzt kommen, wie auch schon bekannt, die Aufzählungen der drei Attribute projekt_id, bezeichnung und projektleiter. Die Übernahme des Datentyps und die Definition des Primary Key auf hier, die Zeile projekt_id. Und die Zeile, die jetzt kommt, die ist neu. Nämlich ein Konstrukt, der mit dem SQL Statement CONSTRAINT beginnt. Und CONSTRAINT bezeichnet jetzt den Nachschlageschlüssel, aber das ist nur der Bezeichner und der Foreign Key ist der Hinweis auf das Attribut Projektleiter, also da drin soll dieser Schlüsselwert sich befinden und der verweist, also REFERENCES, Verweise, auf die Tabelle "Personal" und die dort befindliche Spalte personal_id. Im Grunde ganz einfach zu lesen. Dann schließt das Statement und es kommt noch ein SQL Abschnitt dahinter, um einen Kommentar zu definieren und das ist der, den ich hier oben eingetragen habe. Soweit müsste eigentlich alles funktionieren. Ich speichere das Ganze ab. Es gibt keine Hinweismeldung. Das heißt, wenn wir jetzt hier reinschauen, dann habe ich drei Tabellen. Allerdings kann ich nicht erkennen, ob die irgendwie in Verbindung zu einander stehen. Da gibt es andere grafische Clients, da ist das praktischer. Da sieht man dann zum Beispiel hier eine Linienverbindung dahinter. Vielleicht haben Sie das auch schon mal in Programmen, also in Datenbankprogrammen, wie Access gesehen. Da kann man auch solche Beziehung aufbauen. Und hier fehlt das leider, aber ich sehe es halt in dem Moment, wenn ich hier hineinschaue, dann fällt mir nämlich hier unter CONSTRAINTS auf, dass es da einen, durch diesen Pfeil angegeben, einen Verweis auf, ja, und jetzt ist wichtig, wenn ich die Maus da liegen lasse, dann habe ich eben den Hinweis, Foreign Key auf die Personal ID und da ich das immer nach einem bestimmten Schema benenne, kann ich auch sofort erkennen, aha, das ist aus der Tabelle "Personal". Sie können auch hier noch mal drauf klicken und dann öffnet sich genau der Dialog wieder. Dann sieht man, man kann den noch verändern in Grenzen. Was ich nicht mehr kann, ist diese referentielle Integrität nennt sich das, dafür müsste ich tatsächlich einen neuen Schlüssel erstellen. Also das heißt, zuvor löschen und dann das Ganze noch mal machen. Ja, aber wie dem auch sei, es ist kein Hexenwerk und Sie kennen jetzt die Möglichkeit, in PostgreSQL sogenannte Referenzen aufzubauen. Das macht das Ganze erst wirklich rund und dort auch sogar referenzielle Integritäten zu hinterlegen. Das ist das Handwerkszeug, um aus einer soliden Datenbankplanung, sei es mit dem ER-Modell oder per theoretischer Schreibweise, wie demonstriert, ein wirklich durchdachtes und fundiertes Datenbankprojekt mit PostgreSQL umzusetzen.

PostgreSQL Grundkurs

Lernen Sie, wie Sie PostgreSQL in Ihr System integrieren und Datenbanken, Tabellen und Datensätze anlegen und verwalten können.

2 Std. 53 min (28 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:26.01.2017
Aktualisiert am:15.05.2017

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!