Adressbuch mit Notizen

Geschätzte Lektüre: 15 Minuten 125 Ansichten

Adressbuch

Ein kleiner Verein möchte eine Datenbank für seine Mitglieder anlegen.

Folgende Infos sollen gespeichert werden:
— Mitglieder: Vorname, Nachname, Anschrift, E-Mail, Telefonnummer
— Notizen: Datum der Notiz, Notiztext (z. B. „Hat neuen Ausweis beantragt“)


Aufgabenstellung:

  1. Entwerfe die Datenbank: zeichne ein ER-Diagramm und eine Tabelle für Mitglieder und eine Tabelle für Notizen.
  2. Schreibe die Spaltennamen auf.
  3. Bestimme einen Primärschlüssel für jede Tabelle.
  4. Erkläre kurz:
    Wie verknüpfst du die Notizen mit den Mitgliedern?
    (Welche Spalte wird dafür benötigt?)
  5. Schreibe die SQL-CREATE-Befehle für beide Tabellen
    (max. 3 Spalten pro Tabelle).

Beispiel für eine Notiz:
Ein Mitglied: Max Mustermann, m.mustermann@test,de , +49 171 123456 , hatte am 10.04.2026, eine Notiz: „Beitrag wurde überwiesen“.


Die Logik – Tabellen

Tabelle mitglieder

idvornamenachnameanschriftemailtelefon

Tabelle notizen

idmitglied_iddatumnotiztext

Tabelle 1: mitglieder

SpaltennameTypLänge/WerteExtra
idINT(leer)AUTO_INCREMENT (anklicken)
vornameVARCHAR100(leer)
nachnameVARCHAR100(leer)
anschriftVARCHAR255(leer)
emailVARCHAR100(leer)
telefonVARCHAR50(leer)

Wichtig: Klicke bei der Spalte id auf das Schlüssel-Symbol (das macht sie zum Primärschlüssel).

Tabelle 2: notizen

SpaltennameTypLänge/WerteExtra
idINT(leer)AUTO_INCREMENT (anklicken)
mitglied_idINT(leer)(leer)
datumDATE(leer)(leer)
notiztextTEXT(leer)(leer)

Wichtig: Klicke bei der Spalte id auf das Schlüssel-Symbol.

Verknüpung

Man fügt in der notizen-Tabelle eine Spalte mitglied_id ein.
Diese Spalte enthält die gleiche Zahl wie der id-Primärschlüssel des Mitglieds. (Fremdschlüssel)
So gehört jede Notiz zu genau einem Mitglied.


SQL-Befehle

CREATE TABLE mitglieder (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vorname VARCHAR(100),
    nachname VARCHAR(100),
    anschrift VARCHAR(255),
    email VARCHAR(100),
    telefon VARCHAR(50)
);

CREATE TABLE notizen (
    id INT AUTO_INCREMENT PRIMARY KEY,
    mitglied_id INT,
    datum DATE,
    notiztext TEXT,
    FOREIGN KEY (mitglied_id) REFERENCES mitglieder(id)
);

Was bedeuten die Sachen?

  • INT = Ganze Zahlen (z.B. 1, 2, 3)
  • VARCHAR(100) = Text mit maximal 100 Zeichen
  • DATE = Nur das Datum (z.B. 2026-04-26)
  • TEXT = Langer Text (für die Notiz)
  • AUTO_INCREMENT = Die ID wird automatisch hochgezählt (1,2,3…)
  • PRIMARY KEY = Der eindeutige Schlüssel für jeden Eintrag
  • FOREIGN KEY ... REFERENCES = Das ist der Fremdschlüssel – er stellt sicher, dass mitglied_id wirklich auf ein existierendes Mitglied zeigt

Vollständige SQL-Quellcode


-- =====================================================
-- DATENBANK FÜR VEREIN MIT MITGLIEDERN UND NOTIZEN
-- =====================================================

-- Schritt 1: Datenbank löschen, falls sie bereits existiert (für sauberen Neustart)
-- ACHTUNG: Das löscht alle vorhandenen Daten!
DROP DATABASE IF EXISTS verein;

-- Schritt 2: Neue Datenbank erstellen
CREATE DATABASE verein;

-- Schritt 3: Diese Datenbank für alle folgenden Befehle verwenden
USE verein;


