Relationale Datenbanken und das relationale Modell

Lerne, wie relationale Datenbanken Daten organisieren, bevor du deine erste Abfrage schreibst. Du erfährst, warum Organisationen gemeinsam genutzte Daten in einer Datenbank statt in einer Tabellenkalkulation speichern, was ein Datenbankmanagementsystem leistet und welche Rolle SQL dabei spielt. Du liest Tabellen, Zeilen und Spalten, wählst sinnvolle Datentypen und gehst mit fehlenden Werten (NULL) um, ohne in die üblichen Fallen zu tappen. Mit Primär- und Fremdschlüsseln identifizierst du Zeilen und verknüpfst Tabellen, du erkennst Eins-zu-viele- und Viele-zu-viele-Beziehungen und liest ein Datenbankschema und sein Diagramm, um herauszufinden, wo jede Information gespeichert ist.

AnfängerEinheit 1 von 6 in Kurs: SQL – Datenbanken abfragen mit SELECT, JOIN und GROUP BY

Was du lernst

  1. Beschreiben, warum Organisationen gemeinsam genutzte Daten in relationalen Datenbanken speichern, was ein Datenbankmanagementsystem leistet und wie man mit SQL damit arbeitet.
    • Erklären, warum Organisationen Datenbanken einsetzen
      Daten, eine Datenbank und ein Datenbankmanagementsystem unterscheiden und erklären, was eine relationale Datenbank besser kann als eine gemeinsam genutzte Tabellenkalkulation oder lose Dateien.
    • Datenbanksysteme und die Rolle von SQL kennen
      Verbreitete relationale Datenbanksysteme nennen, beschreiben, wie sich Anwendungen mit ihnen verbinden, und erklären, was SQL ist und wie seine Anweisungen gruppiert sind.
  2. Daten mithilfe der Begriffe Tabelle, Zeile und Spalte richtig lesen und die Regeln erklären, die eine Tabelle zur Relation machen.
    • Die Bestandteile einer Tabelle beschreiben
      Tabellen, Zeilen, Spalten und Werte in Beispieldaten erkennen und die Alltagsbegriffe den formalen relationalen Bezeichnungen zuordnen.
    • Die Regeln erklären, die eine Tabelle zur Relation machen
      Die Regeln des relationalen Modells zu Zeilen, Spalten und Werten anwenden und erkennen, wo SQL-Tabellen und Tabellenkalkulationen sich anders verhalten.
  3. Jeder Spalte einen passenden Datentyp zuordnen, die häufigen Typfehler bei Geldbeträgen, Codes und Datumswerten vermeiden und richtig mit NULL umgehen.
    • Die wichtigsten SQL-Datentypen kennen
      Die gängigen numerischen, Text-, Datums- und booleschen Typen erkennen, ihre Angaben zu Größe und Genauigkeit lesen und wissen, wo sich Datenbanksysteme unterscheiden.
    • Einen passenden Datentyp für reale Daten wählen
      Passende Typen für Geldbeträge, Stückzahlen, Codes, Datumswerte und Namen auswählen, indem du dich fragst, wie die Werte verwendet werden, und die Fehler vermeiden, die falsche Typen verursachen.
    • Richtig mit NULL umgehen
      Erklären, was NULL bedeutet, NULL von der Zahl Null und von leerem Text unterscheiden und vorhersagen, wie sich NULL in Vergleichen, Berechnungen und Integritätsbedingungen verhält.
  4. Mit Primärschlüsseln jede Zeile identifizieren, mit Fremdschlüsseln Tabellen verknüpfen und die dadurch entstehenden Eins-zu-viele-, Eins-zu-eins- und Viele-zu-viele-Beziehungen erkennen.
    • Schlüsselkandidaten und den Primärschlüssel bestimmen
      Entscheiden, welche Spalten oder Spaltenkombinationen jede Zeile eindeutig identifizieren, und die Regeln erklären, die ein Primärschlüssel erfüllen muss.
    • Zwischen natürlichen Schlüsseln und Surrogatschlüsseln wählen
      Kennungen aus der realen Welt mit systemgenerierten Kennungen vergleichen, beurteilen, welche sich als Primärschlüssel eignen, und natürliche Kennungen mit UNIQUE-Bedingungen schützen.
    • Tabellen über Fremdschlüssel verknüpfen
      Erklären, wie ein Fremdschlüssel auf eine Zeile in einer anderen Tabelle verweist, was referenzielle Integrität schützt und was passiert, wenn referenzierte Zeilen geändert oder gelöscht werden.
    • Eins-zu-viele-, Eins-zu-eins- und Viele-zu-viele-Beziehungen erkennen
      Bestimmen, wie viele Zeilen auf jeder Seite einer Verknüpfung miteinander in Beziehung stehen können, und zeigen, wie Fremdschlüssel und Zwischentabellen jede Art von Beziehung darstellen.
  5. Ein Schema lesen, das als Tabellendefinitionen geschrieben oder als Diagramm gezeichnet ist, und es zusammen mit Beispieldaten nutzen, um herauszufinden, wo Fakten gespeichert sind und wie die Tabellen miteinander verknüpft sind.
    • Ein Schema und seine Tabellendefinitionen lesen
      Ein Schema von den Daten unterscheiden, die es beschreibt, Schemanotation und CREATE-TABLE-Anweisungen lesen und die darin deklarierten Integritätsbedingungen deuten.
    • Ein Schemadiagramm lesen
      Die Kästen, Schlüsselmarkierungen, Verbindungslinien und Krähenfußsymbole eines Schemadiagramms deuten und jede dargestellte Beziehung in Worten ausdrücken.
    • Fragen mithilfe eines Schemas und von Beispieldaten beantworten
      Herausfinden, wo jede Information gespeichert ist, Schlüsseln von Hand von Tabelle zu Tabelle folgen und anhand der Integritätsbedingungen des Schemas entscheiden, welche Daten zulässig sind.

Relationale Datenbanken einfach erklärt

5 Kapitel

1

Was eine Datenbank leistet

Ein Laden kann mit einer Tabellenkalkulation anfangen, doch gemeinsam genutzte Daten werfen bald schwierigere Fragen auf: Welche Kundendaten sind aktuell, wer darf sie ändern, und was passiert, wenn eine Zahlung auf halbem Weg abbricht? Ein Datenbanksystem gibt diesen Fragen ein gemeinsames Zuhause. Trenne die gespeicherten Fakten von der Software, die sie verwaltet, und sieh dir dann an, wie Anwendungen mit SQL Daten abfragen und Änderungen vornehmen. Dieselben Grundgedanken tragen eine kleine Smartphone-App ebenso wie das Berichtssystem eines großen Unternehmens.

1.1 Gemeinsame Fakten und verlässliche Änderungen

Ein Kundenname, ein Bestelldatum und ein Preis sind Daten: festgehaltene Fakten. Eine Datenbank ist eine organisierte Sammlung zusammengehöriger Daten. Ein Datenbankmanagementsystem, kurz DBMS, ist die Software, die diese Sammlung speichert und verwaltet. PostgreSQL ist ein DBMS; die Datenbank store eines Ladens ist eine Sammlung, die PostgreSQL verwaltet.

Jede Information dort speichern, wo sie hingehört

Angenommen, eine Tabellenkalkulation wiederholt die Telefonnummer von Maria Garcia bei allen 14 ihrer Verkäufe. Ändert sich die Nummer, sind 14 Bearbeitungen nötig. Eine übersehene Zelle hinterlässt widersprüchliche Einträge. In einer relationalen Datenbank enthält customers die Angaben zu Maria nur einmal, unter customer_id 1. Jeder Verkauf speichert diese Kennung. Aktualisierst du ihre Telefonnummer in einer einzigen Kundenzeile, finden spätere Abfragen genau eine aktuelle Nummer.

Eine relationale Datenbank ordnet Fakten in Tabellen. „Relational“ kommt von Relation, dem mathematischen Namen für eine Tabelle. E. F. Codd stellte das Modell 1970 vor. Seine zentrale Trennung ist nützlich: Nutzer beschreiben die gewünschten Daten über Tabellen und Werte; das DBMS kümmert sich darum, wie diese Daten auf der Festplatte gefunden werden.

Regeln und gemeinsamer Zugriff

Eine Tabelle hat benannte Spalten, Datentypen und Integritätsbedingungen. Eine Integritätsbedingung ist eine Regel, die das DBMS prüft, etwa „eine Bestellung muss auf einen existierenden Kunden verweisen“. Diese Prüfungen schützen gemeinsam genutzte Daten, wenn mehrere Anwendungen dieselbe Datenbank verwenden. Wie streng Typen durchgesetzt werden, ist unterschiedlich: PostgreSQL weist Text wie 'twelve' in einer numerischen Preisspalte zurück, während gewöhnliche SQLite-Tabellen flexible Typen haben.

Ein DBMS verwaltet außerdem gleichzeitige Nutzer, Berechtigungen, Datensicherungen und Wiederherstellung. Zwei Mitarbeiter können an gemeinsamen Daten arbeiten, ohne getrennte Kopien einer Tabellenkalkulation auszutauschen. Berechtigungen können einem Berichtsnutzer erlauben, Verkäufe zu lesen, und zugleich einschränken, wer sie ändern darf. Ein Verfahren für Sicherung und Wiederherstellung hilft, Daten nach einem Ausfall wiederherzustellen.

Eine Gruppe von Änderungen zusammenhalten

Eine Transaktion behandelt mehrere Änderungen als eine Einheit: Entweder werden alle gespeichert oder keine. Um 200 $ zwischen Konten zu übertragen, muss der Betrag vom Girokonto abgezogen und dem Sparkonto gutgeschrieben werden. Unterbricht ein Ausfall die Überweisung, bevor sie abgeschlossen ist, kann das DBMS die unvollständige Transaktion rückgängig machen. Würde nur die Abbuchung gespeichert, bliebe ein falscher Kontostand zurück.

Eine Tabellenkalkulation bleibt nützlich für kleine Berechnungen und flexible Layouts. Eine Datenbank bietet eine festgelegte Struktur für gemeinsam genutzte Datensätze und Regeln. Ein Excel-Tabellenblatt ist fest auf 1.048.576 Zeilen begrenzt; Datenbanken verwalten routinemäßig viel größere Datenbestände, begrenzt durch Speicher, Hardware und die Grenzen des jeweiligen Produkts.

Unterschiedliche Daten, unterschiedliche Aufgaben

Strukturierte Daten passen in benannte Spalten, die jede Zeile hat. Semistrukturierte Daten wie JSON-Dokumente können in verschiedenen Datensätzen unterschiedliche Felder haben. Unstrukturierte Daten wie Audiodateien oder frei formulierte E-Mails haben kein festes tabellarisches Layout. Organisationen kombinieren relationale Datenbanken oft mit Dokumentdatenbanken, Schlüssel-Wert-Datenbanken oder Dateispeichern.

Auch die Art der Arbeitslast spielt eine Rolle. Ein transaktionsorientiertes System, auch OLTP genannt, erfasst alltägliche Vorgänge über viele kleine Lese- und Schreibzugriffe: eine Bestellung, eine Zahlung, eine Adressänderung. Ein analytisches System, kurz OLAP, liest viele gespeicherte Datensätze, um Fragen zu beantworten wie „Wie unterschieden sich die monatlichen Umsätze nach Region?“ Beide können relationale Tabellen und Schlüssel nutzen.

Wichtige Erkenntnisse

  • Eine Datenbank enthält zusammengehörige Daten; ein DBMS verwaltet sie.
  • Relationale Daten sind in Tabellen organisiert, und das DBMS prüft ihre Regeln.
  • Eine Transaktion speichert eine Gruppe von Änderungen gemeinsam oder macht sie gemeinsam rückgängig.
  • Gemeinsam genutzte Kundendaten lassen sich an einer Stelle aktualisieren und über eine Kennung finden.
  • Transaktionsorientierte Arbeit erfasst Vorgänge; analytische Arbeit fasst gespeicherte Daten zusammen.

1.2 SQL, Datenbankprodukte und Anwendungen

SQL, kurz für Structured Query Language, ist eine Sprache. PostgreSQL, MySQL, SQLite, Microsoft SQL Server und Oracle Database sind Produkte, die diese Sprache verwenden. SQL Server ist ein DBMS, kein anderer Name für SQL selbst.

Wie eine Anwendung an die Daten kommt

In einem Client-Server-System verwaltet ein Serverprogramm die Datenbank. Ein Client, etwa eine Website, ein Berichtswerkzeug oder ein Abfrageeditor, sendet Anfragen an diesen Server. PostgreSQL, MySQL, SQL Server und Oracle arbeiten üblicherweise so. Mit Werkzeugen wie psql, pgAdmin, DBeaver und SQL Server Management Studio können Menschen Datenbanken untersuchen und Anfragen senden.

Eine eingebettete Engine läuft innerhalb einer Anwendung. SQLite nutzt eine Bibliothek und eine gewöhnliche Datenbankdatei wie store.db, ohne separaten Datenbankserver. SQLite ist in Smartphones, Browsern und Desktop-Anwendungen verbreitet. Bei einem verwalteten Cloud-Dienst wie Azure SQL Database, Amazon RDS oder Google Cloud SQL betreibt ein Anbieter die Datenbankserver. „Verwaltet“ beschreibt, wer den Dienst betreibt; Tabellen und Schlüssel werden dadurch nicht durch ein anderes Modell ersetzt.

Eine DBMS-Installation kann mehrere Datenbanken verwalten, etwa store und payroll. Eine Verbindung wählt die zu verwendende Datenbank aus, sofern die Berechtigungen das erlauben.

Sag, welches Ergebnis du willst

SQL ist deklarativ: Es beschreibt das gewünschte Ergebnis, während das DBMS entscheidet, wie es dieses Ergebnis erhält. Lies diese Anweisung:

SELECT first_name, city
FROM customers
WHERE state = 'TX';

Sie fragt nach Vornamen und Städten aus den Kundenzeilen, deren Bundesstaat TX ist. Sie sagt nichts darüber, welche Seite auf der Festplatte zuerst gelesen wird. Großgeschriebene Schlüsselwörter machen die Anweisung leichter überschaubar; select und SELECT bedeuten dasselbe. Ein Semikolon beendet normalerweise eine Anweisung.

Die Aufgabe einer Anweisung erkennen
GruppeZweckBeispiele
Datendefinition, DDLStruktur definieren oder ändernCREATE TABLE, ALTER TABLE, DROP TABLE
Datenmanipulation, DMLZeilen lesen oder ändernSELECT, INSERT, UPDATE, DELETE
Datenkontrolle, DCLBerechtigungen verwaltenGRANT, REVOKE
TransaktionssteuerungEine Transaktion speichern oder rückgängig machenCOMMIT, ROLLBACK

Manche Bücher ordnen SELECT einer eigenen Gruppe zu, der Datenabfragesprache. Entscheidend ist, was die Anweisung tatsächlich tut: Fügst du eine Spalte hinzu, änderst du die Struktur; fügst du einen Kunden hinzu, änderst du Daten.

SQL wurde 1986 ein ANSI-Standard und ist international als ISO/IEC 9075 genormt. Die Produkte ergänzen eigene Dialekte. Eine Begrenzung auf zehn Zeilen lautet LIMIT 10 in SQLite, PostgreSQL und MySQL, TOP 10 in SQL Server oder FETCH FIRST 10 ROWS ONLY in Standard-SQL und Oracle.

Text und weitere Datenbankobjekte lesen

Textliterale stehen in einfachen Anführungszeichen: 'TX'. Standard-SQL verwendet doppelte Anführungszeichen für Bezeichner wie Spaltennamen. Ein Apostroph innerhalb eines Texts wird verdoppelt: 'O''Brien' steht für O'Brien.

Eine Sicht ist eine gespeicherte Abfrage, die wie eine Tabelle verwendet wird; eine gewöhnliche Sicht speichert keine eigenen Zeilen. Ein Index ist eine Nachschlagestruktur, die helfen kann, Zeilen schnell zu finden. Die meisten Systeme indizieren Primärschlüssel automatisch. Gespeicherte Prozeduren und Funktionen sind gespeicherter Code, der sich über seinen Namen ausführen lässt.

Wichtige Erkenntnisse

  • SQL beschreibt ein gewünschtes Ergebnis; das DBMS entscheidet, wie es dieses Ergebnis erhält.
  • Client-Server-Systeme nehmen Anfragen über einen Server entgegen; SQLite ist in eine Anwendung eingebettet.
  • DDL ändert die Struktur, DML liest oder ändert Zeilen.
  • Einfache Anführungszeichen kennzeichnen Text; ein Apostroph innerhalb des Texts wird verdoppelt.
  • Eine Sicht speichert eine Abfrage; ein Index ermöglicht schnelleres Nachschlagen.
  • SQL-Dialekte teilen die relationalen Grundgedanken, unterscheiden sich aber in Teilen der Syntax.
2

Eine Tabelle richtig lesen

Eine Tabelle gibt jeder Art von Datensatz eine klare Form: Zeilen beschreiben einzelne Dinge, Spalten deren Eigenschaften. Lies zuerst die Form, bevor du einen Wert deutest. Unterscheide dann die logischen Regeln einer Tabelle vom Layout einer Tabellenkalkulation: Die Position identifiziert keinen Datensatz, eine Liste von Telefonnummern ist mehr als ein Wert, und eine Summenzeile bedeutet etwas anderes als ein Verkauf. Diese Unterscheidungen erleichtern die spätere Arbeit mit Schlüsseln und Schemas deutlich.

