Kunden-Tabelle mit oder ohne Adresse?

bigtail

kennt sich schon aus
Hallo,

Nehmen wir an es sollen hunderte Kunden mit ihren Adressen in einer Datenbank erfasst werden.

Soll man dafür nur eine Tabelle erstellen, die folgende Felder besitzt ?:
KundenNr, Name, Vorname, Strasse, PLZ, Stadt

oder richtig wäre es, wenn man dafür zwei Tabellen wie folgt erstellt?:

Tabelle Kunden: KundenNr, Name, Vorname
Tabelle Adressen: KundenNr, Strasse, PLZ, Stadt

Welche Vorgang wäre besser oder richtiger??

Danke
 

Gamma-Ray

Moderator
Teammitglied
Die erste Tabelle ist schon korrekt, eine weitere Aufteilung bringt imho keinen Vorteil.
Da könnte man durchaus noch weitere Felder anfügen wie Tel, Fax, Handy etc. :)

Über die Kunden-Nr. (Index) werden dann normalerweise in einer Datenbank Bestellungen, Rechnungen und andere Dinge verknüpft.
 

Pennywise

assimiliert
Stell dir vor du erstellst eine Tabelle nur mit dem Kunden mit einer eindeutigen Kundennummern. Dann erstellst du eine zweite Tabelle mit allen möglichen Feldern wobei nicht jede Möglichkeit eine Spalte, sondern eine Zeile ist.
Abschließend eine Tabelle in der die Möglichkeiten einer Kunden-ID zugewiesen werden.

Beispiel:

Tabelle 1

Code:
KdNr   Name
1      Maier GmbH
2      Obi
3      Edeka
Tabelle 2

Code:
EGId   Eigenschaft
1      Straße
2      Ort
3      Telefonnummer
4      Brustumfang
Tabelle 3

Code:
Id      KdNr      EGId
1       1         1
2       1         2
3       1         3
Dies mag für deinen Zweck etwas übertrieben sein, soll dir aber ein Beispiel geben, wie man Daten variabel ablegen kann ohne später beengt zu werden.
Du solltest Daten die du wirklich bei jedem Kunden benötigst in eine Tabelle ablegen, für alle Extras vielleicht eine weitere Tabelle anlegen.
 

bigtail

kennt sich schon aus
Danke für eure Antworten.

Also wenn ich jetzt richtig verstanden habe, der Grund, der für die zweite Variante spricht, ist nicht die Vermeidung von Redundaten Datensätze, sondern eine größere Flexibilität. Z.B. wenn ein Kunde mehrere Adressen hat (oder ähnliches).

Also es wäre Quatsch, wenn ich z.B. die Bismarkstr. in die Tabelle Strassen nur einmal eintrage und alle Kunden aus der Tabelle Kunden, die in der Bismarkstr. wohnen durch eine dritte Tabelle (mittels KundenNr. und StrassenID) mit der Bismarkstr. verknüpfe.

Oder ist das sogar besser so?

Also nochmal:

Tabelle 1: Kundne (KundenID als Primär-Schlüssel)
Tabelle 2: Straßen (StrassenID als Primär-Schlüssel)
Tabelle 3: Welche Kunde in welcher Strasse. (KundenID und StrassenID beide als Fremd-Schlüssel)
 

Gamma-Ray

Moderator
Teammitglied
Die Aufteilung der Daten hängt natürlich von den Voraussetzungen ab.

Gibt es Kunden mit mehreren Adressen (Verwaltung) und es gibt womöglich eine andere Rechnungsadresse (Buchhaltung) und unterschiedliche Anlieferungsadressen (Lager), dann macht z.B. die Aufteilung KundenID zu Buchhaltung oder Lager Sinn.
Die meisten Firmen bilden das allerdings immer noch in einem einzigen Datensatz ab und haben damit keine Probleme. :)
 

bigtail

kennt sich schon aus
Ok, ich stelle meine Frage etwas genauer.

Ist das sinnvoll, wenn ich für eine Kunden-Datenbank z.B. 6 Tabellen wie folgt erstelle?

Tabelle Kundne: KundenID, NachName, VorName (KundenID als Primär-Schlüssel)
Tabelle Straßen: StrassenID, StrassenName (StrassenID als Primär-Schlüssel)
Tabelle Hausnummer: HausNrID, Hausnummer (HausNrID als Primär-Schlüssel)
Tabelle PLZ: plzID, PLZ (plzID als Primär-Schlüssel)
Tabelle Stadt: StadtID, Stadt (StadtID als Primär-Schlüssel)

Tabelle Verknüpfung: Mit Primärschlüssel aller anderen Tabellen als Fremdschlüssel. Hier werden die Datensätze aus allen anderen Tabellen miteinander verknüpft.

Mein Ziel wäre, die Vermeidung von Redundanzen. Da z.B. eine Strasse "Hauptstr." oder eine Hausnummer "33" nur einmal vorkommt.

Oder wäre das Schwachsinnig soviele Tabellen zu erstellen??


Danke
 

Gamma-Ray

Moderator
Teammitglied
Die Angst vor Redundanzen kann auch übertrieben werden. :D

Aber es ist ja bei der Konzeption einer DB schon wichtig, dass man wiederkehrende Daten nur einmal ändert. Die Relation zur Anzahl der erwarteten Datensätze muss aber auch gesehen werden. ;)

Bei nur hunderten von Datensätzen macht man sich weniger einen Kopp, ob man 11 mal die Supernaturestreet 51 in der DB stehen hat, mit unterschiedlichen Leutchen.

Oder wäre das Schwachsinnig soviele Tabellen zu erstellen??
Ganz so hart würde ich es nicht ausdrücken.

Warum willst du die DB unbedingt so aufteilen? Überlege mal, wie du das händelst, wenn du dann Formulare und Berichte auf die Tabellen aufsetzt, wie die Daten dann noch vernünftig den Kunden zuordnen kannst.

Man kann bei Adressdaten die Redundanzen besser durch Nachschlagetabellen verhinden, wobei dann Plz+Ort und Strasse+Hausnummer jeweils zusammengeschrieben werden sollten.

In einer Access-DB macht man das z.B. mit einer Haupttabelle Kunden und innerhalb dieser Haupttabelle werden Nachschlagetabellen eingefügt.
Wird eine Strasse seltsamerweise unbenannt und eine Massenänderung ist erforderlich, dann macht man es einfach per Aktualisierungsabfrage. Fertig. :)

Ich würde also die DB niemals so aufdröseln.
 
Oben