Seite 1 von 1

[Datenbankdesign]Beliebig viele Telefonnummern speichern

Verfasst: Mi, 23.05.2007 08:17
von nzc
Hallo, bevor ich zu meiner Frage komme, beschreibe ich erstmal die Situation:

Ich habe in meiner DB eine Tabelle "Kontakte", in der ich Festnetz- und Mobilfunknummern, E-Mail-Adressen usw. speichern will.
Dazu gibt es dann Tabellen wie "Festnetz", "Mobil", "E-Mail" usw. auf die von "Kontakte" aus verwiesen wird.

Der Einfachheit halber beschränke ich mich mal nur auf Telefonnummern, die in "Kontakte" gespeichert werden sollen:

Mein erster Entwurf sah so aus:

TELEFON:
01---ID
02---Vorwahl
03---Nummer

KONTAKTE:
01---ID
02---FK_TELEFON-ID

Dieser Entwurf hat den Nachteil, das ich pro Kontakt nur eine einzige Telefonnummer speichern kann.
Gut, ich könnte jetzt noch zusätzliche TELEFON-Tabellen anlegen (TELEFON1, TELEFON2 ... TELEFONn) je nachdem wieviele Nummern ich glaube jemals zu brauchen, aber damit wäre man dann festgelegt. In der Praxis würde das gehen, denn in der Regel kommt es ja selten vor das jemand mehr als drei Nummer hat (zumindest, wenn man noch zwischen Festnetz/Mobil und Privat/Geschäftlich unterscheidet.
Aber schön ist das trotzdem nicht.

Deshalb hab ich mir zu Übungszwecken folgenden Entwurf überlegt:

KONTAKTE:
01---ID

TELEFON:
01---ID
02---FK_KONTAKTE-ID
03---Vorwahl
04---Nummer

Als Primärschlüssel habe ich in TELEFON die Kombination aus ID und FK_KONTAKTE-ID gewählt, wodurch ich dann pro Kontakt mehrere Nummern speichern kann.

Also z.B. so:
1 --- 1 --- 05331 --- 443344
2 --- 1 --- 05331 --- 552312

Hier wären dann für KONTAKTE ID=1 zwei Nummern gespeichert.

Die Frage ist jetzt: Geht das so in Ordnung? Ich hab jetzt ja in der Tabelle KONTAKTE nur eine einzige Spalte (mehr brauch ich in dem Fall nicht). Aber ist sowas zulässig?

Verfasst: Mi, 23.05.2007 14:00
von Toxitom
Hey nzc,
...Geht das so in Ordnung? ... Aber ist sowas zulässig?
Klar, wenn du das so brauchst. Und zulässig ist es allemale - ob sinnvoll ist eine andere Frage. Wozu brauchst du eine Tabelle mit nur einer Spalte? Welche zusätzliche Information willst du da ablegen?
Die Lösung hast du doch schon gefunden:
TELEFON:
01---ID
02---FK_KONTAKTE-ID
03---Vorwahl
04---Nummer

Als Primärschlüssel habe ich in TELEFON die Kombination aus ID und FK_KONTAKTE-ID gewählt, wodurch ich dann pro Kontakt mehrere Nummern speichern kann.

Also z.B. so:
1 --- 1 --- 05331 --- 443344
2 --- 1 --- 05331 --- 552312
Die "FK_Kontake-ID ist der Fremdschlüssel und verweist auf deine Tabelle "Kontake" in der die allerdings die Namen und Adressen deiner Kontakte verwalten solltest - mit dem Primärschlüssel "ID" -> identisch dem Schlüssel "FK_Kontakte-ID".
Deine "Einspalten-Tabelle" ist Unsinn ;-)

Gruss
Thomas

Verfasst: Mi, 23.05.2007 22:27
von nzc
Danke, für die Antwort. Wenn die Lösung soweit gegen keine Regeln verstößt, reicht mir das schon.

Was deinen Einwand angeht bezüglich des Sinns dieser 1-Spalten-Tabelle:

Ich hab hier natürlich nur einen kleinen für das Problem relevanten Ausschnitt aus meiner DB gezeigt. In der Tabelle KONTAKTE sollen nur Möglichkeiten der Fern-Kommunikation gespeichert werden also Telefon, Handy, E-Mail usw. Für Adressen, Namen oder Firmennamen gibt es bereits eigene Tabellen, die dann allesamt über Relationen in Tabellen wie FIRMENKUNDEN und PRIVATKUNDEN zusammengeführt werden.

Würden die Tabellen, wie ich sie hier dargestellt habe, nur für sich alleine stehen, hättest du recht. Im Zusammenspiel mit den anderen macht diese so aber Sinn (zumindest nach meinem bisherigen Wissenstand)
Sobald der Entwurf meiner Übungs-Datenbank steht, kann ich den ja mal hier präsentieren und mir Kritik und Verbesserungsvorschläge anhören.