@Hans-Werner:
So technisch wollte ich eigentlich gar nicht werden, aber ist egal. Hier beginnts ja langsam spannend zu werden.
Ist schon klar, gewisse Überschneidungen in einer Datenbank lassen sich nicht vermeiden. Klar könnte man z.B. sogar die Telefonnummer eines Kunden auf mehrere Tabellen verteilen. Sehen wir uns doch mal an, wie eine Telefonnummer aussieht:
001 41 61 XXX XX XX
So würde man aus Übersee nach Basel telefonieren (Wobei die "X"-en eine handelsübliche Telefonnummer darstellen).
Wir hätten also eine Tabelle, die die Kontinente erfasst. Lasst mich nicht lügen, das wäre eine Tabelle mit meines Wissens 8 Datensätzen (ich weiss, dass es keine 8 Kontinente gibt, aber ich glaube zu wissen, dass es 8 Kontinent-Einwahlen gibt). Darin hätte ein Datensatz 3 Felder: ID, Kontinent, Einwahl. Für obiges Beispiel wäre das dann:
ID = 1
Kontinent = Europa
Einwahl = 01
Dann hätten wir eine Tabelle mit den Ländern, die so aussieht: ID, KontinentID, Land, Einwahl. Für obiges Beispiel:
ID = 41
KontinentID = 1 (muss ja mit der obigen Tabelle verknüpfbar sein)
Land = 41
Einwahl = 041
Nun kämen für jedes Land Tabellen mit den regionalen Einwahlen. Die sähen dann so aus: ID, Gebiet, Einwahl. Für obiges Beispiel:
Tabellenname = 41 (siehe LandID von oben) (Iss klar, jetzt machen wir auch noch für jedes Land eine eigene Tabelle für die regionalen Vorwahlen.)
ID = 7
Gebiet = Basel / Baselland
Einwahl = 061
Der Rest der Telefonnummer bliebe in der Kundendatenbank. Dort würde dann die Telefonnummer wie folgt aussehen:
Kontinent = 1
Land = 41
Gebiet = 7
Nummer = XXX XX XX
Die zugehörige SQL-Abfrage wäre dann etwa so:
"SELECT Nummer From Tabelle WHERE (Land = (INNER JOIN FROM ... und weiss der Geier"
... oder war das "SELECT Einwahl FROM Kontinente (INNER JOIN FROM Land (INNER Join etc. und haste nicht gesehen"?
Tja, da müsste ich jetzt selbst erst experimentieren, bevor ich hier Mist erzähle. So aus dem Kopf kriege ich das jetzt nicht fehlerfrei hingepinselt, aber man könnte das machen.
Nur ob das noch Sinn macht ist die grosse Frage. Hierzu ist die Abhandlung von
Simone Fühles-Ubach höchst interessant zu lesen. Frau Fühles-Ubach zeigt hier sehr deutlich und anschaulich auf, dass gewisse Unschärfen im Bestreben zur absoluten Redundanz unvermeidlich sind. Die Frau hat was drauf.
Was bringt uns das nun?
Ist ganz einfach:
Wir sehen uns an, wieviele Kunden wir verwalten und wie tief die Erfassung der Kundendaten gehen soll (Wenn wir CDs handeln brauchen wir die Blutgruppe nicht).
Dann macht es Sinn, bei 500 Kunden die Anrede in eine separate Tabelle zu legen, was uns sogar die Möglichkeiten an die Hand gibt, für Serienbriefe vorbereitete Anreden zu definieren.
Bei 5000 Kunden könnte man den Wohnort extrahieren.
Bei 50000 Kunden haben wir sicher auch spezifischere Kundendaten, die sich extrahieren liessen.
Das lässt sich natürlich nicht nur für Kunden anwenden, wir können auf die gleiche Weise auch Postkarten, Zuchthennen, Plastikschrumpfköpfe oder rostige Nägel erfassen. Massgebend ist nur, welche Eigenschaften uns wichtig erscheinen, welche Eigenschaften so oft vorhanden und katalogisierbar sind, dass sie eigene Tabellen rechtfertigen.
Naja Leute, lasst Euch nicht erschrecken. Spielt mit Datenbanken und lernt sie schätzen.
Hamlet