2.1 Zeilen, Spalten und Werte

Eine Tabelle speichert Fakten über eine Art von Dingen. Jede Zeile in customers beschreibt einen Kunden; jede Spalte enthält eine Eigenschaft. Am Schnittpunkt von Zeile und Spalte steht ein Wert.

Einen Datensatz quer lesen

Hier sind ausgewählte Kundenspalten:

customer_idfirst_namelast_namecitystatezip_code
1MariaGarciaAustinTX78701
2JamesWilsonDenverCO80202
3AishaJohnsonBostonMA02108
4WeiChenSeattleWA98101

Suche customer_id 4 und lies dann city: Die Stadt von Wei ist Seattle. Um herauszufinden, wer in Denver wohnt, liest du den Namen in der Zeile mit Denver: James Wilson. Eine benachbarte Zeile beschreibt einen anderen Kunden.

Die vollständige Tabelle hat acht Spalten: customer_id, first_name, last_name, email, phone, city, state und zip_code. Die Telefonnummer von James ist NULL: Der Wert fehlt, aber seine Zeile hat trotzdem die Spalte für die Telefonnummer.

Die Begriffe zuordnen
AlltagsbegriffFormaler relationaler BegriffWeiterer üblicher Begriff
TabelleRelationkeiner
ZeileTupelDatensatz
SpalteAttributFeld

Ein Tupel ist eine ganze Zeile, nicht eine einzelne Zelle. Ein Attribut benennt eine Eigenschaft, die alle Zeilen haben. „Datensatz 4“ kann eine Kennung oder eine Anzeigeposition meinen; prüfe, was gemeint ist, denn Positionen können sich ändern.

Die Form abzählen

Der Grad zählt die Spalten, die Kardinalität einer Tabelle die Zeilen. Die vollständige Tabelle hat den Grad 8 und die Kardinalität 4. Die Darstellung oben zeigt sechs Spalten, ohne den Grad der Tabelle zu ändern.

Kommt ein Kunde hinzu, steigt die Kardinalität auf 5; der Grad bleibt 8. Kommt birth_date hinzu, steigt der Grad auf 9, und jede Zeile erhält einen Platz für diesen Wert, auch wenn er fehlt. Ein neuer Kunde fügt eine Zeile hinzu, keine Spalte.

Die Kardinalität einer Beziehung, etwa eins zu viele, beschreibt erlaubte Verknüpfungen, nicht die Zeilenanzahl einer Tabelle.

Qualifizierte Namen lesen

Spaltennamen sind innerhalb einer Tabelle eindeutig. orders.customer_id und customers.customer_id unterscheiden gleichnamige Spalten in verschiedenen Tabellen: Der Punkt trennt Tabellen- und Spaltennamen.

snake_case verwendet kleingeschriebene Wörter, die durch Unterstriche getrennt sind, wie in zip_code. Namen mit Leerzeichen müssen in SQL in Anführungszeichen stehen. Tabellennamen im Singular wie im Plural können funktionieren; verwende eine einheitliche Konvention.

Wichtige Erkenntnisse

  • Eine Zeile beschreibt ein einzelnes Exemplar, eine Spalte eine Eigenschaft.
  • Relation, Tupel und Attribut bedeuten Tabelle, Zeile und Spalte.
  • Der Grad zählt die Spalten; die Kardinalität einer Tabelle zählt die Zeilen.
  • Ein mit dem Tabellennamen qualifizierter Name zeigt, zu welcher Tabelle eine Spalte gehört.

2.2 Die Regeln hinter dem Raster

Eine relationale Tabelle hat eine logische Struktur, die über ihr rechteckiges Aussehen hinausgeht. Im formalen Modell ist sie eine Menge von Zeilen. Mengen enthalten keine doppelten Elemente und haben keine Reihenfolge. Spalten werden über ihren Namen identifiziert; verschiebst du eine Spalte in einer Anzeige, ändert sich also nicht die Information, für die sie steht.

Die Identität ergibt sich nicht aus der Position

Ein DBMS kann Zeilen nach Änderungen, Löschungen oder einer geänderten Art, den Speicher zu lesen, in anderer Reihenfolge zurückgeben. „Die dritte Zeile“ ist keine dauerhafte Möglichkeit, einen Kunden zu identifizieren. customer_id 3 identifiziert Aisha auch dann, wenn ihre Zeile als erste erscheint. Braucht eine Abfrage eine bestimmte Reihenfolge, fordert sie diese mit ORDER BY an.

SQL-Tabellen unterscheiden sich von formalen Relationen: Ohne Primärschlüssel oder eine andere passende Eindeutigkeitsbedingung können sie identische Zeilen enthalten. Zwei Kopien von ('Coffee mug', 12.50) bieten in diesen Spalten keinen Wert, der sie unterscheidet. Ein Primärschlüssel gibt jeder Zeile eine eindeutige Kennung und verhindert vollständig doppelte Zeilen.

Eine Spalte, eine Domäne

Eine Domäne ist die Menge der Werte, die in einer Spalte zulässig sind. Eine Stückzahl hat einen Ganzzahltyp und braucht eventuell zusätzlich eine Regel, dass sie positiv sein muss. Ein Kürzel eines Bundesstaats ist Text, aber nicht jeder Textwert ist ein gültiges Kürzel. Datentypen und Integritätsbedingungen beschreiben dem DBMS die zulässigen Werte.

Alle Zeilen haben dieselben Spalten. Eine einzelne Bestellung kann keine zusätzliche Spalte für eine Geschenknotiz nur für sich bekommen. Die Tabelle kann für jede Bestellung eine Spalte gift_note haben, mit NULL dort, wo keine Notiz erfasst wurde. Auch optionale Angaben haben einen festgelegten Platz.

Einzelne Werte getrennt halten

Ein atomarer Wert ist ein einzelner Wert im Sinne des Zwecks der Spalte. Eine Zelle für die Telefonnummer mit dem Inhalt „512-555-0147, 512-555-0199“ enthält eine Liste mit zwei Nummern. Nur eine der Nummern zu finden, zu prüfen oder zu entfernen wird umständlich. Eine Tabelle customer_phones kann jeder Telefonnummer eine eigene Zeile geben, wobei customer_id zeigt, wem die Nummer gehört.

Atomar bedeutet nicht, dass jeder Textwert in seine kleinsten Teile zerlegt werden muss. Ein Städtename kann aus mehreren Wörtern bestehen und trotzdem ein einziger Stadtwert sein. Entscheidend ist, ob die Zelle eine einzelne Information der Art speichert, für die die Spalte steht, oder eine Sammlung, die getrennt behandelt werden sollte.

Einen Export aus einer Tabellenkalkulation kritisch lesen

Ein Blatt mit Verkäufen kann eine auf halber Höhe wiederholte Kopfzeile, eine unterste Zeile mit der Beschriftung „SUMME“ und einen als „12,50 (Angebot)“ geschriebenen Preis enthalten. Für Menschen sind das nützliche Gestaltungsentscheidungen, aber sie mischen verschiedene Arten von Inhalten in denselben Spalten.

So liest du das Blatt als relationale Tabelle:

  1. Behandle die Spaltennamen als Kopfzeile, nicht als Verkaufsdatensätze.
  2. Lass jede Datenzeile von genau einem Verkauf handeln; berechne die Summe aus diesen Zeilen.
  3. Speichere den numerischen Preis getrennt von einer Anmerkung zum Verkauf.
  4. Gib jedem Verkauf einen Schlüssel, damit seine Zeile identifiziert werden kann.

Eine Summenzeile zwischen den Verkäufen könnte als weiterer Verkauf gezählt oder ein zweites Mal zur Summe addiert werden. Eine Anmerkung, die in einem numerischen Preis steckt, verhindert gewöhnliche Rechenoperationen.

Logische Tabellen und physische Speicherung

Eine Tabelle ist das logische Bild der Daten für den Nutzer. Das DBMS kann ihre Daten in Dateien, Seiten und Indizes speichern, die für einen effizienten Zugriff angeordnet sind. Datenunabhängigkeit bedeutet, dass sich bei Änderungen an dieser physischen Anordnung weder die Tabellennamen noch die Bedeutung der Spalten noch die Anfragen der Anwendungen ändern müssen.

Wichtige Erkenntnisse

  • Eine formale Relation hat verschiedene, ungeordnete Zeilen; SQL braucht Integritätsbedingungen, um Duplikate zu verhindern.
  • Eine bestimmte Zeilenreihenfolge muss mit ORDER BY angefordert werden.
  • Die Domäne einer Spalte beschreibt die für sie zulässigen Werte.
  • Jede Zelle enthält einen einzigen Wert im Sinne des Zwecks ihrer Spalte.
  • Jede Zeile hat dieselben Spalten, auch Plätze für fehlende Werte.
3

Typen wählen und fehlende Daten deuten

Der Typ einer Spalte bestimmt, was gespeichert werden kann, wie Werte sortiert werden und welche Berechnungen sinnvoll sind. Ziffern können eine Anzahl oder einen Code darstellen; für diese Verwendungen braucht man unterschiedliche Typen. Geldbeträge müssen exakt gespeichert werden, Messwerte dagegen können oft Näherungswerte sein. Fehlende Fakten werden eigens als NULL behandelt. Lerne diese Entscheidungen zusammen mit den wichtigen Unterschieden zwischen den Produkten kennen, vor allem der flexiblen Speicherung in SQLite und dem Umgang von SQL mit Vergleichen, deren Ergebnis unbekannt ist.

3.1 Die wichtigsten SQL-Datentypen

Ein Datentyp sagt einem DBMS, welche Art von Wert eine Spalte enthält und wie damit gearbeitet wird. Zahlen addieren, Texte vergleichen und Datumswerte ordnen sind unterschiedliche Operationen. Ein bekannter Typname kann sich außerdem je nach Datenbankprodukt unterschiedlich verhalten.

Zahlen: ganz, exakt und näherungsweise
ArtGängige TypenGeeignete Verwendung
Ganze ZahlenINTEGER, SMALLINT, BIGINTAnzahlen, Stückzahlen und ganzzahlige Kennungen
Exakte DezimalzahlenDECIMAL(p, s), NUMERIC(p, s)Geldbeträge und andere exakte Dezimalbeträge
NäherungswerteREAL, FLOAT, DOUBLE PRECISIONMesswerte, bei denen Rundungsdifferenzen akzeptabel sind

In PostgreSQL, MySQL und SQL Server reicht INTEGER von −2.147.483.648 bis 2.147.483.647. BIGINT reicht bis 9.223.372.036.854.775.807; auch die Ganzzahlspeicherung von SQLite kann diesen Bereich erreichen.

Bei Dezimalzahlen ist die Genauigkeit die Gesamtzahl der Ziffern und die Dezimalstellenanzahl die Anzahl der Nachkommastellen. DECIMAL(8, 2) lässt sechs Ziffern vor dem Komma: Der Höchstwert ist 999.999,99. Der Preis 12,50 passt hinein, 1.234.567,00 nicht. PostgreSQL, MySQL, SQL Server und Oracle speichern Dezimalzahlen exakt. SQLite akzeptiert diese Deklaration, erzwingt aber weder Genauigkeit noch Dezimalstellenanzahl und kann Nachkommawerte als binäre Gleitkommazahlen speichern.

Gleitkommazahlen stellen viele Dezimalbrüche nur näherungsweise dar. In doppelter Genauigkeit ergibt die Addition von 0,1 und 0,2 den Wert 0,30000000000000004. SQLite behandelt diese Dezimalliterale als Gleitkommazahlen. PostgreSQL behandelt Dezimalliterale ohne Typangabe als exakte numerische Werte, sodass dieselbe geschriebene Rechnung dort exakt sein kann; ausdrücklich in doppelter Genauigkeit angegebene Werte zeigen die Näherung.

Text, Datumswerte und Flags

CHAR(n) ist Text fester Länge; PostgreSQL und SQL Server füllen kürzere Werte mit Leerzeichen auf. VARCHAR(n) erlaubt unterschiedliche Längen bis zu einer Obergrenze. SQLite ignoriert beide Längenangaben und füllt nicht auf. TEXT speichert lange Texte in SQLite, PostgreSQL und MySQL. SQL Server verwendet dafür VARCHAR(MAX) oder NVARCHAR(MAX); der ältere SQL-Server-Typ TEXT ist abgekündigt.

Ein DATE speichert ein Kalenderdatum, ein TIME eine Uhrzeit und ein TIMESTAMP in Standard-SQL Datum und Uhrzeit. Schreibe Datumswerte in der Form Jahr-Monat-Tag, etwa '2026-03-02', damit der 2. März nicht mit dem 3. Februar verwechselt wird. Typisierte Datumswerte haben ein internes Speicherformat; die Anwendung legt ihr Anzeigeformat fest. SQLite hat keinen eigenen Datumstyp und speichert meist ISO-Datumstext. SQL Server verwendet DATETIME2 für Datum und Uhrzeit: Dort bedeutet TIMESTAMP ROWVERSION, einen binären Versionszähler.

Ein BOOLEAN steht für TRUE oder FALSE oder für NULL, wenn der Wert fehlt. PostgreSQL hat einen booleschen Typ; SQL Server verwendet BIT, MySQL behandelt BOOLEAN als kleine Ganzzahl, und SQLite speichert die Flags als 1 und 0. Binäre Typen wie BLOB oder BYTEA in PostgreSQL speichern Bytes, etwa kleine Bilder. Größere Dateien werden oft separat gespeichert, und eine Tabelle enthält nur einen Pfad oder eine URL.

Typaffinität in SQLite

In gewöhnlichen SQLite-Tabellen ist ein deklarierter Typ eine Präferenz, die Typaffinität heißt. Eine INTEGER-Spalte wandelt '42' in die Zahl 42 um, kann 'abc' aber als Text behalten. Eine STRICT-Tabelle in SQLite weist Text zurück, der sich nicht in eine gültige Ganzzahl umwandeln lässt.

Wichtige Erkenntnisse

  • Ganzzahlen speichern ganze Zahlen; exakte Dezimalzahlen und Gleitkommazahlen dienen unterschiedlichen Zwecken.
  • Die Genauigkeit zählt alle Ziffern, die Dezimalstellenanzahl die Nachkommastellen.
  • ISO-Datumstext verwendet die Reihenfolge Jahr-Monat-Tag.
  • Textlängen, boolesche Speicherung und Datumstypen unterscheiden sich zwischen den Dialekten.
  • Die Typaffinität in SQLite ist flexibel; STRICT-Tabellen erzwingen ihre unterstützten Typen.
  • TIMESTAMP in SQL Server ist eine Zeilenversion, kein Datum mit Uhrzeit.

3.2 Den Typ nach der Aufgabe des Werts wählen

Beginne damit, was ein Wert bedeutet und wie er verwendet wird. Eine Postleitzahl (ZIP-Code) enthält Ziffern, aber niemand addiert Postleitzahlen, um eine aussagekräftige Summe zu erhalten. Eine Stückzahl enthält ebenfalls Ziffern, und Stückzahlen zu addieren ist nützlich. Das Aussehen allein ist ein schlechter Wegweiser für den Typ.

Fünf Fragen stellen
  1. Was sind typische Werte, und welche Extremwerte müssen hineinpassen?
  2. Wird mit den Werten gerechnet?
  3. Müssen sie exakt sein, oder ist eine Näherung akzeptabel?
  4. Wie müssen sie sortiert und verglichen werden?
  5. Welche Größe passt zu realistischen künftigen Werten?
Geldbeträge und Messwerte

Geldbeträge müssen exakt sein. In PostgreSQL, MySQL und SQL Server kann ein Preis den Typ DECIMAL(8, 2) verwenden. Drei Artikel zu je 12,50 $ kosten genau 37,50 $. Binäre Gleitkommaspeicherung kann nach wiederholten Additionen winzige Fehler hinterlassen, sodass exakte Vergleiche unzuverlässig werden. In SQLite sorgt die Deklaration DECIMAL nicht für exakte Dezimalspeicherung; verwende für exakte Beträge ganzzahlige Centbeträge, sodass 12,50 $ als 1250 gespeichert wird.

Ein Messwert wie das Gewicht kann REAL verwenden, wenn kleine Rundungsdifferenzen akzeptabel sind. Lege die Einheit als Teil der Bedeutung der Spalte fest: weight_lb macht Pfund (lb) im Namen sichtbar. Ein numerischer Typ allein hält diese Einheit nicht fest.

Auch die Währung braucht eine Bedeutung. Mischt eine Tabelle Währungen, füge currency_code hinzu, etwa mit USD, EUR oder JPY. Die Anzahl der Nachkommastellen hängt von der Währung ab, und Beträge in verschiedenen Währungen müssen umgerechnet werden, bevor man sie addieren kann.

Codes und Namen sind Text

Verwende Text für Postleitzahlen, Telefonnummern, Kontonummern und Artikelnummern. Die Bostoner Postleitzahl '02108' verliert ihre führende Null, wenn sie in eine Ganzzahl umgewandelt wird. VARCHAR(10) kann auch ZIP+4 aufnehmen, etwa '02108-1234'. Telefonnummern können ein Pluszeichen, Leerzeichen und Bindestriche enthalten. Diese Zeichen gehören zur Darstellung einer Kennung und sind keine Rechenzeichen.

