Tabellen, Attribute und Datentypen
Die Schülerbücherei deiner Schule hat 3.000 Bücher. Auf einem Zettel stehen Titel, Autor und die Namen der Ausleiher, mal vorne, mal hinten, mal durchgestrichen. Wie findest du schnell alle Bücher von einem Autor oder alle Bücher, die noch nicht zurückgegeben wurden? Dafür braucht man Daten mit fester Struktur. Genau das leisten Datenbanken.
Tabelle, Attribut und Datensatz
Eine Datenbank speichert Daten in Tabellen. Jede Zeile beschreibt ein einzelnes Objekt, jede Spalte eine Eigenschaft aller Objekte.
Beispiel: die Tabelle „Buch“ der Schülerbücherei.
| BuchID | Titel | Autor | Erscheinungsjahr | ausgeliehen |
|---|---|---|---|---|
| 1 | Tintenherz | Cornelia Funke | 2003 | ja |
| 2 | Die Welle | Morton Rhue | 1981 | nein |
| 3 | Krabat | Otfried Preußler | 1971 | nein |
Diese Tabelle hat 5 Attribute und 3 Datensätze. Die Überschriften zählen nicht als Datensätze.
Die Schülerbücherei der Gesamtschule Musterstadt verwaltet ihre Bücher in einer Tabelle mit den Spalten Titel, Autor, Erscheinungsjahr, Seitenzahl und ausgeliehen…
Die Schülerbücherei der Gesamtschule Musterstadt verwaltet ihre Bücher in einer Tabelle mit den Spalten Titel, Autor, Erscheinungsjahr, Seitenzahl und ausgeliehen (ja/nein).
- a) Nenne die Attribute der Tabelle.
- b) Was ist in dieser Tabelle ein Datensatz?
- c) Ordne jedem Attribut einen passenden Datentyp zu (Text, ganze Zahl, Wahrheitswert).
Erkläre in je einem Satz die Begriffe Tabelle, Attribut, Datensatz und Primärschlüssel und nenne für eine Tabelle „Haustiere“ ein Beispiel für jeden dieser Begriffe.
Erkläre in je einem Satz die Begriffe Tabelle, Attribut, Datensatz und Primärschlüssel und nenne für eine Tabelle „Haustiere“ ein Beispiel für jeden dieser Begriffe.
Datentypen
Jedes Attribut hat einen Datentyp. Er legt fest, welche Werte erlaubt sind und was man damit tun darf. Nur bei Zahlen kann man rechnen, nur bei Datumswerten Zeiträume berechnen.
| Datentyp | Beispiel | Verwendung |
|---|---|---|
| Text (String) | „Köln“, „10a“ | Namen, Orte, Bezeichnungen |
| ganze Zahl (Integer) | 2009, 120 | Jahre, Anzahlen, Seitenzahlen |
| Kommazahl (Dezimalzahl) | 12,5; 8,50 | Temperaturen, Preise |
| Datum / Uhrzeit | 24.12.2025; 14:30 | Termine, Messzeitpunkte |
| Wahrheitswert (Boolean) | ja / nein, wahr / falsch | Ja-Nein-Eigenschaften |
Der Datentyp schützt vor Fehleingaben: Gibt jemand in ein Zahlenfeld „zwölf Grad“ ein, lehnt die Datenbank das ab. Außerdem kann man nur dann sinnvoll sortieren und auswerten, etwa den Durchschnitt der Temperaturen bilden.
Gegeben ist die Tabelle „Schueler“: | ID | Name | Klasse | Geburtsjahr | |----|------|--------|-------------| | 1 | Lena Brandt | 10a | 2009 | | 2 | Murat Yilmaz | 10b |…
Gegeben ist die Tabelle „Schueler“:
| ID | Name | Klasse | Geburtsjahr |
|---|---|---|---|
| 1 | Lena Brandt | 10a | 2009 |
| 2 | Murat Yilmaz | 10b | 2008 |
| 3 | Sophie Klein | 10a | 2009 |
- a) Wie viele Datensätze und wie viele Attribute hat die Tabelle?
- b) Welches Attribut eignet sich als Primärschlüssel? Begründe kurz.
- c) Welchen Datentyp hat das Attribut Geburtsjahr?
Für eine Tabelle „Messwerte“ einer Wetterstation in Köln sind folgende Attribute geplant: Datum, Uhrzeit, Temperatur in °C, Niederschlag in mm, Wetterlage (z. B.…
Für eine Tabelle „Messwerte“ einer Wetterstation in Köln sind folgende Attribute geplant: Datum, Uhrzeit, Temperatur in °C, Niederschlag in mm, Wetterlage (z. B. „sonnig“).
- a) Ordne jedem Attribut einen Datentyp zu.
- b) Ein Mitarbeiter trägt bei Temperatur den Wert „zwölf Grad“ ein. Welches Problem entsteht bei einer Auswertung?
- c) Wie kann die Datenbank solche Fehleingaben verhindern?
Primärschlüssel
In der Tabelle „Schueler“ gibt es vielleicht zwei Schüler namens „Lukas Müller“. Wie unterscheidet man sie? Dafür gibt es den Primärschlüssel.
Gute Primärschlüssel sind meist eine künstliche ID oder eine Nummer: Kundennummer, Matrikelnummer, BuchID. Namen taugen nicht, denn sie können doppelt vorkommen und sich ändern (z. B. durch Heirat). Auch die Klasse oder das Geburtsjahr sind ungeeignet, weil viele Schüler sie gemeinsam haben.
Ein Sportverein in Dortmund möchte seine Mitglieder in einer Datenbank speichern: Name, Geburtsdatum, Postleitzahl, Mitgliedsbeitrag in Euro, Eintrittsdatum und ob das…
Ein Sportverein in Dortmund möchte seine Mitglieder in einer Datenbank speichern: Name, Geburtsdatum, Postleitzahl, Mitgliedsbeitrag in Euro, Eintrittsdatum und ob das Mitglied im Vorstand ist.
- a) Entwirf eine Tabelle mit passenden Attributen und gib für jedes Attribut einen geeigneten Datentyp an.
- b) Warum sollte die Postleitzahl als Text und nicht als Zahl gespeichert werden?
- c) Füge einen Primärschlüssel hinzu und begründe deine Wahl.
Redundanz vermeiden: mehrere Tabellen und Fremdschlüssel
Ein Pizzalieferdienst speichert alle Daten in einer Tabelle:
| Nr | Kunde | Pizza | Preis | Ort |
|---|---|---|---|---|
| 1 | Meier | Salami | 8,50 € | Essen |
| 2 | Meier | Funghi | 7,90 € | Essen |
| 3 | Schulz | Salami | 8,50 € | Bochum |
Der Ort von Herrn Meier steht zweimal, der Preis der Salami ebenfalls. Mehrfach gespeicherte Daten heißen Redundanz. Sie machen Probleme:
-
Ändern: Zieht Herr Meier um, muss man jede Zeile ändern. Vergisst man eine, widersprechen sich die Daten (Inkonsistenz).
-
Löschen: Löscht man den letzten Auftrag eines Kunden, sind auch seine Kundendaten weg.
-
Einfügen: Einen neuen Kunden ohne Auftrag kann man nicht speichern.
Die Lösung: Daten auf mehrere Tabellen aufteilen, sodass jede Information genau einmal vorkommt. Die Tabellen werden über Fremdschlüssel verknüpft.
Tabelle „Kunde“:
| KundeID | Name | Ort |
|---|---|---|
| 1 | Meier | Essen |
| 2 | Schulz | Bochum |
Tabelle „Auftrag“:
| Nr | KundeID | Pizza | Preis |
|---|---|---|---|
| 1 | 1 | Salami | 8,50 € |
| 2 | 1 | Funghi | 7,90 € |
| 3 | 2 | Salami | 8,50 € |
KundeID ist in „Kunde“ der Primärschlüssel und in „Auftrag“ der Fremdschlüssel. Zieht Herr Meier um, ändert man jetzt nur eine Zeile.
Die folgende Tabelle „Auftraege“ eines Pizzalieferdienstes enthält: | Nr | Kunde | Pizza | Preis | Ort | |----|-------|-------|-------|-----| | 1 | Meier | Salami | 8,50…
Die folgende Tabelle „Auftraege“ eines Pizzalieferdienstes enthält:
| Nr | Kunde | Pizza | Preis | Ort |
|---|---|---|---|---|
| 1 | Meier | Salami | 8,50 € | Essen |
| 2 | Meier | Funghi | 7,90 € | Essen |
| 3 | Schulz | Salami | 8,50 € | Bochum |
- a) Welche Informationen werden mehrfach gespeichert (Redundanz)?
- b) Welche Probleme entstehen, wenn Herr Meier umzieht?
- c) Schlage vor, wie man die Daten auf zwei Tabellen aufteilen könnte, und nenne die Verbindung zwischen ihnen.
Eine Schule speichert in einer einzigen Tabelle: Schüler-Name, Klasse, Klassenlehrer, Raum des Klassenlehrers, Fach, Note. a) Beschreibe drei Probleme, die bei dieser…
Eine Schule speichert in einer einzigen Tabelle: Schüler-Name, Klasse, Klassenlehrer, Raum des Klassenlehrers, Fach, Note.
- a) Beschreibe drei Probleme, die bei dieser Struktur auftreten (z. B. beim Ändern, Löschen und Einfügen).
- b) Entwirf eine Aufteilung in mindestens drei Tabellen mit Primärschlüsseln und Verweisen (Fremdschlüsseln).
- c) Begründe, warum deine Struktur die Probleme aus a) vermeidet.
Beziehungen und gute Attribute
Viele-zu-viele-Beziehungen
Ein Leser leiht mehrere Bücher aus, und ein Buch wird von mehreren Lesern ausgeliehen. Man kann das weder in „Buch“ noch in „Leser“ als Attribut speichern: Es müssten mehrere Werte in einer Zelle stehen, oder man müsste Datensätze doppelt anlegen. Man braucht eine dritte Tabelle, die jede Ausleihe als eigenen Datensatz speichert.
Tabelle „Ausleihe“:
| AusleiheID | BuchID | LeserID | Ausleihdatum | Rückgabedatum |
|---|---|---|---|---|
| 1 | 2 | 5 | 03.03.2025 | 17.03.2025 |
| 2 | 2 | 8 | 20.03.2025 | leer |
AusleiheID ist der Primärschlüssel, BuchID und LeserID sind Fremdschlüssel. Ist das Rückgabedatum leer, ist das Buch noch nicht zurückgegeben. So lassen sich später die offenen Ausleihen abfragen.
Ein Wert pro Attribut
Name und Adresse in einem einzigen Feld „Kundendaten“ zu speichern, ist schlecht: Man kann nicht nach Nachnamen sortieren, nicht nach Stadt suchen und nicht auswerten, wie viele Kunden in Düsseldorf wohnen. Besser sind getrennte Attribute: Vorname, Nachname, Straße, Hausnummer, PLZ (Text), Ort. Jedes Attribut enthält genau einen Wert.
Eine Bibliothek in Münster führt die Tabellen „Buch“ (BuchID, Titel, Autor) und „Leser“ (LeserID, Name). Ein Leser kann mehrere Bücher ausleihen, ein Buch wird im Lauf…
Eine Bibliothek in Münster führt die Tabellen „Buch“ (BuchID, Titel, Autor) und „Leser“ (LeserID, Name). Ein Leser kann mehrere Bücher ausleihen, ein Buch wird im Lauf der Zeit von mehreren Lesern ausgeliehen.
- a) Erkläre, warum man die Ausleihe nicht als zusätzliches Attribut in einer der beiden Tabellen speichern kann.
- b) Entwirf eine dritte Tabelle „Ausleihe“ mit Attributen, Primärschlüssel und Fremdschlüsseln.
- c) Gib an, welche Attribute dazu dienen, später abzufragen, welche Bücher aktuell nicht zurückgegeben wurden.
Ein Online-Shop speichert Kundendaten. Ein Entwickler schlägt vor, den Namen und die Adresse in einem einzigen Textfeld „Kundendaten“ zu speichern. a) Nenne mindestens…
Ein Online-Shop speichert Kundendaten. Ein Entwickler schlägt vor, den Namen und die Adresse in einem einzigen Textfeld „Kundendaten“ zu speichern.
- a) Nenne mindestens drei Nachteile dieses Vorschlags für Sortierung, Suche und Auswertung.
- b) Zerlege das Attribut sinnvoll in einzelne Attribute mit Datentypen.
- c) Beurteile, ob die Kundennummer oder der Nachname als Primärschlüssel besser geeignet ist.
Zurück zum Anfang: Mit einer Tabelle „Buch“, einer Tabelle „Leser“ und einer Tabelle „Ausleihe“ findet die Schülerbücherei jedes Buch und jeden offenen Verleih sofort wieder.
Auf einen Blick
-
Eine Tabelle besteht aus Attributen (Spalten) und Datensätzen (Zeilen).
-
Jedes Attribut hat einen Datentyp (Text, ganze Zahl, Kommazahl, Datum, Wahrheitswert). Postleitzahlen speichert man als Text.
-
Der Primärschlüssel kennzeichnet jeden Datensatz eindeutig, meist eine ID.
-
Redundanz führt zu Fehlern beim Ändern, Löschen und Einfügen. Man vermeidet sie durch mehrere Tabellen.
-
Ein Fremdschlüssel verweist auf den Primärschlüssel einer anderen Tabelle. Für Viele-zu-viele-Beziehungen braucht man eine eigene Tabelle.