-- =====================================================
-- TABELLE 1: mitglieder
-- Speichert alle Mitglieder des Vereins
-- =====================================================

CREATE TABLE mitglieder (
    -- id: Eindeutige Nummer für jedes Mitglied
    -- INT: Ganze Zahl
    -- AUTO_INCREMENT: Zählt automatisch hoch (1,2,3...)
    -- PRIMARY KEY: Stellt sicher, dass jede ID nur einmal vorkommt
    id INT AUTO_INCREMENT PRIMARY KEY,
    
    -- vorname: Der Vorname des Mitglieds
    -- VARCHAR(100): Text mit maximal 100 Zeichen
    vorname VARCHAR(100),
    
    -- nachname: Der Nachname des Mitglieds
    nachname VARCHAR(100),
    
    -- anschrift: Die vollständige Adresse (Straße, Hausnummer, PLZ, Ort)
    -- VARCHAR(255): Text mit maximal 255 Zeichen
    anschrift VARCHAR(255),
    
    -- email: E-Mail-Adresse des Mitglieds
    email VARCHAR(100),
    
    -- telefon: Telefonnummer (auch Mobilfunk möglich)
    telefon VARCHAR(50)
);

-- =====================================================
-- TABELLE 2: notizen
-- Speichert Notizen, die zu Mitgliedern gehören
-- =====================================================

CREATE TABLE notizen (
    -- id: Eindeutige Nummer für jede Notiz
    id INT AUTO_INCREMENT PRIMARY KEY,
    
    -- mitglied_id: Fremdschlüssel - verweist auf die id in der Tabelle "mitglieder"
    -- INT: Gleicher Datentyp wie mitglieder.id
    -- NICHT "AUTO_INCREMENT", weil wir hier die ID des Mitglieds eintragen
    mitglied_id INT,
    
    -- datum: Das Datum, an dem die Notiz erstellt wurde
    -- DATE: Format YYYY-MM-TT (Jahr-Monat-Tag)
    datum DATE,
    
    -- notiztext: Der Inhalt der Notiz (langer Text möglich)
    -- TEXT: Für längere Texte ohne Zeichenbegrenzung
    notiztext TEXT,
    
    -- Fremdschlüssel-Regel:
    -- FOREIGN KEY: Sagt, dass mitglied_id auf mitglieder.id verweist
    -- REFERENCES: Verweist auf die Tabelle mitglieder und dort auf die Spalte id
    FOREIGN KEY (mitglied_id) REFERENCES mitglieder(id)
);

-- =====================================================
-- FIKTIVE DATEN EINFÜGEN (INSERTS)
-- =====================================================

-- -----------------------------------------------------
-- MITGLIEDER EINFÜGEN (5 verschiedene Mitglieder)
-- -----------------------------------------------------

-- Mitglied 1: Anna Schmidt
-- Die id wird automatisch vergeben (1)
INSERT INTO mitglieder (vorname, nachname, anschrift, email, telefon)
VALUES ('Anna', 'Schmidt', 'Hauptstraße 15, 10115 Berlin', 'anna.schmidt@email.de', '030 1234567');

-- Mitglied 2: Thomas Weber
-- id wird automatisch 2
INSERT INTO mitglieder (vorname, nachname, anschrift, email, telefon)
VALUES ('Thomas', 'Weber', 'Bergweg 7, 50667 Köln', 'thomas.weber@web.de', '0221 9876543');

-- Mitglied 3: Lisa Meyer
-- id wird automatisch 3
INSERT INTO mitglieder (vorname, nachname, anschrift, email, telefon)
VALUES ('Lisa', 'Meyer', 'Seestraße 42, 80331 München', 'lisa.meyer@gmx.de', '089 4567890');

-- Mitglied 4: Stefan Fischer
-- id wird automatisch 4
INSERT INTO mitglieder (vorname, nachname, anschrift, email, telefon)
VALUES ('Stefan', 'Fischer', 'Gartenweg 3, 60313 Frankfurt', 'stefan.fischer@online.de', '069 1122334');

-- Mitglied 5: Julia Hoffmann
-- id wird automatisch 5
INSERT INTO mitglieder (vorname, nachname, anschrift, email, telefon)
VALUES ('Julia', 'Hoffmann', 'Lindenstraße 8, 20095 Hamburg', 'julia.hoffmann@email.com', '040 5566778');