Plane Platz für echte Namen und Adressen ein. „Christopher Montgomery“ hat 22 Zeichen, daher ist VARCHAR(10) zu kurz. PostgreSQL und SQL Server weisen den Wert zurück; MySQL weist ihn im strikten Modus zurück und schneidet ihn andernfalls eventuell ab. SQLite speichert ihn, weil deklarierte Textlängen ignoriert werden. Ein großzügiges Feld variabler Länge vermeidet, dass gewöhnliche Namen abgewiesen werden, ohne für jede Zeile die maximale Länge zu reservieren.

Die Sortierung entlarvt eine falsche Wahl

Beim Sortieren von Text werden Zeichen verglichen. Als Text gespeicherte Zahlen können in der Reihenfolge '1', '10', '2', '25', '3' erscheinen. Eine numerische Spalte sortiert diese Werte numerisch. Wählst du für jedes Feld Text, verlagerst du Prüf- und Umwandlungsarbeit auf spätere Berechnungen.

Bei Datumswerten gibt es eine ähnliche Falle. Datumstext im US-Stil setzt '12/01/2025' in Textreihenfolge hinter '03/02/2026', obwohl Dezember 2025 früher liegt. Verwende einen Datumstyp oder in SQLite einheitlich formatierten ISO-Text, damit die Kalenderreihenfolge erhalten bleibt.

Die Typen eines Produkts zusammen lesen

Ein Produkt kann product_id INTEGER, sku VARCHAR(20), name VARCHAR(100), price DECIMAL(8, 2), weight_lb REAL, in_stock BOOLEAN und added_on DATE verwenden. Jeder Typ folgt einer Aufgabe: Identifikation, Speicherung eines Codes, ein Name, ein exakter Geldbetrag, ein Messwert, ein Flag oder ein Datum. In SQLite speicherst du den Preis als ganzzahligen Centbetrag und das Datum als ISO-Text.

Wichtige Erkenntnisse

  • Wähle Typen nach Bedeutung, Rechnen, Exaktheit, Reihenfolge und realistischer Größe.
  • Speichere Codes als Text, damit führende Nullen und Satzzeichen erhalten bleiben.
  • Speichere Geldbeträge als exakte Dezimalzahlen, wo das unterstützt wird, und in SQLite als ganzzahlige Centbeträge.
  • Ein numerischer Betrag braucht eine Währung, ein Messwert eine Einheit.
  • Als Text gespeicherte Werte werden wie Text sortiert, auch wenn alle Zeichen Ziffern sind.

3.3 NULL und unbekannte Ergebnisse

NULL kennzeichnet einen fehlenden Wert. NULL unterscheidet sich von der Zahl Null, vom leeren Text '' und vom Text 'NULL'. Ein bekannter Rabatt von 0 bedeutet keinen Rabatt; ein Rabatt mit NULL bedeutet, dass der Betrag nicht erfasst ist. Eine NULL-fähige Spalte lässt fehlende Daten zu, während NOT NULL einen Wert verlangt.

Fehlen hat mehr als eine Bedeutung

Für James Wilson ist keine Telefonnummer erfasst. Bestellung 102 hat kein Versanddatum, weil sie noch nicht versandt wurde. Ein Firmenkunde hat womöglich keinen zutreffenden Nachnamen. Alle Fälle lassen sich mit NULL darstellen, aber NULL hält nicht fest, welcher Grund zutrifft. Ein Datenkatalog sollte die Bedeutung jeder Spalte angeben.

Leerer Text ist in PostgreSQL und SQLite ein vorhandener Textwert. Oracle behandelt leeren Text derzeit als NULL. Abfragewerkzeuge zeigen beides womöglich als scheinbar leere Zelle an; am Aussehen allein lassen sie sich also nicht unterscheiden.

Vergleiche können unbekannt sein

SQL-Vergleiche haben drei mögliche Ergebnisse: TRUE, FALSE und UNKNOWN. Ein Vergleich, an dem NULL beteiligt ist, auch NULL = NULL, ergibt UNKNOWN. Von zwei fehlenden Fakten ist nicht bekannt, dass sie denselben Wert haben.

Eine WHERE-Klausel behält nur Ergebnisse, die TRUE sind. Lies diese Bedingungen:

  • phone IS NULL findet fehlende Telefonnummern.
  • phone IS NOT NULL findet erfasste Telefonnummern.
  • phone = NULL ergibt UNKNOWN und findet keine Zeilen.

Einen Vergleich zu verneinen bringt einen fehlenden Wert nicht zurück. Nimm zu den vier Kunden des Shops Daniel Brown hinzu, dessen Bundesstaat NULL ist. Die Bedingung state <> 'TX' behält CO, MA und WA: drei Zeilen. Daniel wird ausgeschlossen, weil der Vergleich seines Bundesstaats UNKNOWN ergibt. Sollen fehlende Bundesstaaten ebenfalls dabei sein, lautet die Bedingung state <> 'TX' OR state IS NULL.

Bedingungen sorgfältig verknüpfen

Stell dir UNKNOWN als „könnte TRUE oder FALSE sein“ vor. Ein Ergebnis steht nur fest, wenn beide Möglichkeiten zum selben Ausgang führen.

AusdruckErgebnisGrund
TRUE AND UNKNOWNUNKNOWNDer zweite Teil entscheidet, ob beide wahr sind.
FALSE AND UNKNOWNFALSEEin falscher Teil macht AND bereits falsch.
TRUE OR UNKNOWNTRUEEin wahrer Teil erfüllt OR bereits.
FALSE OR UNKNOWNUNKNOWNDer zweite Teil entscheidet über OR.
NOT UNKNOWNUNKNOWNDie Verneinung kann die fehlende Information nicht liefern.
Berechnungen und Zusammenfassungen

Gewöhnliche Arithmetik mit NULL ergibt NULL: 5 + NULL ist NULL. Ein Positionspreis multipliziert mit einer fehlenden Stückzahl fehlt ebenfalls und ergibt nicht etwa den Wert Null. Verkettest du Text mit || und NULL, ergibt das in PostgreSQL und SQLite NULL; die Verkettung in Oracle behandelt NULL als leeren Text.

Zusammenfassende Funktionen überspringen NULL-Eingaben in der Regel. Bei fünf Kunden, darunter James und Daniel ohne Telefonnummer, zählt COUNT(*) alle fünf Zeilen. COUNT(phone) zählt die drei erfassten Telefonnummern. Der Durchschnitt von 4, NULL und 2 ist 3, weil die beiden bekannten Zahlen durch zwei geteilt werden; würde man NULL als Null behandeln, ergäbe sich fälschlich 2.

Verwende NOT NULL für Angaben, die vorhanden sein müssen, etwa ein Bestelldatum. Es erzwingt weder eine positive Zahl noch einen nicht leeren Text: Das sind eigene Regeln. Primärschlüssel verlangen eine Identität ohne NULL; gewöhnliche SQLite-Tabellen haben bei manchen Primärschlüsseldeklarationen eine historische Ausnahme, deshalb ist ein ausdrückliches NOT NULL dort wichtig.

Wichtige Erkenntnisse

  • NULL kennzeichnet fehlende Information; 0 und leerer Text haben andere Bedeutungen.
  • Prüfe fehlende Werte mit IS NULL oder IS NOT NULL.
  • Vergleiche, an denen NULL beteiligt ist, ergeben UNKNOWN; WHERE behält nur TRUE.
  • AND, OR und NOT müssen UNKNOWN berücksichtigen.
  • Gewöhnliche Arithmetik mit NULL ergibt NULL.
  • COUNT(*) zählt Zeilen; COUNT(column) zählt Einträge, die nicht NULL sind.
  • Dokumentiere für jede Spalte, warum NULL dort zulässig ist.
4

Datensätze identifizieren und verknüpfen

Schlüssel beantworten zwei verschiedene Fragen: „Welche Zeile ist das?“ und „Auf welche zugehörige Zeile verweist sie?“ Ein Primärschlüssel gibt einer Tabelle eine Hauptkennung, ein Fremdschlüssel trägt einen Verweis. Prüfe mögliche Kennungen an künftigen Daten, nicht nur an einer kleinen Stichprobe. Lies Verknüpfungen dann in beide Richtungen und achte darauf, ob eine Verknüpfung optional ist. Zusammengesetzte Schlüssel und Zwischentabellen übertragen dieselben Ideen auf Datensätze, die durch Kombinationen identifiziert werden, und auf Viele-zu-viele-Beziehungen.

4.1 Schlüsselkandidaten und Primärschlüssel

Ein Schlüssel identifiziert eine Zeile über ihre Werte. Namen können sich wiederholen; Kundenkennungen unterscheiden Datensätze, sodass man sie lesen, ändern oder verknüpfen kann.

Eindeutigkeit und Minimalität prüfen

Ein Superschlüssel ist eine Spalte oder Spaltenkombination, die eine Zeile eindeutig identifiziert. Ein Schlüsselkandidat ist ein minimaler Superschlüssel: Entfernt man eine beliebige Spalte, geht diese Garantie verloren. Wähle einen Kandidaten als Primärschlüssel; die übrigen sind Alternativschlüssel.

Angenommen, employee_id, ssn und email sind jeweils Pflichtangaben und eindeutig. Dann ist jede dieser Spalten ein Schlüsselkandidat. (employee_id, department) ist ein Superschlüssel, aber kein Kandidat: employee_id allein identifiziert den Mitarbeiter. Ein wiederholter Nachname besteht den Eindeutigkeitstest nicht.

BegriffTest
SuperschlüsselIdentifiziert die Kombination eine Zeile?
SchlüsselkandidatIst er eindeutig, ohne unnötige Spalte?
PrimärschlüsselWelcher Kandidat ist die Hauptkennung?
AlternativschlüsselWelcher andere Kandidat steht noch zur Verfügung?

Vier Kunden mit verschiedenen Nachnamen begründen keinen Schlüssel: Ein fünfter kann denselben Namen haben. Die Eindeutigkeit muss für alle zulässigen künftigen Daten gelten. Eine Wiederholung widerlegt einen vorgeschlagenen Schlüssel; eine Stichprobe ohne Wiederholungen braucht trotzdem eine stützende Geschäftsregel.

Die Deklaration lesen

Eine Tabelle hat höchstens einen Primärschlüssel. Seine Werte sind eindeutig, und seine Spalten dürfen nicht NULL sein. Stabile Werte vermeiden wiederholte Änderungen an Verweisen. Achte auf PRIMARY KEY: Weder der Name einer Spalte noch ihre Position deklariert den Primärschlüssel.

Existiert Kunde 1, wird ein weiterer Kunde mit dem Schlüssel 1 abgewiesen. Ein weggelassener Schlüssel braucht einen Standardwert oder einen generierten Wert. INTEGER PRIMARY KEY in SQLite erzeugt eine Ganzzahl, wenn der Wert weggelassen oder als NULL angegeben wird. Einige andere Primärschlüsseldeklarationen in gewöhnlichen SQLite-Tabellen lassen aus historischen Gründen NULL zu; ein ausdrückliches NOT NULL, eine STRICT-Tabelle oder die Form mit ganzzahligem Primärschlüssel schließt diese Lücke.

Einen zusammengesetzten Schlüssel lesen

In enrollments(student_id, course_id, term, grade) kann ein Student mehrere Kurse belegen und einen davon in einem anderen Semester wiederholen. (student_id, course_id, term) identifiziert eine Einschreibung: ein zusammengesetzter Primärschlüssel, nicht drei getrennte Primärschlüssel.

Einzelne Bestandteile dürfen sich wiederholen, die vollständige Kombination nicht. Die meisten DBMS legen zum Nachschlagen einen Index für den Primärschlüssel an, aber der Schlüssel garantiert keine Reihenfolge der Abfrageausgabe.

Wichtige Erkenntnisse

  • Ein Schlüsselkandidat ist ein minimaler Superschlüssel.
  • Ein Kandidat ist der Primärschlüssel; die übrigen sind Alternativschlüssel.
  • Die Eindeutigkeit eines Schlüssels muss für zulässige künftige Daten gelten.
  • Ein Primärschlüssel ist eindeutig, nie NULL und kann mehrere Spalten umfassen.
  • Die Deklaration legt den Schlüssel fest, nicht sein Name oder seine Position.

4.2 Natürliche und generierte Kennungen

Ein natürlicher Schlüssel stammt aus Daten der realen Welt, etwa die FIN (VIN) eines Fahrzeugs, die ISBN einer Buchausgabe oder das Kürzel eines Bundesstaats. Ein Surrogatschlüssel existiert nur, um eine Zeile zu identifizieren, oft als generierte Ganzzahl oder UUID.

Eine dauerhafte Kennung wählen

Bevorzuge eindeutige, stets vorhandene, stabile, kompakte Werte, die man unbedenklich weitergeben kann. Namen wiederholen sich; Telefonnummern und E-Mail-Adressen ändern sich oder werden geteilt. Sozialversicherungsnummern sind sensibel und für manche Kunden nicht verfügbar; verwendet man sie in verweisenden Tabellen, verbreitet sich diese Information.

Mit einer generierten customer_id behält Maria die Kennung 1, auch wenn sich ihre Kontaktdaten ändern. Ein natürlicher Schlüssel state_code wie TX kann gut funktionieren, weil er kompakt, standardisiert und in Adressdatensätzen nützlich ist.

Geschäftliche Kennungen eigens schützen

Dieselbe Person kann sich zweimal registrieren und zwei Surrogat-IDs erhalten. Die IDs unterscheiden Zeilen; doppelte Personen erkennen sie nicht.

Muss die E-Mail-Adresse jedes Konto identifizieren, verwende NOT NULL UNIQUE. UNIQUE allein erlaubt in PostgreSQL, SQLite und MySQL mehrere NULL-Werte. SQL Server erlaubt bei einer UNIQUE-Bedingung auf einer einzelnen Spalte normalerweise genau einen NULL-Wert. Vorhandensein und Eindeutigkeit sind getrennte Regeln.

Die verpflichtende, eindeutige E-Mail-Adresse ist ein Alternativschlüssel. Ändert sie sich, bleibt die Surrogat-Kundennummer in bestehenden Bestellungen unverändert. Ändert sich ein referenzierter Primärschlüssel, müssen auch die Verweise in den Kindtabellen konsistent bleiben.

Syntax für generierte Schlüssel erkennen
SystemÜbliche Form für generierte Ganzzahlen
Standard-SQL, PostgreSQL, OracleGENERATED ALWAYS AS IDENTITY
MySQLAUTO_INCREMENT
SQL ServerIDENTITY(1,1)
SQLiteINTEGER PRIMARY KEY

PostgreSQL kennt außerdem die ältere Form SERIAL. Löschungen, fehlgeschlagene Einfügungen und abgebrochene Vorgänge können Lücken hinterlassen. Die IDs 1, 2 und 4 kennzeichnen drei Zeilen, nicht vier. Wer neu nummeriert, um Lücken zu schließen, kann Verweise zerstören.

UUIDs erkennen

Eine UUID ist eine 128-Bit-Kennung, die meist als 36 Zeichen mit Bindestrichen geschrieben wird: 7c9e6679-7425-40de-944b-e07fc1f90ae7. Computer können sie unabhängig voneinander mit sehr geringem Kollisionsrisiko erzeugen; das ist nützlich, wenn Datensätze von mehreren Orten zusammengeführt werden.

UUIDs brauchen mehr Platz und sind schwerer zu lesen als kleine Ganzzahlen. Wähle danach, wie Datensätze erzeugt und referenziert werden. Beide Arten von Schlüsseln sind Etiketten: Ihr Höchstwert ist keine Zeilenanzahl, und ihre Reihenfolge muss nicht die zeitliche Abfolge von Ereignissen zeigen.

Wichtige Erkenntnisse

  • Natürliche Schlüssel stammen von Kennungen aus der realen Welt; Surrogatschlüssel existieren zur Identifikation von Zeilen.
  • Bevorzuge Primärschlüssel, die stabil, kompakt, stets vorhanden und unbedenklich weiterzugeben sind.
  • Ein Surrogatschlüssel verhindert keine doppelten Datensätze für dasselbe Objekt der realen Welt.
  • NOT NULL UNIQUE kann eine verpflichtende alternative Kennung schützen.
  • Lücken in generierten IDs sind normal; IDs sind Etiketten, keine Zählungen.
  • UUIDs lassen sich unabhängig voneinander mit sehr geringem Kollisionsrisiko erzeugen.

4.3 Fremdschlüssel und gültige Verweise

Ein Fremdschlüssel ist eine Spalte oder Spaltengruppe, die auf einen Primärschlüssel oder einen anderen geeigneten eindeutigen Schlüssel verweist. Die Tabelle mit dem Verweis ist die Kindtabelle; die Tabelle, auf die sie zeigt, ist die Elterntabelle. Ein Fremdschlüssel, der nicht NULL ist, muss zu einem existierenden Elternschlüssel passen, wenn die Integritätsbedingung durchgesetzt wird.

Einem Wert über Tabellen hinweg folgen
order_idcustomer_idorder_dateshipped_date
10112026-03-022026-03-04
10222026-03-05NULL
10312026-03-092026-03-10

