ER-Modell Fremdschlüssel als Primärschlüssel möglich?
Seid gegrüßt liebe GuteFrage.net-Community,
ich bin Informatik-Student und wir sollen zu einem konkreten "Szenario" ein ER-Modell entwickeln. Bisher hatte ich noch nie Probleme damit, aber jetzt bin ich auf etwas gestoßen, wo ich nicht weiß, wie man das darstellen könnte.
Ich möchte kurz gesagt eine Beziehung als Teil des Primärschlüssels eines Entitys machen. Mein konkretes Beispiel ist wie folgt:
Ich habe mein Problem mit der gepunkteten Linie gekennzeichnet. In einem Relationen Modell besteht dieses Problem ja nicht mehr, aber in dem ER-Modell hingegen schon.
Wie kennzeichne ich nun also, dass Landesvorwahl und Vorwahl des Landes identisch sind, aber trotzdem Teil des Primärschlüssels?
2 Antworten
Land(Vorwahl, Landeskürzel)
Handynummer(ID, Nummer, Land.Vorwahl)
Somit hast du eine 1:n-Beziehung zwischen Land und Handynummer. Dass der PK der 1-Seite zum FK der n-Seite wird, ist hoffentlich bekannt.
Aber warum müsst ihr eine Handynummer als Entität und nicht als Attribut darstellen?
Dann hättest du einen zusammengesetzten PK, was nicht im Sinne eines relationalen Modells ist -> Normalisierung. Eine RDB sieht nur einen PK - also eine Spalte als PK - vor, um einen Datensatz eindeutig identifizieren zu können. Referenzielle Integrität und das ganze Zeugs kommt noch - hoffe ich :)
Aber wenn ihr das Handy als Entität habt, dann wäre doch eine Handynummer kein PK, sondern die IMEI. Nur als Tipp :)
Danke für die Erklärung! Ich hoffe doch, dass ich das ganze Zeug noch lerne, dafür studiere ich ja.
Ich war noch im Prozess, das komplette ER-Modell zu erstellen und musste jetzt doch noch die Handynummer als separates Entity machen, da noch anderer Entitys ein Relationship mit der Telefonnummer haben sollen und nicht direkt mit dem Handy und weil ein Handy mehrere Handynummern haben könnte usw.
Ich verwende sehr häufig einfach nur eine ID als PK bei meinen Entitäten, weil alles eine gewisse Ungenauigkeit hat, weiß jedoch nicht, ob ich das für gut oder schlecht befinden sollte
An dieser Stelle darfst du nicht zu theoretisch denken. Die Handynummer ist nicht dem Handy direkt zuzuordnen, sondern dem Vertragspartner. Also eure Aufgabe würde ich gerne sehen :D
IDs zu verwenden ist immer besser als ein neues Komplex zu erschaffen. In der Praxis hättest du eine Mitarbeiternummer, Personalnummer, MAC-Adresse etc.
Aber ja, das kommt noch alles :)
Die Tablle Handynummer ist doch mit dem Land n:1 zu Verknüpfen. Wo liegt das Problem? Vorwahl/Landesvorwahl ist der zu Verknüpfende Primär/Fremdschlüssel.
Ein Fremdschlülüssel kann nie ein Primärschlüssel sein, sonst können die zugehörigen Daten ja in eine Tabelle!
Aber ein Fremdschlüssel kann doch Teil des Primärschlüssels sein, oder nicht?
Man kann schon einen zusammengesetzten Primärschlüssel erstellen, ich bvorzuge aber immer einen Künstlichen. Da spätestens beim JOIN ist so nen zusammengesetzter Primärschlüssel eher zur Fehlerquelle mutiert.
Ja, da stimme ich zu; habe jetzt auch einfach eine ID als PK genommen
Ah ja, ok das kann man machen. Könnte man auch (also würde ich nicht machen, aber rein hypothetisch) den Primärschlüssel zusammengesetzt aus "Nummer" und "KollisionsID" machen (also, wenn eine Nummer doppelt ist, dann ist die KollisionsID 0 bei der ersten, 1 bei der zweiten, 2 bei der dritten, ...).
Wir müssen tatsächlich nur "Handy" als Entitätsklasse darstellen, aber damit es klarer für diese Frage wird, habe ich es zu Handynummer geändert, weil ich sonst noch erklären müsste, dass wir annehmen sollen, dass ein Handy immer die selbe Handynummer hat (also kein SIM-Karten-Switch möglich ist)