-- -----------------------------------------------------
-- NOTIZEN EINFÜGEN (verschiedene Notizen zu den Mitgliedern)
-- -----------------------------------------------------

-- WICHTIG: mitglied_id MUSS einer existierenden id aus der mitglieder-Tabelle entsprechen
-- Hier verwenden wir die IDs 1 bis 5, weil wir genau diese Mitglieder oben angelegt haben

-- Notiz für Mitglied 1 (Anna Schmidt) vom 15.01.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (1, '2026-01-15', 'Hat den Mitgliedsantrag ausgefüllt und unterschrieben.');

-- Noch eine Notiz für Mitglied 1 (Anna Schmidt) vom 10.03.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (1, '2026-03-10', 'Hat den Jahresbeitrag überwiesen. Betrag: 50 Euro.');

-- Notiz für Mitglied 2 (Thomas Weber) vom 20.02.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (2, '2026-02-20', 'Neue E-Mail-Adresse mitgeteilt: thomas.neu@web.de');

-- Notiz für Mitglied 3 (Lisa Meyer) vom 05.03.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (3, '2026-03-05', 'Hat nachgefragt wegen des nächsten Vereinsausflugs.');

-- Noch eine Notiz für Mitglied 3 (Lisa Meyer) vom 12.04.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (3, '2026-04-12', 'Hat neuen Personalausweis beantragt. Kopie liegt vor.');

-- Notiz für Mitglied 4 (Stefan Fischer) vom 28.02.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (4, '2026-02-28', 'Hat die Teilnahme am Sommerfest zugesagt. Bringt Kuchen mit.');

-- Notiz für Mitglied 5 (Julia Hoffmann) vom 01.04.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (5, '2026-04-01', 'Bitte um Zusendung der neuen Vereinssatzung.');

-- Notiz für Mitglied 5 (Julia Hoffmann) vom 20.04.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (5, '2026-04-20', 'Hat den Mitgliedsbeitrag für 2026 überwiesen.');

-- Notiz für Mitglied 2 (Thomas Weber) vom 25.04.2026
INSERT INTO notizen (mitglied_id, datum, notiztext)
VALUES (2, '2026-04-25', 'Hat sich als Fahrer für den Ausflug gemeldet.');

-- =====================================================
-- BEISPIELE ZUM ABFRAGEN DER DATEN (SELECT)
-- =====================================================

-- Beispiel 1: Alle Mitglieder anzeigen
-- SELECT * bedeutet: "Zeige alle Spalten"
SELECT * FROM mitglieder;

-- Beispiel 2: Nur Vorname und Nachname aller Mitglieder anzeigen
SELECT vorname, nachname FROM mitglieder;

-- Beispiel 3: Alle Notizen anzeigen
SELECT * FROM notizen;

-- Beispiel 4: Alle Notizen von Mitglied 1 (Anna Schmidt) anzeigen
SELECT * FROM notizen WHERE mitglied_id = 1;

-- Beispiel 5: Alle Notizen sortiert nach Datum (neueste zuerst)
SELECT * FROM notizen ORDER BY datum DESC;

-- Beispiel 6: Notizen mit den dazugehörigen Mitgliedern kombinieren (VERBINDUNG)
-- Das ist der wichtigste Befehl: Er zeigt, wie die Verknüpfung funktioniert
SELECT 
    mitglieder.vorname,
    mitglieder.nachname,
    notizen.datum,
    notizen.notiztext
FROM notizen
JOIN mitglieder ON notizen.mitglied_id = mitglieder.id
ORDER BY notizen.datum DESC;

-- Beispiel 7: Alle Mitglieder, die noch keine Notiz haben
-- (In unserer Datenbank haben alle Mitglieder mindestens eine Notiz,
-- aber dieser Befehl würde die ohne Notiz zeigen)
SELECT mitglieder.vorname, mitglieder.nachname
FROM mitglieder
LEFT JOIN notizen ON mitglieder.id = notizen.mitglied_id
WHERE notizen.id IS NULL;


-- =====================================================
-- ENDE DES SQL-CODE
-- =====================================================
Dieses Dokument teilen

Adressbuch mit Notizen

Oder Link kopieren

INHALT

Abonnieren

×
Cancel