orders.customer_id verweist auf customers.customer_id. Bestellung 102 zeigt auf Kunde 2, James Wilson. Die Bestellungen 101 und 103 zeigen beide auf Kunde 1, Maria Garcia. Im Fremdschlüssel sind Wiederholungen erlaubt; der referenzierte Elternschlüssel ist eindeutig.

Diese Regel heißt referenzielle Integrität. Eine Bestellung für Kunde 99 wird abgewiesen, wenn Kunde 99 nicht existiert. Andernfalls wäre sie verwaist: eine Kindzeile ohne passende Elternzeile. Ein Name allein erzeugt keine Integritätsbedingung. Ein Fremdschlüssel namens placed_by kann trotzdem auf customer_id verweisen; die Verknüpfung entsteht durch den deklarierten Verweis, wobei die Schlüsselspalten zueinander passende Typen haben.

Optional oder verpflichtend

Eine NULL-fähige coupon_id kann NULL sein, wenn eine Bestellung keinen Gutschein hat. Eine als NOT NULL deklarierte customer_id verlangt, dass jede Bestellung einen Kundenverweis hat, und der Fremdschlüssel verlangt, dass dieser Kunde existiert. Beide Integritätsbedingungen wirken zusammen: Die eine verlangt einen Wert, die andere prüft den Verweis.

Fremdschlüssel müssen keine Tabellengrenzen überschreiten. In employees(employee_id, name, manager_id) kann manager_id auf employee_id in derselben Tabelle verweisen. Bei der Person an der Spitze des Unternehmens kann der Verweis auf die Führungskraft NULL sein.

Änderungen an Elternzeilen brauchen eine Regel
AktionWirkung, wenn eine referenzierte Elternzeile gelöscht wird
NO ACTION oder RESTRICTLehnt das Löschen ab, solange Verweise bestehen, abhängig vom Prüfzeitpunkt der Integritätsbedingung
CASCADELöscht die verweisenden Kindzeilen mit
SET NULLBehält die Kindzeilen und leert ihren Verweis; die Spalte muss NULL zulassen

Mit der Standardaktion kann Kunde 1 nicht gelöscht werden, solange die Bestellungen 101 und 103 noch auf diese Kundin verweisen. Eine Kaskade von einer Bestellung auf ihre Positionen kann sinnvoll sein, weil diese Positionen zu genau dieser Bestellung gehören. ON UPDATE legt das entsprechende Verhalten fest, wenn sich ein Elternschlüssel ändert. Kaskadierung bedeutet nicht, dass das Löschen einer Kindzeile ihre Elternzeile löscht.

Zusammengesetzte Verweise und Durchsetzung

Wird eine Bestellposition durch (order_id, product_id) identifiziert, braucht eine Lieferung, die auf diese Position verweist, beide Spalten. Die Kombination muss zu einer existierenden Position passen. Bestellung und Produkt getrennt abzugleichen reicht nicht: Dieses Produkt kam in dieser Bestellung vielleicht nie vor. Ein verpflichtender zusammengesetzter Verweis deklariert alle seine Spalten als NOT NULL.

PostgreSQL, SQL Server, Oracle und MySQL mit seiner üblichen Engine InnoDB setzen deklarierte Fremdschlüssel durch. In SQLite musst du die Fremdschlüsselprüfung für jede Verbindung mit PRAGMA foreign_keys = ON; aktivieren und kontrollieren, bevor du dich darauf verlässt. Eine deklarierte, aber deaktivierte Integritätsbedingung kann die Zeilen nicht schützen. Fremdschlüssel führen Abfrageergebnisse auch nicht von selbst zusammen; eine Abfrage muss der Verknüpfung ausdrücklich folgen, meist über einen Join.

Wichtige Erkenntnisse

  • Ein Fremdschlüsselwert, der nicht NULL ist, muss zu einem existierenden referenzierten Schlüssel passen.
  • Fremdschlüsselwerte können sich wiederholen; die Werte des Elternschlüssels sind eindeutig.
  • NOT NULL macht die Verknüpfung verpflichtend.
  • Referenzielle Aktionen steuern, was mit Kindzeilen geschieht, wenn sich eine Elternzeile ändert.
  • Ein zusammengesetzter Verweis muss zur vollständigen Kombination des Elternschlüssels passen.
  • Die Fremdschlüsselprüfung in SQLite muss für jede Verbindung aktiviert werden.

4.4 Die Kardinalität einer Beziehung in beide Richtungen lesen

Um eine Beziehung zu bestimmen, stell zwei Fragen: „Wie viele Zeilen dort können mit einer Zeile hier verknüpft sein?“ und dann die umgekehrte Frage. Berücksichtige das Minimum ebenso wie das Maximum. Die heutige Stichprobe zeigt, was passiert ist; die Integritätsbedingungen beschreiben, was erlaubt ist.

Ein Kunde, viele Bestellungen

Ein Kunde kann keine oder mehrere Bestellungen aufgeben. Jede Bestellung des Shops gehört zu genau einem Kunden, weil orders.customer_id ein Fremdschlüssel ist, der nicht NULL sein darf. Das ist eine Eins-zu-viele-Beziehung. Der Fremdschlüssel gehört in orders, auf die „Viele“-Seite: Jede Bestellung speichert einen Kundenverweis.

Maria hat die Bestellungen 101 und 103; James hat Bestellung 102. Aisha und Wei haben keine. Dass sie in orders nicht vorkommen, ist zulässig. Ein Fremdschlüssel verlangt zu jeder Kindzeile eine Elternzeile, aber nicht, dass jede Elternzeile eine Kindzeile hat.

Eins zu eins braucht zusätzlich Eindeutigkeit

In user_profiles(user_id, bio, photo_url) sei user_id zugleich Primärschlüssel und Fremdschlüssel auf users. Jedes Profil verweist auf einen Nutzer, und ein Nutzer kann höchstens ein Profil haben, weil sich der Profilschlüssel nicht wiederholen kann. Ein Nutzer hat vielleicht noch kein Profil.

Ein Fremdschlüssel ohne Eindeutigkeit würde mehrere Profile für denselben Nutzer erlauben und ergäbe eins zu viele. Die Eindeutigkeitsbedingung ändert das Maximum. Solche getrennten Profiltabellen können optionale oder sensible Angaben vom Hauptdatensatz des Nutzers getrennt halten.

Viele zu viele nutzt eine Tabelle aus Paaren

Eine Bestellung kann mehrere Produkte enthalten, und ein Produkt kann in mehreren Bestellungen vorkommen. Eine Zwischentabelle, auch Brücken-, Verknüpfungs- oder Assoziationstabelle genannt, erfasst jede Paarung:

order_idproduct_idquantityunit_price
10111212,50
1011218,99
10213134,00
10311412,50

order_id verweist auf orders; product_id verweist auf products. Der zusammengesetzte Primärschlüssel (order_id, product_id) erlaubt dasselbe Produkt in verschiedenen Bestellungen, verhindert aber, dass dasselbe Paar zweimal vorkommt. Zwei Eins-zu-viele-Verknüpfungen setzen die Viele-zu-viele-Beziehung um.

quantity und unit_price gehören zur Paarung. Sie beschreiben, wie viel von diesem Produkt in dieser Bestellung verkauft wurde und welcher Preis damals verlangt wurde. Ein aktueller Produktpreis kann sich später ändern; er darf den historisch verlangten Betrag nicht überschreiben.

Für Bestellung 101 sind die beiden Positionsbeträge zwei Becher zu je 12,50 $, also 25,00 $, und ein Ladegerät zu 8,99 $. Zusammen kosten sie 33,99 $. Die Stückzahl gibt an, wie viele Becher gekauft wurden; zwei doppelte Becherpositionen zu speichern würde dem gewählten Schlüssel dieser Tabelle widersprechen.

Listen und feste Plätze vermeiden

Eine Zelle product_ids mit dem Textwert '11,12' versteckt mehrere Verweise in einem einzigen Textwert. Spalten wie product1, product2 und product3 legen eine feste Obergrenze fest und lassen ungenutzte Plätze zurück. Eine Zwischentabelle fügt für jede weitere Paarung eine Zeile hinzu und lässt das DBMS jeden Verweis einzeln prüfen.

Eine selbstreferenzierende Beziehung nutzt dasselbe Muster innerhalb einer Tabelle: Viele Mitarbeiter können über manager_id auf dieselbe Führungskraft verweisen. Die Führungskraft ist ebenfalls eine Mitarbeiterzeile. Lies jede Verknüpfung als Rolle, damit die Identität des Mitarbeiters und der Verweis auf die Führungskraft getrennt bleiben.

Wichtige Erkenntnisse

  • Lies in jeder Richtung das zulässige Minimum und Maximum.
  • Bei eins zu viele steht der Fremdschlüssel auf der „Viele“-Seite.
  • Ein eindeutiger Fremdschlüssel begrenzt eine Beziehung auf höchstens eine Kindzeile pro Elternzeile.
  • Eine Zwischentabelle stellt Viele-zu-viele-Verknüpfungen durch Zeilen aus Paaren dar.
  • Angaben wie Stückzahl und Verkaufspreis können zu einer Paarung gehören.
  • Eine Selbstreferenz verknüpft Rollen innerhalb einer Tabelle.
5

Ein Schema lesen und seinen Verknüpfungen folgen

Ein Schema hält die Struktur fest, die Tabellen ihre Bedeutung gibt: Spaltentypen, Kennungen, Verweise und Integritätsbedingungen. Ein Diagramm macht diese Verknüpfungen sichtbar, während eine Tabellendefinition die Regeln genau angibt. Nutze beide Formen, um den Weg von einer Frage zu ihrer Antwort zu finden, und lies die Werte dann aus den tatsächlichen Zeilen ab. Halte Struktur und aktuelle Daten auseinander: Zu wissen, dass Bestellungen auf Kunden verweisen, sagt dir nicht, welche Kunden heute bestellt haben.

5.1 Struktur, aktuelle Daten und Integritätsbedingungen

Ein Schema beschreibt Tabellen, Spalten, Datentypen und Integritätsbedingungen. Eine Ausprägung sind die zu einem bestimmten Zeitpunkt gespeicherten Daten. Kommt eine Bestellung hinzu, ändert sich die Ausprägung; kommt eine neue Spalte hinzu, ändert sich das Schema. Das Schema sagt, was gespeichert werden kann, die Zeilen sagen, was jetzt gespeichert ist.

Eine Kurzbeschreibung lesen

customers(customer_id, first_name, last_name, email, phone, city, state, zip_code) nennt eine Tabelle und ihre Spalten. In Notizen werden Primärschlüssel manchmal unterstrichen oder mit PK markiert und Verweise mit FK. So nennt zum Beispiel orders(order_id PK, customer_id FK → customers, order_date, shipped_date) den Hauptschlüssel und die Verknüpfung zum Kunden.

Eine vollständige Tabellendefinition lesen
CREATE TABLE orders (
  order_id INTEGER PRIMARY KEY,
  customer_id INTEGER NOT NULL REFERENCES customers (customer_id),
  order_date DATE NOT NULL,
  shipped_date DATE
);

Lies eine Spalte nach der anderen. order_id ist der ganzzahlige Primärschlüssel. customer_id ist eine Pflichtangabe und muss auf einen Kunden verweisen. order_date ist eine Pflichtangabe. shipped_date darf NULL sein. Diese Definition beschreibt die zulässige Struktur, keine Liste existierender Bestellungen.

Integritätsbedingungen beantworten unterschiedliche Fragen:

IntegritätsbedingungWas sie prüft
PRIMARY KEYEine eindeutige Zeilenkennung, eventuell zusammengesetzt
NOT NULLEin Wert ist vorhanden
UNIQUEWiederholte Werte, die nicht NULL sind, sind verboten; der Umgang mit NULL ist unterschiedlich
REFERENCESEin Verweis passt zu einem Elternschlüssel
CHECKEine Bedingung darf nicht FALSE sein
DEFAULTLiefert einen Wert, wenn keiner angegeben ist

Ein Standardwert ersetzt keinen angegebenen ungültigen Wert. Hat status die Angabe DEFAULT 'pending' und lässt du den Status weg, wird 'pending' eingetragen; ein angegebener Wert muss trotzdem die übrigen Regeln der Spalte erfüllen.

Regeln für eine Bestellposition kombinieren
CREATE TABLE order_items (
  order_id INTEGER NOT NULL REFERENCES orders (order_id),
  product_id INTEGER NOT NULL REFERENCES products (product_id),
  quantity INTEGER NOT NULL CHECK (quantity > 0),
  unit_price DECIMAL(8, 2) NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

Der Primärschlüssel am Ende umfasst zwei Spalten. Eine zweite Position für dieselbe Bestellung und dasselbe Produkt scheitert. Die Stückzahl 0 scheitert an der Prüfung. Eine fehlende Stückzahl scheitert an NOT NULL: Die Prüfung allein würde NULL zulassen, weil NULL > 0 UNKNOWN ergibt und nicht FALSE. Ein ausdrückliches NOT NULL auf beiden Schlüsselteilen vermeidet außerdem die historische Ausnahme von SQLite für zusammengesetzte Schlüssel mit NULL. Verwende in SQLite ganzzahlige Centbeträge für einen exakten unit_price; die Dezimaldeklaration allein sorgt nicht für exakte Speicherung.

Das Schema und seine Bedeutungen finden

In der SQLite-Shell zeigt .schema orders die Definition an; in psql von PostgreSQL beschreibt \d orders die Tabelle. Die Sichten INFORMATION_SCHEMA listen in PostgreSQL, MySQL und SQL Server strukturelle Metadaten auf. SQLite listet Objekte in sqlite_schema auf, und grafische Werkzeuge zeigen Tabellen und Spalten in einem Baum.

„Schema“ bezeichnet in Systemen wie PostgreSQL und SQL Server außerdem einen Namensraum. sales.orders bezeichnet die Tabelle orders im Schema sales. Ein Datenkatalog liefert Bedeutungen, die die Struktur nicht ausdrücken kann, etwa die Währung der Preise oder ob ein fehlendes Versanddatum „nicht versandt“ bedeutet. Um Zeilen zu sehen, liest eine Abfrage wie SELECT * FROM orders; die aktuelle Ausprägung.

Wichtige Erkenntnisse

  • Ein Schema ist Struktur; eine Ausprägung sind die Daten zu einem Zeitpunkt.
  • Lies den Typ einer Spalte zusammen mit all ihren Integritätsbedingungen.
  • Eine verpflichtende positive Zahl braucht sowohl NOT NULL als auch eine Prüfung auf positive Werte.
  • Ein zusammengesetzter Primärschlüssel wird über die ganze Kombination deklariert.
  • Ein Datenkatalog hält Bedeutungen und Einheiten fest, die über das Schema hinausgehen.

5.2 Die Enden einer Linie im Schemadiagramm lesen

Ein Schemadiagramm zeichnet jede Tabelle als Kasten. Der Titel nennt die Tabelle; der Inhalt listet die Spalten und oft ihre Typen auf. PK markiert Primärschlüssel, FK markiert Fremdschlüssel. Beziehungslinien zeigen, welcher Fremdschlüssel auf welchen Elternschlüssel verweist.

Zuerst die Art der Linie bestimmen

Manche Diagramme verwenden einen Pfeil vom Fremdschlüssel zum referenzierten Schlüssel. Ein Pfeil von orders.customer_id zu customers.customer_id beschreibt die Richtung des Verweises. Andere Werkzeuge beschreiben mit Endsymbolen, wie viele Zeilen verknüpft sein können. Sieh in der Legende des Diagramms nach: Die Richtung eines Pfeils und die Kardinalität einer Beziehung sind unterschiedliche Informationen.

Krähenfußsymbole lesen

In der Krähenfußnotation bedeutet ein Strich eins, ein Kreis null und ein Fuß mit drei Zinken viele. Jedes Linienende gibt ein Minimum und ein Maximum an. Das Symbol, das der Tabelle am nächsten ist, gibt das Maximum an, das andere das Minimum.

EndsymboleZulässige Anzahl von Zeilen an diesem Ende
Strich und StrichGenau eins
Kreis und StrichNull oder eins
Strich und KrähenfußEins oder mehr
Kreis und KrähenfußNull oder mehr

Wenn du von einer Tabelle aus liest, schau auf die Symbole neben der anderen Tabelle. Diese Symbole beschreiben, wie viele Zeilen dort zu deiner einen Ausgangszeile passen können.

Kunden und Bestellungen durchgehen

Die Linie im Shop hat neben customers die Symbole für genau eins und neben orders die Symbole für null oder mehr.

  1. Beginne mit einem Kunden. Schau auf das Ende bei den Bestellungen: Der Kunde kann keine oder mehrere Bestellungen haben.
  2. Beginne mit einer Bestellung. Schau auf das Ende bei den Kunden: Die Bestellung gehört zu genau einem Kunden.
  3. Prüfe die Definition: Der Fremdschlüssel, der nicht NULL sein darf, steht in orders; diese Tabelle ist also die „Viele“-Seite, und jede Bestellung braucht einen gültigen Kunden.

Der Krähenfuß steht neben der Tabelle mit dem sich wiederholenden Fremdschlüssel. Liest du das nahe Ende, während du von derselben Tabelle ausgehst, kehrst du die Bedeutung um. Ein NULL-fähiger Kundenverweis würde das Ende bei den Kunden zu null oder eins ändern; er würde nicht jeden Kunden auf eine Bestellung beschränken.

Eine Zwischentabelle erkennen

Der Shop hat Eins-zu-viele-Verknüpfungen von orders zu order_items und von products zu order_items. Beide „Viele“-Enden treffen sich bei order_items. Die beiden Fremdschlüssel dieser Tabelle bilden ihren Primärschlüssel. Durch diese Struktur kann eine Bestellung mehrere Produkte enthalten und ein Produkt in mehreren Bestellungen vorkommen.

Das Diagramm beschreibt zulässige Verbindungen, nicht die heutigen Anzahlen. Es erlaubt, dass Maria mehrere Bestellungen hat und Aisha keine. Wie viele jede tatsächlich hat, erfährst du aus den Zeilen. Ein Minimum von eins von der Eltern- zur Kindseite kann eine zusätzliche Geschäftsregel ausdrücken; ein Fremdschlüssel allein verlangt nicht, dass eine Elternzeile Kindzeilen hat.

Verwandte Diagrammarten erkennen

Ein Entity-Relationship-Diagramm, das beim Entwurf entsteht, kann geschäftliche Entitäten zeigen, bevor Tabellen existieren. Diagramme nach Chen verwenden Ovale für Attribute und Rauten für Beziehungen. Ein Schemadiagramm zeigt die tatsächlichen Tabellen und ihre deklarierten Schlüssel. Beide helfen, Strukturen zu vermitteln, aber ihre Symbole müssen nach der jeweils eigenen Legende gelesen werden.

Wichtige Erkenntnisse

  • Ein Schemadiagramm zeigt Tabellen und deklarierte Schlüsselverknüpfungen.
  • Lies an jedem Linienende mithilfe der Legende Minimum und Maximum ab.
  • Das entfernte Ende beschreibt die Zeilen, die mit einer Ausgangszeile verknüpft sind.
  • Das „Viele“-Ende einer Eins-zu-viele-Verknüpfung trägt den sich wiederholenden Fremdschlüssel.
  • Treffen sich zwei „Viele“-Enden an einer Tabelle, kann das auf eine Zwischentabelle hinweisen.
  • Ein Diagramm zeigt zulässige Verbindungen; die Zeilen zeigen die tatsächlichen Anzahlen.

5.3 Fakten finden, indem du Schlüsseln folgst

Finde jede gefragte Information und folge den Schlüsseln, die sie mit dem Ausgangsdatensatz verbinden. Namen können sich wiederholen oder ändern; gleiche stattdessen Schlüsselwerte ab.

Den Kunden einer Bestellung finden

„Wo wohnt der Kunde, der Bestellung 102 aufgegeben hat?“ folgt diesem Weg:

  1. Finde Bestellung 102 über orders.order_id.
  2. Lies ihre customer_id ab: 2.
  3. Finde Kunde 2 über customers.customer_id.
  4. Lies customers.city ab: Denver.

Die Bestellnummer 102 ist nicht die Kundenkennung. SQL-Joins automatisieren diese Schlüsselabgleiche; Anzeigepositionen verbinden die Datensätze nicht.

Produkte und eine historische Summe finden

Zu Bestellung 101 gehören diese Zeilen in order_items. Folge jeder product_id zu products, um den Namen zu finden:

product_idquantityunit_priceProduktname
11212,50Coffee mug
1218,99Phone charger

Verwende den erfassten Positionspreis für den verlangten Betrag:

  • Zwei Becher zu je 12,50 $ kosten 25,00 $.
  • Ein Ladegerät zu 8,99 $ kostet 8,99 $.
  • Summe: 33,99 $.

Der heutige Produktpreis könnte die Kosten einer alten Bestellung falsch wiedergeben. Bestellung 102 enthält eine Lampe zu 34,00 $; Bestellung 103 enthält vier Becher zu je 12,50 $, zusammen 50,00 $.

Fehlende Werte und Regeln deuten

Das Versanddatum von Bestellung 102 ist NULL, hier dokumentiert als „nicht versandt“. Prüfe es mit IS NULL, nicht mit einem Gleichheitsvergleich mit NULL.

Lies jede relevante Integritätsbedingung, wenn du eine Änderung beurteilst:

  • Eine Position für Bestellung 104 scheitert, wenn diese Bestellung nicht existiert.
  • Eine weitere Position mit dem Schlüssel (101, 11) scheitert, weil das Paar bereits existiert.
  • Die Stückzahl 0 scheitert an der Prüfung auf eine positive Stückzahl.
  • Das Standardverhalten des Fremdschlüssels verhindert das Löschen von Produkt 11, solange Positionen darauf verweisen.

Ein noch nicht verwendeter Schlüssel macht eine Zeile nicht gültig, wenn ihr Verweis ins Leere geht.

Die neuen Zeilen bestimmen

Kauft ein wiederkehrender Kunde zwei verschiedene vorhandene Produkte, kommen eine Zeile in orders und zwei Zeilen in order_items hinzu. Der Kunde und die Produkte existieren bereits. Wird ein neues Produkt angeboten, kommt eine Zeile in products hinzu, ohne dass dafür eine Bestellung nötig ist.

Wichtige Erkenntnisse

  • Finde jede gefragte Information, bevor du dem Schlüsselpfad folgst.
  • Gleiche Fremdschlüsselwerte mit referenzierten Schlüsseln ab, nicht mit Namen oder Zeilenpositionen.
  • Verwende für historische Bestellsummen den Preis aus der Verkaufsposition.
  • Prüfe jede zutreffende Integritätsbedingung, wenn du eine geplante Änderung beurteilst.
  • Ein neues Ereignis fügt Zeilen in die Tabellen ein, deren Fakten es erzeugt.

Relationale Datenbanken: Beispiele

5 Interaktive Lektionen

1

Von gemeinsamen Datensätzen zu Datenbankanfragen

12 Schritte
Sieh, wie ein DBMS zusammengehörige Datensätze nutzbar hält, und verfolge dann eine Anfrage von einer Anwendung bis zur Datenbank.
  1. 1
    EinführungWer kümmert sich um gemeinsame Fakten?

    Vertrieb, Kundenservice und Geschäftsführung eines Ladens nutzen dieselben Kundendatensätze. Eine Datenbank enthält solche gemeinsamen Fakten, und Software namens DBMS verwaltet sie.

    Verfolge, wie ein Datenbanksystem diese Fakten teilt, Änderungen konsistent hält (Aufgabe einer Transaktion) und Anfragen von Anwendungen beantwortet.

  2. 2
    ErklärungSammlung und Software trennen

    Daten sind festgehaltene Fakten. Eine Datenbank ist eine organisierte Sammlung zusammengehöriger Daten; ein DBMS ist die Software, die sie verwaltet.

    Die Kunden und Bestellungen des Ladens sind Daten. PostgreSQL speichert sie, prüft Regeln und beantwortet Anfragen.

  3. 3
    BeispielEine Telefonnummer aktualisieren

    Die Telefonnummer von Maria steht bei 14 Verkäufen in der Tabellenkalkulation. Eine vergessene Änderung hinterlässt widersprüchliche Kopien.

    Speichere ihre Telefonnummer einmal unter customer_id 1 und lass die Verkäufe auf sie verweisen. Eine neue Telefonnummer braucht dann nur eine Aktualisierung; jeder Verkauf behält seine eigenen Fakten.

  4. 4
    AnalogieZwei Änderungen zusammenhalten

    Eine Überweisung zieht einen Betrag vom Girokonto ab und schreibt ihn dem Sparkonto gut. Würde nur die Abbuchung gespeichert, wären die Kontostände falsch.

    Eine Transaktion speichert beide Änderungen gemeinsam oder macht beide rückgängig, auch über mehrere Zeilen oder Tabellen hinweg.

  5. 5
    HerausforderungDen Schutz auswählen

    Eine Reservierung verringert die Zahl der verfügbaren Plätze, aber das Speichern des Zahlungsdatensatzes schlägt fehl. Beide Änderungen gehören zu einer Transaktion. Was sollte übrig bleiben, nachdem diese Transaktion rückgängig gemacht wurde?

    ---reveal---

    Keine der beiden Änderungen. Wird die Verringerung der Plätze rückgängig gemacht, gilt wieder die frühere Verfügbarkeit, und aus der fehlgeschlagenen Transaktion wird kein Zahlungsdatensatz gespeichert. Bliebe nur die Platzänderung, entstünde eine halbe Reservierung.

  6. 6
    VerbindungDie Art der Arbeitslast erkennen

    Eine Bestellung aufzugeben ist transaktionsorientierte Arbeit: wenige schnelle Lese- und Schreibzugriffe. Monatliche Umsätze nach Region zu vergleichen ist analytische Arbeit: Viele historische Datensätze werden zusammengefasst.

    Eine Verkaufsdatenbank kann beiden Tätigkeiten dienen.

  7. 7
    ErklärungDer Anfrage der Anwendung folgen

    Clients senden Anfragen an einen Datenbankserver, etwa bei PostgreSQL oder SQL Server. SQLite läuft als Bibliothek innerhalb der Anwendung, ohne separaten Server.

    Ein Anbieter verwalteter Cloud-Dienste betreibt die Server für seine Nutzer; Tabellen und Anfragen gelten weiterhin.

  8. 8
    BeispielEine deklarative Anfrage lesen

    SELECT first_name, city FROM customers WHERE state = 'TX'; fordert zwei Spalten von den Kunden in TX an.

    SQL ist deklarativ: Es nennt das Ergebnis und überlässt die Schritte zum Abrufen dem DBMS. SQL ist die Sprache; PostgreSQL ist ein Produkt, das sie interpretiert.

  9. 9
    TippDie Aufgabe der Anweisung erkennen

    ALTER TABLE ändert die Struktur; INSERT fügt eine Zeile hinzu; GRANT verwaltet Berechtigungen; COMMIT speichert eine Transaktion.

    Text steht in einfachen Anführungszeichen: 'TX'. Ein Apostroph im Text wird verdoppelt: 'O''Brien'. Ein Semikolon beendet normalerweise eine Anweisung.

  10. 10
    HerausforderungStruktur oder Daten?

    Ein Laden fügt eine Spalte delivery_note hinzu und füllt sie dann für eine Bestellung. Sind beide Änderungen Änderungen an Zeilen?

    ---reveal---

    Fügst du die Spalte hinzu, änderst du die Struktur: Datendefinition. Füllst du sie, änderst du gespeicherte Daten: Datenmanipulation.

  11. 11
    HerausforderungDie Teile zusammenführen

    Eine Website sendet SQL an einen PostgreSQL-Server, um einen Kauf zu erfassen. Eine Führungskraft liest später eine gewöhnliche Sicht auf die Verkäufe. Enthält die Sicht eine weitere gespeicherte Kopie all dieser Kaufzeilen?

    ---reveal---

    Nein. Eine gewöhnliche Sicht speichert eine Abfrage, die die zugrunde liegenden Daten liest; eigene Ergebniszeilen speichert sie nicht. PostgreSQL bleibt das DBMS, das die Kaufdatensätze verwaltet, während die Website und das Berichtswerkzeug Clients sind.

  12. 12
    ZusammenfassungEine gemeinsame Sammlung mit klaren Zuständigkeiten

    Eine Datenbank enthält Fakten; ein DBMS verwaltet Speicherung, Regeln, Zugriff und Wiederherstellung. Transaktionen halten Änderungen zusammen.

    SQL-Anfragen betreffen Struktur, Zeilen, Berechtigungen oder Transaktionssteuerung. Bestimme die Aufgabe, bevor du die Details liest.

2

Die Bedeutung hinter einer Tabelle lesen

10 Schritte
Eine Information finden, die Form der Tabelle abzählen und relationale Regeln vom Anzeigelayout unterscheiden.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungDamit beginnen, wofür eine Zeile steht
  2. 2
    BeispielDie Stadt eines Kunden finden
  3. 3
    ErklärungDie formalen Bezeichnungen verwenden
  4. 4
    HerausforderungZwei Arten von Ergänzungen vorhersagen
  5. 5
    KernaussageDatensätze ohne Positionen identifizieren
  6. 6
    AnalogieEinen Wert pro Eigenschaft speichern
  7. 7
    ErklärungEinen Typ seiner Domäne zuordnen
  8. 8
    HerausforderungEinen Export aus einer Tabellenkalkulation deuten
  9. 9
    HerausforderungEinen neuen Datensatz und seine Werte prüfen
  10. 10
    ZusammenfassungErst die Struktur, dann die Werte lesen
3

Datentypen wählen und mit NULL logisch umgehen

15 Schritte
Typentscheidungen auf Geschäftsdaten anwenden und vorhersagen, wie sich fehlende Werte auf Vergleiche und Berechnungen auswirken.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungZwei Entscheidungen für jede Spalte
  2. 2
    ErklärungZahlenfamilien unterscheiden
  3. 3
    TippUnterschiede zwischen Produkten beachten
  4. 4
    HerausforderungEinen Dezimalbereich prüfen
  5. 5
    VerbindungDatumswerte und Flags erkennen
  6. 6
    ErklärungNach dem Zweck des Werts wählen
  7. 7
    BeispielGeldbeträge exakt speichern
  8. 8
    HerausforderungEinen Code und eine Stückzahl korrigieren
  9. 9
    ErklärungLesen, was fehlt
  10. 10
    BeispielEinem unbekannten Vergleich folgen
  11. 11
    KernaussageDen Test für fehlende Werte verwenden
  12. 12
    HerausforderungBekanntes und Unbekanntes verknüpfen
  13. 13
    BeispielZählen, was vorhanden ist
  14. 14
    HerausforderungDie Deutung eines Berichts prüfen
  15. 15
    ZusammenfassungDie Bedeutung bestimmt die Speicherung
4

Verlässliche Verknüpfungen über Schlüssel aufbauen

18 Schritte
Kennungen prüfen, Fremdschlüsseln folgen und Eins-zu-viele-, Eins-zu-eins- und Viele-zu-viele-Beziehungen lesen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungErst die Identität, dann die Verknüpfung
  2. 2
    ErklärungEindeutigkeit und Minimalität prüfen
  3. 3
    HerausforderungEine künftige Einschreibung prüfen
  4. 4
    TippEinen Primärschlüssel deklarieren
  5. 5
    ErklärungEin stabiles Etikett wählen
  6. 6
    KernaussageEine eigene Geschäftsregel festlegen
  7. 7
    HerausforderungEine Lücke ohne Neunummerierung lesen
  8. 8
    BeispielDem Verweis einer Bestellung folgen
  9. 9
    ErklärungVerpflichtende und optionale Verweise
  10. 10
    HerausforderungEine Löschregel lesen
  11. 11
    VerbindungDen ganzen Verweis prüfen
  12. 12
    ErklärungEins zu viele in beide Richtungen lesen
  13. 13
    BeispielEine Verknüpfung auf eins begrenzen
  14. 14
    BeispielJede Produktpaarung darstellen
  15. 15
    KernaussageEine Information über das Paar speichern
  16. 16
    HerausforderungEine Verknüpfung für eine neue Situation wählen
  17. 17
    HerausforderungIdentität und Verweise kombinieren
  18. 18
    ZusammenfassungSchlüssel erfüllen gemeinsam verschiedene Aufgaben
5

Ein Schema lesen, um eine Frage zu beantworten

14 Schritte
Definitionen und Linienenden in Diagrammen lesen, dann Datensätzen folgen und beurteilen, ob geplante Änderungen gültig sind.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungDie Karte von den Datensätzen trennen
  2. 2
    BeispielEine Bestelldefinition lesen
  3. 3
    KernaussageEine Prüfung mit einem Pflichtwert kombinieren
  4. 4
    HerausforderungZwei Änderungen einordnen
  5. 5
    TippDie vollständigen Regeln finden
  6. 6
    ErklärungDie Legende eines Diagramms lesen
  7. 7
    BeispielMit einer Zeile beginnen und hinüberschauen
  8. 8
    HerausforderungEine optionale Verknüpfung vorhersagen
  9. 9
    VerbindungEine Tabelle aus Paaren erkennen
  10. 10
    BeispielBestellung 102 bis zu ihrer Stadt folgen
  11. 11
    BeispielAus den Verkaufspositionen rechnen
  12. 12
    HerausforderungEine geplante Position beurteilen
  13. 13
    HerausforderungDaten, Regeln und Bedeutung verbinden
  14. 14
    ZusammenfassungJede Quelle für ihre eigene Information nutzen

Relationale Datenbanken: Übungsaufgaben

50 Übungsfragen in 5 Sets

Set 1: Datensätze, Typen und einfache Verknüpfungen lesen10 Übungsfragen

Frage 1 von 10

Wie viele Ziffern können in PostgreSQL bei einem Wert vom Typ DECIMAL(7, 2) vor dem Komma stehen?
  1. 2
  2. 7
  3. 5
  4. 9
Antwort zeigenAntwort ausblenden
Antwort: C
Die Genauigkeit zählt alle Ziffern; die Dezimalstellenanzahl reserviert zwei nach dem Komma. Daher bleiben bei 7 − 2 5 Ziffern davor. Wer 7 wählt, verwechselt die Gesamtgenauigkeit mit der Grenze für den ganzzahligen Teil.

Frage 2 von 10

Eine Buchung speichert eine Sitzplatzzuweisung und einen passenden Zahlungsdatensatz. Welche Datenbankfunktion stellt sicher, dass entweder beide Änderungen gespeichert oder beide rückgängig gemacht werden?
  1. Eine UNIQUE-Bedingung
  2. Eine Tabellendefinition
  3. Eine Transaktion
  4. Eine gespeicherte Sicht
Antwort zeigenAntwort ausblenden
Antwort: C
Eine Transaktion speichert beide Änderungen gemeinsam oder macht beide rückgängig und hält so Sitzplatz und Zahlung konsistent. Eine UNIQUE-Bedingung verhindert doppelte Werte; sie kann die Änderungen nicht zusammenfassen.

Frage 3 von 10

Eine Tabelle hat 6 benannte Spalten und 18 Zeilen. Wie groß sind Grad und Kardinalität, nachdem zwei weitere Zeilen hinzugekommen sind?
  1. Grad 20, Kardinalität 6
  2. Grad 6, Kardinalität 18
  3. Grad 8, Kardinalität 20
  4. Grad 6, Kardinalität 20
Antwort zeigenAntwort ausblenden
Antwort: D
Es kamen keine Spalten hinzu, daher bleibt der Grad bei 6; 18 + 2 ergibt die Kardinalität 20. Wer die beiden Werte vertauscht, verwechselt die Anzahl der Eigenschaften mit der Anzahl der Datensätze.

Frage 4 von 10

Eine Gerätetabelle speichert für Gerät 46 den Telefoneintrag „212-555-0108, 212-555-0116“. Die Mitarbeiter müssen jede Nummer einzeln prüfen. Wie sollten die Telefondaten organisiert werden?
  1. Eine Textzelle behalten und ihre Länge vergrößern.
  2. Verknüpfte Telefonzeilen verwenden, eine pro Nummer.
  3. Eine zweite Gerätezeile mit demselben Schlüssel anlegen.
  4. Einen größeren numerischen Typ für beide Nummern nutzen.
Antwort zeigenAntwort ausblenden
Antwort: B
Verknüpfte Telefonzeilen geben jeder Nummer einen eigenen Wert, der mit Gerät 46 verknüpft ist. Eine längere Zelle enthält immer noch eine Liste, die zerlegt werden muss; eine kopierte Gerätezeile verwechselt ein Gerät mit seinen mehreren Nummern.

Frage 5 von 10

Die Unternehmensregeln verlangen, dass badge_number vorhanden und eindeutig ist. Abteilungen wiederholen sich. Warum ist (badge_number, department) ein Superschlüssel, aber kein Schlüsselkandidat?
  1. Ein Abteilungswert kann in mehreren Zeilen vorkommen.
  2. Ein Primärschlüssel muss immer zwei Spalten enthalten.
  3. Die Ausweisnummern könnten später nicht mehr eindeutig sein.
  4. Ohne die Abteilung bleibt ein eindeutiger Schlüssel übrig.
Antwort zeigenAntwort ausblenden
Antwort: D
Entfernt man die Abteilung, bleibt die eindeutige badge_number übrig; das Paar ist also nicht minimal. Wiederholte Abteilungen heben die Eindeutigkeit des Paars nicht auf; die unnötige Spalte verhindert, dass es ein Kandidat ist.

Frage 6 von 10

Ein Lagercode kann „0047“ oder „47-A“ lauten. Er wird mit Etiketten abgeglichen und nie für Rechnungen verwendet. Welcher Typ bewahrt diese Werte am besten?
  1. Ein Texttyp variabler Länge
  2. Ein Ganzzahltyp für ganze Zahlen
  3. Ein exakter numerischer Dezimaltyp
  4. Ein näherungsweiser Gleitkommatyp
Antwort zeigenAntwort ausblenden
Antwort: A
Text bewahrt sowohl 0047 als auch 47-A als Etiketten. Eine Ganzzahl verliert die führenden Nullen und kann Buchstaben und Bindestrich nicht darstellen. Wähle einen Typ nach dem Zweck des Werts.

Frage 7 von 10

Vier Zeilen haben die Regionswerte 'NE', 'SW', NULL und 'NW'. Wie viele Zeilen erfüllen WHERE region <> 'NE'?
  1. 3
  2. 2
  3. 4
  4. 1
Antwort zeigenAntwort ausblenden
Antwort: B
Nur SW und NW kommen durch: 2 Zeilen. NE ergibt FALSE, NULL ergibt UNKNOWN. Wer drei zählt, nimmt UNKNOWN fälschlich mit, aber WHERE behält nur TRUE.

Frage 8 von 10

Tickets hat einen durchgesetzten Fremdschlüssel event_id auf Events, der nicht NULL sein darf. Die Veranstaltungen 12 und 19 existieren. Zwei Tickets verweisen bereits auf Veranstaltung 12. Was passiert mit einem dritten Ticket, das auf Veranstaltung 12 verweist?
  1. Es ist erlaubt, weil die Elternzeile existiert.
  2. Es wird abgewiesen, weil sich event_id wiederholt.
  3. Es legt eine weitere Zeile für Veranstaltung 12 an.
  4. Es ändert ein vorhandenes Ticket für Veranstaltung 12.
Antwort zeigenAntwort ausblenden
Antwort: A
Veranstaltung 12 existiert, also ist der Verweis des Tickets gültig. Ein Fremdschlüsselwert darf sich wiederholen, sofern keine eigene Eindeutigkeitsregel das verbietet; die Eindeutigkeit des Elternschlüssels tut das nicht.

Frage 9 von 10

Eine Entwicklerin beschreibt die Zeilen, die ein Bericht braucht, und lässt PostgreSQL entscheiden, wie sie gefunden werden. Welche Eigenschaft von SQL zeigt das?
  1. Es ist deklarativ.
  2. Es ist eine Engine.
  3. Es ist ein Dateiformat.
  4. Es ist eine Datenbank.
Antwort zeigenAntwort ausblenden
Antwort: A
Deklaratives SQL nennt das Ergebnis; das DBMS wählt die Schritte zum Abrufen. Eine eingebettete Engine beschreibt, wo Software läuft, nicht, wie eine Sprache eine Anfrage ausdrückt.

Frage 10 von 10

Lies quantity INTEGER CHECK (quantity > 0) und status TEXT DEFAULT 'new'. Keine der beiden Spalten hat NOT NULL. Eine neue Zeile liefert für quantity NULL und lässt status weg. Was wird gespeichert?
  1. Die Prüfung der Stückzahl weist die Zeile zurück.
  2. Quantity wird 0; status wird 'new'.
  3. Quantity bleibt NULL; status bleibt NULL.
  4. Quantity bleibt NULL; status wird 'new'.
Antwort zeigenAntwort ausblenden
Antwort: D
Die Prüfung der Stückzahl ergibt für NULL UNKNOWN und ist daher bestanden; der weggelassene Status erhält new. Eine Prüfung auf positive Werte weist FALSE zurück, nicht UNKNOWN: Sie verlangt weder einen Wert, noch macht sie aus NULL eine Null.
Set 2: Regeln in einer kleinen Datenbank anwenden10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine App nutzt eine gewöhnliche Sicht namens open_jobs und einen Index auf jobs.job_id. Welche Rolle haben die beiden jeweils?
  1. Die Sicht hält kopierte Zeilen; der Index ändert das Schema.
  2. Die Sicht speichert eine Abfrage; der Index hilft, Zeilen zu finden.
  3. Die Sicht gewährt Zugriff; der Index liefert fehlende Werte.
  4. Die Sicht speichert die Tabelle; der Index speichert eine Abfrage.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein Unternehmen liest die Rechnungszeilen mehrerer Jahre, um den Jahresumsatz nach Region zu vergleichen. Welche Art von Arbeitslast ist das?
  1. Transaktionsorientierte Arbeitslast
  2. Eingebettete Arbeitslast
  3. Analytische Arbeitslast
  4. Arbeitslast der Datendefinition
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Ein Bericht zeigt Artikel 8 vor Artikel 3. Ein späterer Lauf zeigt Artikel 3 zuerst, bei unveränderten Werten. Was erklärt die Änderung?
  1. Die Ausgabereihenfolge ist ohne Anforderung nicht festgelegt.
  2. Der erste Artikel ist zum Primärschlüssel geworden.
  3. Spaltenpositionen identifizieren jetzt andere Artikel.
  4. Die Tabelle muss eine Eindeutigkeitsregel verloren haben.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Jeder Leser einer Bibliothek kann viele Bücher ausleihen, und jedes Buch kann im Lauf der Zeit von vielen Lesern ausgeliehen werden. Welche Struktur stellt einen Ausleihvorgang dar?
  1. Eine Zeile mit Verweisen auf Leser und Buch sowie dem Ausleihdatum
  2. Eine Leserzeile mit einer kommagetrennten Liste aller geliehenen Bücher
  3. Eine Buchzeile mit einer kommagetrennten Liste aller bisherigen Leser
  4. Eine Leserzeile mit festen Verweisspalten book_1, book_2 und book_3
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine Tabelle enthält derzeit die generierten IDs 2, 5 und 8. Wie viele Zeilen enthält sie?
  1. 8 Zeilen
  2. 3 Zeilen
  3. 5 Zeilen
  4. 6 Zeilen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Ein Diagramm hat neben Departments die Symbole für genau eins und neben Employees die Symbole für null oder mehr. Lies von einer Abteilung aus: Wie viele Mitarbeiter können verknüpft sein?
  1. Genau ein Mitarbeiter
  2. Ein oder mehrere Mitarbeiter
  3. Kein oder ein Mitarbeiter
  4. Keine oder mehrere Mitarbeiter
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Fünf Prüfmesswerte lauten 6, NULL, 12, NULL und 9. Welche Werte haben COUNT(*) und AVG(reading)?
  1. 5 und 5,4
  2. 3 und 9
  3. 5 und 9
  4. 3 und 5,4
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine gewöhnliche SQLite-Tabelle deklariert label als VARCHAR(4). Eine Zeile liefert den Text „Winter“. Was macht SQLite?
  1. Es speichert nur die ersten vier Buchstaben.
  2. Es füllt das Wort mit zwei Leerzeichen auf.
  3. Es weist die Zeile wegen Überlänge zurück.
  4. Es speichert das ganze Wort mit sechs Buchstaben.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Orders enthält die Bestellung 620 mit account_id 14. Accounts enthält das Konto 14 in Phoenix und das Konto 620 in Tulsa. Die account_id der Bestellung verweist auf Accounts.account_id. Wo befindet sich das Konto von Bestellung 620?
  1. Tulsa, durch Abgleich der beiden Kennungen 620
  2. Phoenix, indem man account_id 14 folgt
  3. In einer der beiden Städte, da beide IDs existieren
  4. In keiner Stadt, weil die Schlüsselnamen abweichen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Ein Workshop erlaubt eine Anmeldung pro Mitglied, Sitzung und Datum. Mitglieder können an einem Datum verschiedene Sitzungen besuchen und eine Sitzung an einem späteren Datum wiederholen. Eine Sitzung kann viele Mitglieder haben. Welche Kombination identifiziert eine Anmeldung?
  1. member_id und session_id
  2. member_id und Datum
  3. member_id, session_id und Datum
  4. session_id und Datum
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 3: Typen wählen und verknüpften Datensätzen folgen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Am Elternende eines Diagramms zeigen ein Kreis und ein Strich null oder eins. Das Kindende zeigt null oder mehr. Welcher Verweis in der Kindtabelle passt zu diesen Symbolen?
  1. Ein verpflichtender Fremdschlüssel ohne Eindeutigkeitsregel
  2. Ein verpflichtender Fremdschlüssel, der zugleich eindeutig ist
  3. Ein NULL-fähiger Fremdschlüssel, der zugleich eindeutig ist
  4. Ein NULL-fähiger Fremdschlüssel ohne Eindeutigkeitsregel
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine SQLite-App muss exakte Beträge in Dollar und Cent von 7,35 und 2,80 speichern. Welche Speicherform hält die Beträge exakt?
  1. REAL-Werte 7,35 und 2,80
  2. DECIMAL-Werte 7,35 und 2,80
  3. INTEGER-Cent 735 und 280
  4. TEXT-Beträge direkt zum Rechnen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Rechnung 75 hat zwei Positionen: Artikel 6, Stückzahl 3, verlangter Stückpreis 4,20; Artikel 8, Stückzahl 2, verlangter Stückpreis 6,50. Die aktuellen Katalogpreise betragen 4,80 und 6,00. Welchen Gesamtbetrag hat die Rechnung tatsächlich verlangt?
  1. 25,60
  2. 26,40
  3. 27,40
  4. 24,60
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

In PostgreSQL hat eine Lieferung NULL in delay_days und den Status 'urgent'. Welches Ergebnis hat (delay_days > 2) OR (status = 'urgent'), und behält WHERE die Zeile?
  1. UNKNOWN; die Zeile fällt weg
  2. TRUE; die Zeile bleibt erhalten
  3. FALSE; die Zeile fällt weg
  4. UNKNOWN; die Zeile bleibt erhalten
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine Tabelle erhält tracking_note als neue Spalte für jede Lieferung. Welche Eigenschaft ändert sich direkt?
  1. Ihr Grad
  2. Ihre Zeilenanzahl
  3. Ihr Index
  4. Ihr Primärschlüssel
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Eine Mitgliedertabelle verwendet die generierte member_id als Primärschlüssel. Die E-Mail-Adresse muss vorhanden sein und darf höchstens ein Konto identifizieren. Welche zusätzliche Deklaration setzt in PostgreSQL beide E-Mail-Regeln durch?
  1. email TEXT PRIMARY KEY
  2. email TEXT NOT NULL
  3. email TEXT UNIQUE
  4. email TEXT NOT NULL UNIQUE
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein Dienst wiederholt die aktuelle Telefonnummer jedes Lieferanten in jeder Lieferungszeile. Bei Aktualisierungen übersehen die Mitarbeiter einige Kopien. Welche Änderung behebt die Inkonsistenz?
  1. Jeder Lieferung eine größere Kennung geben.
  2. Lieferungen nach der Telefonnummer des Lieferanten sortieren.
  3. Telefonnummern als Zahlen statt als Text speichern.
  4. Lieferantenangaben einmal speichern und darauf verweisen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Profiles.user_id ist zugleich Primärschlüssel dieser Tabelle und Fremdschlüssel auf Users.user_id. Keine Regel verlangt, dass ein Nutzer ein Profil hat. Was erlaubt das?
  1. Viele Profile pro Nutzer; ein Nutzer pro Profil
  2. Ein oder mehrere Profile pro Nutzer; ein Nutzer pro Profil
  3. Kein oder ein Profil pro Nutzer; ein Nutzer pro Profil
  4. Ein Profil pro Nutzer; viele Nutzer pro Profil
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine neue Rechnungszeile wird hinzugefügt, ohne Spalten oder Integritätsbedingungen zu ändern. Was hat sich geändert?
  1. Das Schema, aber nicht die Ausprägung
  2. Die Ausprägung, aber nicht das Schema
  3. Sowohl das Schema als auch die Ausprägung
  4. Weder das Schema noch die Ausprägung
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

StockRows hat den Primärschlüssel (warehouse_id, item_id) mit den Zeilen (4, 7) und (5, 9). Reservations hat einen verpflichtenden, durchgesetzten zusammengesetzten Fremdschlüssel auf StockRows. Ist eine Reservierung für (4, 9) erlaubt?
  1. Nein; das vollständige referenzierte Paar fehlt.
  2. Ja; Lager 4 und Artikel 9 kommen beide vor.
  3. Ja; jeder Schlüsselbestandteil ist für sich eindeutig.
  4. Nein; alle vorhandenen Paare bräuchten Lager 4.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 4: Integritätsbedingungen lesen und Folgen erklären10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine Verkaufstabelle enthält Verkaufszeilen und zusätzlich eine unterste Zeile mit der Beschriftung „SUMME“, die deren summierten Betrag enthält. Warum ist diese Zeile ein Problem, wenn die Betragsspalte erneut summiert wird?
  1. Sie macht den Betrag jedes Verkaufs zu einem Textwert.
  2. Sie zwingt alle Verkaufszeilen zum selben Schlüssel.
  3. Sie ändert die Zahl der Spalten in jedem Verkauf.
  4. Sie fügt eine Zusammenfassung wie einen Verkauf hinzu.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Zwei Preise lauten 30 USD und 30 EUR. Warum lassen sie sich nicht direkt zu einer aussagekräftigen Geldsumme addieren?
  1. Sie brauchen verschiedene Primärschlüssel.
  2. Ihre Textlängen sind gleich.
  3. Ihre Währungseinheiten unterscheiden sich.
  4. Ihre Werte haben keine Nachkommastellen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine Kursliste erlaubt jedem Teilnehmer, viele Kurse zu besuchen, auch denselben Kurs in verschiedenen Semestern. Jeder Kurs hat viele Teilnehmer. Welche Verknüpfungszeile und welcher Schlüssel passen zu diesen Regeln?
  1. Verweise auf Teilnehmer und Kurs; Schlüssel learner_id
  2. Verweise auf Teilnehmer und Kurs; Schlüssel (learner_id, course_id)
  3. Teilnehmer, Kurs und Semester; Schlüssel (learner_id, course_id, term)
  4. Teilnehmer, Kurs und Semester; Schlüssel (course_id, term)
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Eine Tabelle hat 9 Spalten und 24 Zeilen. Drei Zeilen werden gelöscht, dann kommen zwei Spalten hinzu. Wie groß sind Grad und Kardinalität?
  1. Grad 11, Kardinalität 21
  2. Grad 6, Kardinalität 26
  3. Grad 9, Kardinalität 23
  4. Grad 21, Kardinalität 11
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ein Diagramm zeigt Orders und Products, die jeweils eins zu viele mit Lines verknüpft sind. Lines hat den Primärschlüssel (order_id, product_id), und beide Teile sind Fremdschlüssel. Was zeigt das zwischen Bestellungen und Produkten?
  1. Eins zu eins, weil jedes Paar eindeutig ist
  2. Viele zu viele, über die Tabelle Lines
  3. Eins zu viele, mit Products als Elterntabelle
  4. Viele zu eins, mit Orders als Kindtabelle
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Passes erlaubt einen aktiven Ausweis pro Person und pro Schließfach. Sowohl person_id als auch locker_id sind Pflichtangaben und jeweils für sich eindeutig. Der Primärschlüssel ist person_id. Wie ist locker_id einzuordnen?
  1. Nur als Fremdschlüssel
  2. Als nicht minimaler Superschlüssel
  3. Als zweiter Primärschlüssel
  4. Als alternativer Schlüsselkandidat
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein Schema deklariert price als DECIMAL(8, 2). Welche zusätzliche Information braucht man, um einen gespeicherten Preis von 45,00 als realen Betrag zu deuten?
  1. Die physische Adresse der Festplattenseite
  2. Die Anzahl der Indizes auf der Tabelle
  3. Die angezeigte Position der Zeile
  4. Die Währung, die die Spalte verwendet
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine Website und ein Berichtswerkzeug verbinden sich beide mit einem PostgreSQL-Server, der die Datenbanken shop und payroll verwaltet. Welche Beschreibung trennt diese Komponenten richtig?
  1. PostgreSQL ist ein Client; shop und payroll sind SQL-Dialekte.
  2. Die Website ist SQL; PostgreSQL und payroll sind Datenbanken.
  3. PostgreSQL ist das DBMS; shop und payroll sind Datenbanken.
  4. Das Berichtswerkzeug ist das DBMS; PostgreSQL sind seine Daten.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Zwei gewöhnliche SQLite-Tabellen deklarieren amount als DECIMAL(6, 2) und label als VARCHAR(3). Die Zeilen liefern den Betrag 1.234.567,89 und das Label „Sommer“. Was setzen diese Deklarationen allein durch?
  1. Sowohl die Genauigkeit des Betrags als auch die Länge des Labels
  2. Weder die Genauigkeit des Betrags noch die Länge des Labels
  3. Die Genauigkeit des Betrags, aber nicht die Länge des Labels
  4. Die Länge des Labels, aber nicht die Genauigkeit des Betrags
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Auf eine Kunden-ID verweisen viele alte Rechnungen. Kunden ändern oft ihre E-Mail-Adresse, und das Unternehmen verlangt, dass E-Mail-Adressen eindeutig und vorhanden bleiben. Welche Anordnung unterstützt diese Regeln am besten?
  1. Stabile Surrogat-ID; E-Mail als NOT NULL UNIQUE deklariert
  2. E-Mail als Primärschlüssel; generierte ID ohne Eindeutigkeitsregel
  3. Telefonnummer als Primärschlüssel; E-Mail ohne Integritätsbedingungen
  4. E-Mail als Primärschlüssel; neue Kundenzeile nach jeder Änderung
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 5: Fehlende Daten und zusammenhängende Integritätsbedingungen klären10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein DBMS baut einen Index neu auf und ordnet gespeicherte Seiten um. Anwendungen verwenden weiterhin dieselben Tabellen- und Spaltennamen, um unveränderte Daten anzufordern. Welches Prinzip zeigt das?
  1. Datenunabhängigkeit
  2. Join-Kardinalität
  3. Atomare Transaktionen
  4. Zusammengesetzte Zeilenschlüssel
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Scans verwendet den Primärschlüssel (batch_id, page_no). Das Paar (18, 4) existiert. Stapel- und Seitennummern dürfen sich einzeln wiederholen. Welche geplante Zeile wird gerade deshalb abgewiesen, weil sie diesen Schlüssel wiederholt?
  1. Stapel 18, Seite 5, neues Bild
  2. Stapel 19, Seite 4, neues Bild
  3. Stapel 18, Seite 4, anderes Bild
  4. Stapel 19, Seite 5, anderes Bild
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Ein Kreditdienst muss verhindern, dass eine Zahlung auf einen nicht existierenden Kredit verweist, auch wenn mehrere Apps Daten schreiben. Wo sollte diese gemeinsame Regel durchgesetzt werden?
  1. In den Spaltenüberschriften jedes Berichts
  2. In einer durchgesetzten Verweisbedingung der Datenbank
  3. Im Text der Anzeigebeschriftung des Kredits
  4. In der Reihenfolge, in der Zahlungen erscheinen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Was bedeutet ein Kreis, auf den ein Strich folgt, am Ende einer Linie in einem Krähenfußdiagramm?
  1. Null oder eine Zeile
  2. Genau eine Zeile
  3. Null oder mehr Zeilen
  4. Eine oder mehr Zeilen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Verkauf 810 gehört zum vorhandenen Kunden 26. Ein neuer Kauf desselben Kunden umfasst drei verschiedene vorhandene Produkte, eine Position pro Produkt. Wie viele neue Zeilen gehören in Clients, Sales und SaleLines?
  1. 1 Kunde, 1 Verkauf, 3 Positionen
  2. 0 Kunden, 3 Verkäufe, 3 Positionen
  3. 0 Kunden, 1 Verkauf, 1 Position
  4. 0 Kunden, 1 Verkauf, 3 Positionen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Anfangs ist Orders.customer_id ein Fremdschlüssel auf Customers, der nicht NULL sein darf und keine Eindeutigkeitsregel hat. Kunden dürfen keine Bestellungen haben. Wird Orders.customer_id um UNIQUE ergänzt, bleiben die übrigen Regeln unverändert. Wie ändert sich die Beziehung?
  1. Kunden: statt vieler Bestellungen genau eine; jede Bestellung behält einen Kunden.
  2. Kunden: statt null oder vieler Bestellungen null oder eine; jede Bestellung behält einen Kunden.
  3. Kunden: weiterhin null oder viele Bestellungen; jede Bestellung hat nun null oder einen Kunden.
  4. Kunden: statt null oder vieler Bestellungen null oder eine; jede Bestellung hat nun null oder einen Kunden.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Bei einer SQLite-Verbindung ist die Fremdschlüsselprüfung ausgeschaltet. Ein deklarierter Verweis ist vorhanden, aber eine verwaiste Zeile wird akzeptiert. Was muss sich ändern, damit sich künftige Schreibvorgänge auf diese Integritätsbedingung verlassen können?
  1. Die Eltern-ID zu einer Textspalte machen.
  2. Kindzeilen nach ihrem Fremdschlüssel sortieren.
  3. Fremdschlüssel nur in der Berichtsabfrage aktivieren.
  4. Fremdschlüssel vor dem Schreiben für die Verbindung aktivieren.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Sechs Konten haben die Stadtwerte 'Miami', NULL, 'Dallas', 'Miami', NULL und 'Boise'. Wie viele erfüllen WHERE NOT (city = 'Miami') OR city IS NULL?
  1. 2
  2. 3
  3. 6
  4. 4
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine SQLite-Tabelle definiert a INTEGER NOT NULL, b INTEGER NOT NULL, PRIMARY KEY (a, b) und q INTEGER NOT NULL CHECK (q > 0). Es gibt noch keine Zeilen. Welche geplante Zeile erfüllt alle diese Integritätsbedingungen?
  1. a = 2, b = NULL, q = 3
  2. a = 2, b = 5, q = 0
  3. a = 2, b = 5, q = 3
  4. a = 2, b = 5, q = NULL
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Projekt 31 hat die Aufgaben 7 und 9 über einen NULL-fähigen Fremdschlüssel project_id mit ON DELETE SET NULL. Notiz 4 verweist über einen durchgesetzten Fremdschlüssel mit ON DELETE CASCADE auf Aufgabe 7. Nach dem Löschen von Projekt 31 wird Aufgabe 7 gelöscht. Was bleibt von Aufgabe 9 und Notiz 4?
  1. Aufgabe 9 bleibt mit project_id NULL; Notiz 4 ist gelöscht.
  2. Aufgabe 9 bleibt mit project_id 31; Notiz 4 ist gelöscht.
  3. Aufgabe 9 ist gelöscht; Notiz 4 bleibt mit Aufgabe 7 verknüpft.
  4. Aufgabe 9 bleibt mit project_id NULL; Notiz 4 bleibt bestehen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

76 Schlüsselbegriffe, jeweils mit Definition

A

Alternativschlüssel
Ein Alternativschlüssel ist ein Schlüsselkandidat, der nicht als Primärschlüssel gewählt wurde; meist wird er durchgesetzt, indem man Pflichtwerte mit Eindeutigkeit kombiniert.
Die verpflichtende, eindeutige E-Mail-Adresse eines Kontos kann neben einer generierten account_id ein Alternativschlüssel bleiben.
analytische Verarbeitung (OLAP)
Bei analytischer Verarbeitung werden viele gespeicherte Datensätze zusammengefasst, um Summen oder Muster zu vergleichen.
Ein Monatsbericht vergleicht die Umsätze verschiedener Regionen, indem er die gespeicherten Datensätze vieler Käufe liest.
atomarer Wert
Ein atomarer Wert ist ein einzelner Wert im Sinne des Zwecks der Spalte, keine Liste getrennter Werte, die einzeln verarbeitet werden müssen.
Ein Telefonfeld mit zwei durch Komma getrennten Nummern enthält eine Liste, wo ein einzelner Telefonwert erwartet wird.

B

Bestellposition
Eine Bestellposition ist ein Datensatz für ein Produkt innerhalb einer Bestellung und enthält Fakten zur Paarung wie Stückzahl und verlangten Stückpreis.
Zwei Becher in einer Bestellung lassen sich durch eine Position mit der Stückzahl 2 und dem erfassten Preis pro Becher darstellen.
boolescher Datentyp
Ein boolescher Datentyp stellt Wahr-falsch-Angaben dar; für fehlende Information steht NULL zur Verfügung, sofern keine Integritätsbedingung das verbietet.
Ein Flag in_stock hält fest, ob ein Artikel verfügbar ist; die genaue Speicherform hängt vom DBMS ab.

C

CHECK-Bedingung
Eine CHECK-Bedingung weist eine Zeile zurück, wenn ihre Bedingung FALSE ist; ein Ergebnis UNKNOWN aus NULL führt dagegen nicht von selbst zur Zurückweisung.
Eine verpflichtende positive Stückzahl verwendet NOT NULL zusammen mit CHECK (quantity > 0), um beide Regeln abzudecken.
Client-Server-System
In einem Client-Server-System senden Clients Anfragen an einen Server, der Daten verwaltet und zurückgibt.
Eine Website und ein Berichtswerkzeug können sich beide über ein Netzwerk mit demselben PostgreSQL-Server verbinden.

D

Daten
Daten sind festgehaltene Fakten wie Namen, Datumsangaben oder Beträge.
Ein Lieferdienst erfasst Gewicht, Zielort und Versanddatum eines Pakets als Daten.
Datenbank
Eine Datenbank ist eine organisierte Sammlung zusammengehöriger Daten, die sich durchsuchen, aktualisieren und gemeinsam nutzen lässt.
Eine Shopdatenbank hält Kunden-, Produkt- und Bestelldatensätze für mehrere Anwendungen zusammen.
Datenbankausprägung
Eine Datenbankausprägung ist, im Gegensatz zum Schema, die Gesamtheit der Werte, die zu einem bestimmten Zeitpunkt gespeichert sind.
Eine neue Bestellung ändert die aktuelle Ausprägung, während die Tabellendefinition unverändert bleibt.
Datenbankmanagementsystem (DBMS)
Ein DBMS ist eine Software, die Datenbanken verwaltet, Regeln durchsetzt und den Zugriff regelt.
Wenn PostgreSQL eine Shopdatenbank verwaltet, ist die Software etwas anderes als die darin gespeicherten Kundendatensätze.
Datenbankschema
Ein Datenbankschema beschreibt die Struktur aus Tabellen, Spalten, Datentypen, Schlüsseln und Integritätsbedingungen, die festlegt, welche Datensätze zulässig sind.
Eine neue Spalte für Lieferhinweise ändert das Schema, noch bevor irgendein Hinweis gespeichert ist.
Datendefinitionssprache (DDL)
DDL-Anweisungen legen Datenbankstrukturen wie Tabellen an, ändern oder entfernen sie.
Eine neue Spalte für das Lieferdatum ändert die Struktur und gehört daher zur Datendefinition.
Datenkatalog (Data Dictionary)
Ein Datenkatalog dokumentiert Bedeutungen von Spalten, Einheiten und Geschäftsregeln, die die Typen und Integritätsbedingungen einer Tabelle nicht vollständig ausdrücken.
Die Dokumentation erklärt, ob ein shipped_date mit NULL „nicht versandt“ bedeutet oder ein verloren gegangenes Datum.
Datenmanipulationssprache (DML)
DML-Anweisungen lesen oder ändern gespeicherte Zeilen, einschließlich Einfügungen, Aktualisierungen und Löschungen.
Wird eine neue Bestellung erfasst, kommen Daten hinzu; es entsteht keine weitere Spalte, und die Form der Tabelle bleibt gleich.
Datenunabhängigkeit
Datenunabhängigkeit trennt die logische Tabellenstruktur, mit der Anwendungen arbeiten, von der physischen Anordnung der gespeicherten Daten durch das DBMS.
Das DBMS kann Festplattenseiten umorganisieren, während Anwendungen weiterhin auf dieselben benannten Spalten zugreifen.
Dezimalstellenanzahl (Scale)
Die Dezimalstellenanzahl von DECIMAL(p, s) ist s, die Anzahl der Ziffern nach dem Komma; sie bestimmt die Genauigkeit des Nachkommateils.
Eine Dezimalstellenanzahl von zwei liefert zwei Nachkommastellen, wie sie für Preise in Dollar und Cent nötig sind.
Domäne
Eine Domäne ist die Menge der Werte, die für eine Spalte zulässig sind, beschrieben durch ihren Datentyp und etwaige zusätzliche Einschränkungen.
Eine Domäne für Stückzahlen kann ganze Zahlen größer als null verlangen und so negative Lagerbestände ausschließen.
dreiwertige Logik
Die dreiwertige Logik verknüpft die Ergebnisse TRUE, FALSE und UNKNOWN und berücksichtigt so Bedingungen, an denen fehlende Datenbankwerte beteiligt sind.
TRUE OR UNKNOWN ergibt TRUE, weil die wahre Bedingung die verknüpfte OR-Bedingung bereits erfüllt.

E

eingebettete Datenbank-Engine
Eine eingebettete Datenbank-Engine läuft als Bibliothek innerhalb einer Anwendung, ohne separaten Server.
Eine Desktop-Anwendung kann mit SQLite eine lokale Datenbankdatei mit ihren Datensätzen lesen und schreiben.
Eins-zu-eins-Beziehung
Eine Eins-zu-eins-Beziehung erlaubt auf jeder Seite höchstens eine passende Zeile; meist wird sie über einen Fremdschlüssel durchgesetzt, der zugleich eindeutig ist.
Ein Profil kann user_id zugleich als Primärschlüssel und als Fremdschlüssel verwenden und verhindert so ein zweites Profil für einen Nutzer.
Eins-zu-viele-Beziehung
Eine Eins-zu-viele-Beziehung erlaubt, dass eine Elternzeile mit mehreren Kindzeilen verknüpft ist, die jeweils einen Fremdschlüssel auf ihre Elternzeile tragen.
Der Verweis eines Mitarbeiters auf seine Führungskraft kann sich wiederholen, weil mehrere Mitarbeiter dieselbe Führungskraft haben können.
Eltern- und Kindtabellen
Eine Elterntabelle liefert einen referenzierten Schlüssel; eine Kindtabelle speichert den Fremdschlüssel, der auf diese Elterntabelle zeigt, womöglich viele Male.
Customers ist die Elterntabelle und orders die Kindtabelle, wenn jede Bestellung die Kennung ihres Kunden speichert.
Entity-Relationship-Diagramm
Ein Entity-Relationship-Diagramm stellt beim Entwurf geschäftliche Entitäten und Beziehungen dar, die später in Tabellen übertragen werden können.
Diagramme nach Chen zeichnen Attribute womöglich als Ovale und Beziehungen als Rauten statt als Tabellenkästen.
exakter Dezimaltyp
Ein exakter Dezimaltyp speichert Beträge im Zehnersystem ohne binäre Näherung, und zwar in Systemen, die das unterstützen, etwa PostgreSQL.
Ein in PostgreSQL als DECIMAL(8, 2) deklarierter Preis speichert exakte Beträge in Dollar und Cent innerhalb seines Bereichs.

F

Fremdschlüssel
Ein Fremdschlüssel ist eine Spalte oder Spaltenkombination, deren Verweise, sofern sie nicht NULL sind, zu einem existierenden Primärschlüssel oder geeigneten eindeutigen Schlüssel der Elterntabelle passen müssen.
Mehrere Bestellzeilen können customer_id 1 enthalten; jede verweist auf denselben eindeutigen Kundendatensatz.

G

ganzzahlige Centbeträge
Ganzzahlige Centbeträge stellen einen Betrag als ganze Zahl der kleinsten Centeinheit der Währung dar und ermöglichen so eine exakte Speicherung von Geldbeträgen auf Centbasis.
Ein SQLite-Preis von 12,50 $ kann als 1250 Cent gespeichert und bei der Anzeige in Dollar formatiert werden.
Ganzzahltyp
Ein Ganzzahltyp speichert ganze Zahlen in einem unterstützten Bereich und eignet sich daher für Anzahlen, Stückzahlen und viele generierte Kennungen.
Die Anzahl der Lampen in einer Bestellung ist eine ganzzahlige Zählung, anders als ihr gemessenes Gewicht.
Genauigkeit (Precision)
Die Genauigkeit von DECIMAL(p, s) ist p, die Gesamtzahl der Ziffern, die für den ganzzahligen Teil und den Nachkommateil eines Werts zur Verfügung stehen.
Bei DECIMAL(8, 2) lassen insgesamt acht Ziffern Platz für sechs vor dem Komma und zwei danach.
generierte ID
Eine generierte ID ist ein Schlüsselwert, den die Datenbank automatisch liefert; die Syntax dafür unterscheidet sich zwischen den Datenbankprodukten.
INTEGER PRIMARY KEY in SQLite liefert eine Ganzzahl, wenn eine neue Zeile die Kennung weglässt.
Gleitkommatyp
Ein Gleitkommatyp speichert binäre Näherungswerte; er erlaubt einen großen Zahlenbereich, bringt aber kleine dezimale Rundungsdifferenzen mit sich.
Eine gemessene Temperatur kann einen Gleitkommatyp verwenden, wenn winzige Darstellungsfehler akzeptabel sind.
Grad
Der Grad einer Tabelle ist die Anzahl ihrer Spalten, eine Eigenschaft ihrer Struktur.
Kommt das Geburtsdatum eines Kunden als neue Spalte hinzu, erhöht sich der Grad der Tabelle customers.

I

Index
Ein Index ist eine Nachschlagestruktur, die einem DBMS hilft, passende Zeilen zu finden.
Ein Index auf dem Primärschlüssel hilft dem System, einen Kundendatensatz in einer Tabelle mit Millionen Datensätzen zu finden.
Integritätsbedingung (Constraint)
Eine Integritätsbedingung ist eine deklarierte Regel, die zulässige Daten einschränkt, etwa durch Eindeutigkeit, Pflichtwerte oder gültige Verweise zwischen Tabellen.
Eine Integritätsbedingung für positive Stückzahlen weist eine Bestellposition mit null Stück zurück, obwohl null eine ganze Zahl ist.
IS NULL
IS NULL ist der SQL-Test, der wahr liefert, wenn ein Eintrag fehlt; so lassen sich solche Zeilen ohne Gleichheitsvergleich finden.
Die Bedingung phone IS NULL findet Kunden, deren Telefonnummer nicht erfasst ist.
ISO-Datumsformat
Das ISO-Datumsformat schreibt ein Kalenderdatum als Jahr-Monat-Tag und liefert so eine eindeutige Darstellung wie 2026-03-02.
Einheitlicher ISO-Datumstext wird in SQLite in Kalenderreihenfolge sortiert, anders als US-Anzeigetext mit dem Monat zuerst.

J

Join
Ein Join verbindet zusammengehörige Daten, indem er Werte über Tabellen hinweg abgleicht, und automatisiert so das Folgen von Schlüsseln, das man beim Nachschlagen von Hand verwendet.
Ein Nachschlagen von Kunden gleicht orders.customer_id mit customers.customer_id ab, um zur richtigen Stadt zu gelangen.

K

Kardinalität einer Beziehung
Die Kardinalität einer Beziehung beschreibt, wie viele Zeilen auf jeder Seite einer Verknüpfung mit einer Zeile auf der anderen Seite in Beziehung stehen dürfen.
Ein Kunde kann viele Bestellungen haben, während jede Bestellung des Shops auf genau einen Kunden verweisen muss.
Kardinalität einer Tabelle
Die Kardinalität einer Tabelle ist die Anzahl der Zeilen, die sie aktuell enthält; sie ändert sich, wenn Datensätze hinzukommen oder entfernt werden.
Eine Kundentabelle des Shops, die aktuell vier Datensätze enthält, hat eine Tabellenkardinalität von vier.
Kaskadierung (CASCADE)
Eine Kaskadierung überträgt das Löschen oder die Schlüsseländerung einer Elternzeile gemäß der deklarierten Fremdschlüsselaktion auf die verweisenden Kindzeilen.
Das Löschen einer Bestellung kann kaskadierend ihre Bestellpositionen löschen, weil diese Kindzeilen zu genau dieser Bestellung gehören.
Krähenfußnotation
Die Krähenfußnotation kennzeichnet die Enden von Beziehungen mit Kreisen, Strichen und dreizinkigen Füßen, um minimale und maximale Anzahlen verknüpfter Zeilen zu zeigen.
Ein Kreis und ein Fuß neben den Bestellungen erlauben, dass ein Kunde keine oder mehrere zugehörige Bestellzeilen hat.

N

natürlicher Schlüssel
Ein natürlicher Schlüssel verwendet eine Kennung aus dem realen Gegenstand, der erfasst wird, etwa eine Fahrzeug-Identifizierungsnummer oder das Kürzel eines Bundesstaats.
Eine Tabelle der Bundesstaaten kann ein zweistelliges state_code als gut lesbaren Primärschlüssel in Adressdatensätzen verwenden.
NOT NULL
NOT NULL ist eine Integritätsbedingung, die verlangt, dass ein Spalteneintrag vorhanden ist; sie weist NULL zurück, prüft aber selbst weder auf positive Werte noch auf nicht leeren Text.
Ein Bestelldatum kann verpflichtend sein, während ein Versanddatum bis zum Versand NULL sein darf.
NULL
NULL ist die Markierung für einen fehlenden Datenbankwert, der unbekannt, noch nicht verfügbar oder für diesen Datensatz nicht anwendbar sein kann.
Das Versanddatum einer Bestellung kann NULL sein, weil sie noch nicht versandt wurde, während ihr Bestelldatum erfasst ist.
numerischer Code
Ein numerischer Code ist eine aus Ziffern geschriebene Kennung, die der Beschriftung dient; führende Nullen und andere Formatierungen können daher Bedeutung tragen.
Der ZIP-Code 02108 muss als Text gespeichert werden, damit die führende Null beim Zurücklesen erhalten bleibt.

O

optionale Beziehung
Eine optionale Beziehung erlaubt, dass eine Verknüpfung fehlt; oft wird sie durch einen NULL-fähigen Fremdschlüssel und ein Minimum von null am Ende der Elterntabelle dargestellt.
Eine Bestellung ohne Gutschein kann coupon_id NULL lassen, während andere Bestellungen auf existierende Gutscheine verweisen.

P

Positionsbetrag
Ein Positionsbetrag sind die Kosten der Einheiten in einer Bestellposition, berechnet aus ihrer Stückzahl und dem für diesen Verkauf erfassten Stückpreis.
Zwei Becher zu je 12,50 $ tragen 25,00 $ zur Bestellsumme bei, bevor die übrigen Positionen addiert werden.
Primärschlüssel
Ein Primärschlüssel ist der Schlüsselkandidat, der als Hauptkennung der Zeilen einer Tabelle gewählt wird; seine Werte sind eindeutig und nie NULL, und er kann mehrere Spalten umfassen.
Die Kundentabelle verwendet customer_id als Primärschlüssel, damit Bestellungen auf genau einen Kunden verweisen können.

R

referenzielle Aktion
Eine referenzielle Aktion legt fest, wie ein Fremdschlüssel mit dem Löschen oder der Schlüsseländerung einer referenzierten Elternzeile umgeht, etwa durch Blockieren oder Kaskadieren.
ON DELETE SET NULL behält die Kindzeilen, entfernt aber ihren Verweis auf die Elternzeile; dieser Verweis muss daher NULL zulassen.
referenzielle Integrität
Referenzielle Integrität ist die Regel, dass durchgesetzte Fremdschlüsselverweise, die nicht NULL sind, zu existierenden Elternzeilen passen; so bleiben Verknüpfungen gültig.
Eine durchgesetzte Integritätsbedingung zwischen Bestellung und Kunde weist eine Bestellung für Kunde 99 zurück, wenn dieser Kunde fehlt.
relationale Datenbank
Eine relationale Datenbank verwendet Tabellen: Spalten beschreiben Eigenschaften, Zeilen beschreiben Datensätze.
Ein Shop speichert Bestellungen in einer Tabelle und verweist über Kundenkennungen auf eine eigene Kundentabelle.

S

Schemadiagramm
Ein Schemadiagramm zeigt existierende Tabellen, ihre Spalten und Schlüsselverknüpfungen in Kästen und Linien, oft mit den zulässigen Anzahlen in Beziehungen.
Eine Linie verbindet orders.customer_id mit dem Kundenschlüssel und macht den Verweis von Bestellungen auf Kunden sichtbar.
Schlüsselkandidat
Ein Schlüsselkandidat ist ein minimaler Superschlüssel: Seine Werte identifizieren eine Zeile eindeutig, und das Entfernen eines beliebigen Bestandteils würde diese Garantie aufheben.
Eine verpflichtende, eindeutige E-Mail-Adresse eines Mitarbeiters kann ein Kandidat sein, auch wenn employee_id zum Primärschlüssel wird.
Schlüsselpfad
Ein Schlüsselpfad ist eine Folge deklarierter Verweise, der man von Tabelle zu Tabelle folgt, um einen Ausgangsdatensatz mit den für eine Antwort nötigen Fakten zu verbinden.
Um die Stadt zu einer Bestellung zu finden, folgst du ihrer customer_id zu einer Kundenzeile und liest dort die Stadt ab.
selbstreferenzierende Beziehung
Eine selbstreferenzierende Beziehung verknüpft Rollen innerhalb einer Tabelle, indem ein Fremdschlüssel auf einen Schlüssel derselben Tabelle verweist.
Die manager_id eines Mitarbeiters zeigt auf eine andere Mitarbeiterzeile; bei einer Person ohne Führungskraft ist sie NULL.
Sicht (View)
Eine Sicht ist eine gespeicherte Abfrage, die wie eine Tabelle verwendet wird; eine gewöhnliche Sicht hat keine eigenen gespeicherten Ergebniszeilen.
Eine Verkaufssicht kann ausgewählte Bestellspalten darstellen, während die zugrunde liegenden Datensätze in ihren Tabellen bleiben.
Spalte (Attribut oder Feld)
Eine Spalte (Attribut oder Feld) ist eine benannte Eigenschaft mit einem festgelegten Datentyp, die jede Zeile hat.
Die Spalte city enthält für jeden Kundendatensatz einen Stadtwert oder, sofern erlaubt, NULL.
SQL
SQL ist die standardisierte deklarative Sprache für relationale Datenbanken, mit produktspezifischen Dialekten.
Ein Berichtswerkzeug sendet eine SQL-Anfrage an PostgreSQL, um die benötigten Kundendatensätze abzurufen.
SQL-Dialekt
Ein SQL-Dialekt umfasst die SQL-Syntax, die Typen und die zusätzlichen Funktionen, die ein Produkt unterstützt.
SQLite verwendet LIMIT 10, um ein Ergebnis zu begrenzen, während SQL Server meist TOP 10 verwendet.
Standardwert
Ein Standardwert wird eingesetzt, wenn eine neue Zeile den Wert einer Spalte weglässt; die übrigen Integritätsbedingungen gelten weiterhin für den gespeicherten Wert.
Eine Statusspalte mit DEFAULT 'pending' erfasst pending, wenn die neue Zeile keinen Status angibt.
strukturierte Daten
Strukturierte Daten haben festgelegte, benannte Felder gemeinsam, auch wenn einige Werte fehlen.
Jede Bestellzeile hat dieselben Spalten, darunter ein Versanddatum, das vor dem Versand NULL sein kann.
Superschlüssel
Ein Superschlüssel ist eine Spalte oder Spaltenkombination, deren kombinierte Werte jede Zeile eindeutig identifizieren, auch wenn sie unnötige Spalten enthält.
Ist employee_id eindeutig, identifiziert das Paar aus dieser Spalte und der Abteilung den Mitarbeiter weiterhin, enthält aber eine zusätzliche Spalte.
Surrogatschlüssel
Ein Surrogatschlüssel ist eine Kennung, die nur eingeführt wird, um Datenbankzeilen zu unterscheiden, etwa eine generierte Ganzzahl ohne geschäftliche Bedeutung.
Eine customer_id bleibt gleich, wenn der Kunde seine E-Mail-Adresse, Telefonnummer oder seinen Nachnamen ändert.

T

Tabelle (Relation)
Eine Tabelle (Relation) enthält Fakten über eine Art von Dingen in benannten Spalten und einzelnen Zeilen.
Die Tabelle products erfasst jeden Artikel, den der Shop anbietet, mit Spalten wie Name und Preis.
Transaktion
Eine Transaktion fasst Änderungen so zusammen, dass alle gemeinsam gespeichert oder alle rückgängig gemacht werden.
Eine Überweisung zieht in derselben Transaktion Geld von einem Konto ab und schreibt es einem anderen gut.
transaktionsorientierte Verarbeitung (OLTP)
Bei transaktionsorientierter Verarbeitung werden alltägliche Vorgänge über kleine Lese- und Schreibzugriffe erfasst.
Ein Ticketsystem erfasst über den Tag hinweg jede Buchung und Zahlung, während Kunden Plätze kaufen.
Typaffinität
Die Typaffinität von SQLite ist eine Präferenz für den Speichertyp einer Spalte: Umwandlungen werden versucht, die gespeicherten Werte bleiben aber flexibel.
Eine gewöhnliche SQLite-Ganzzahlspalte kann abc als Text behalten, wenn die Umwandlung in eine Ganzzahl scheitert.

U

UNKNOWN
UNKNOWN ist das dritte Wahrheitsergebnis in SQL; es entsteht, wenn ein Vergleich von fehlender Information abhängt und sich nicht als wahr oder falsch entscheiden lässt.
state <> 'TX' ist für einen Kunden mit NULL als Bundesstaat UNKNOWN, daher lässt WHERE diese Zeile weg.
UUID
Eine UUID ist eine 128-Bit-Kennung, die meist mit 36 Zeichen geschrieben wird und sich unabhängig mit sehr geringem Kollisionsrisiko erzeugen lässt.
Getrennte Geräte können UUIDs erzeugen, bevor ihre neuen Datensätze in einer Datenbank zusammengeführt werden.

V

verwaiste Zeile
Eine verwaiste Zeile ist ein Kinddatensatz, dessen Verweis nicht NULL ist, aber keine passende Elternzeile hat; die vorgesehene Beziehung bleibt damit ungeklärt.
Eine Bestellung, die auf einen gelöschten Kunden verweist, wäre verwaist, wenn keine durchgesetzte Integritätsbedingung das verhindert hätte.
Viele-zu-viele-Beziehung
Eine Viele-zu-viele-Beziehung erlaubt, dass Zeilen auf beiden Seiten mit mehreren Zeilen der jeweils anderen Seite verknüpft sind; dargestellt wird sie über eine Tabelle aus Paarungen.
Eine Bestellung enthält mehrere Produkte, und ein Produkt kann in vielen verschiedenen Bestellungen vorkommen.

W

Währungscode
Ein Währungscode ist ein standardisiertes Kürzel aus drei Buchstaben, das die Währung eines Betrags angibt, etwa USD, EUR oder JPY.
Zwei Zeilen, die beide 20 enthalten, können verschiedene Beträge darstellen, wenn eine mit USD und die andere mit EUR gekennzeichnet ist.

Z

Zeichenkettentyp
Ein Zeichenkettentyp speichert Text wie Namen oder Codes; Länge und Vergleichsverhalten hängen von der Deklaration und vom Datenbanksystem ab.
Eine Artikelnummer wie MUG-11-BLU gehört in einen Texttyp, weil sie ein Etikett ist und keine Stückzahl.
Zeile (Tupel oder Datensatz)
Eine Zeile (Tupel oder Datensatz) enthält die Einträge eines einzelnen Exemplars für alle Spalten der Tabelle.
In einer Kundentabelle enthält die Zeile für einen Kunden namens Wei Chen seine Kennung, seinen Namen, seine Stadt und die übrigen Kundeneigenschaften.
zusammengesetzter Schlüssel
Ein zusammengesetzter Schlüssel identifiziert Zeilen über eine Kombination von Spalten, deren vollständige Werte eindeutig sein müssen, auch wenn sich einzelne Teile wiederholen.
Student, Kurs und Semester identifizieren gemeinsam eine Einschreibung, wenn ein Student einen Kurs später wiederholen darf.
Zwischentabelle
Eine Zwischentabelle erfasst Paarungen über Fremdschlüssel auf zwei Tabellen und verwendet deren Kombination oft als Primärschlüssel.
Jede Zeile in order_items verknüpft eine Bestellung mit einem Produkt und hält Stückzahl und verlangten Stückpreis fest.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten