Frage von xeemiix, 58

Kann ein Primärschlüssel in mehreren Entitys vorkommen?

Hallo, ich sitze gerade an einem ERM und bin gerade dabei die Primärschlüssel zu setzen. Ich habe ein Entity Kunde mit dem Primärschlüssel Kunden_Nr, Entity Rechnung und Entity Bestellung, kann ich jetzt den beiden Entitys den Primärschlüssel Kunden_Nr zuweisen, oder geht das nicht?

Antwort
von Suboptimierer, 33

Eine Rechnung lässt sich nicht eindeutig am Kunden identifizieren. Deswegen könntest du höchstens die Kundennummer als Fremdschlüssel der Entität "Rechnungen" zufügen.
Innerhalb einer Entität kann es nur einen Primärschlüssel geben. Hast du einen zweiten, eindeutigen Identifikator, wird dieser als "Secondary Key" (deutsche Übersetzung ist gerade nicht präsent) bezeichnet oder einfach in der Datenbank ein Index als unique gekennzeichnet.

Kommentar von xeemiix ,

Das weiß ich auch. :D

Es gut darum, einen Primärschlüssel aus "Kunde" in "Rechnung" UND "Bestellung" zuschreiben. Ob man das machen darf !? Oder ob das generell nicht geht.

Ist ja auch logisch, dass es dort ein Fremdschlüssel ist.

Es geht um die Anzahl, wie oft ich einen Primärschlüssel aus einem Entity in ein anderes als FS schreiben kann.

Kommentar von Suboptimierer ,

Primärschlüssel werden sehr häufig mehrfach von anderen Tabellen aus referenziert. Ein Kunde kann in mehreren Tabellen auftauchen. 

Rechnungen, Bestellungen, OPs, Kontaktverlauf, Mailadressen, ...

Antwort
von wotan38, 17

Eine Datenbank wird im Hinblick auf eine Anwendung, eine Aufgabe erstellt. Eine Datenbank zu erstellen ohne die Aufgabe zu kennen ist sinnlos. Was den Primärschlüssel betrifft, der Datenbank ist es egal wie Du Deine Tabellen einrichtest und welche Primärschlüssel Du dafür verwendest. Das ist genauso, wie beim Briefeschreiben Du vom Textprogramm wissen wolltest, was Du schreiben sollst. Du bist hier der einzige, der die Aufgabe kennt und Du fragst uns, welchen Primärschlüssel Du nehmen sollst. Aus der Sicht der Datenbank kannst in jede Tabelle die Kunden-Nr als Primärschlüssel nehmen. Nur kann dann der Kunde nur eine Bestellung mit einer einzigen Rechnungsposition ordern. Willst Du das? Für die Rechnungen habe ich bei mir in meiner Datenbank einen Verbundschlüssel als Primärschlüssel, bestehend aus Kunden-Nr, Rechnungs-Nr, Rechnungs-Datum und Artikel-Nr. Wenn der Kunde einen Artikel mehrmals bestellt, geht das nur über das Feld Anzahl. Manche Datenbankphilosophien sehen in so einem Fall eine Auslagerung in eine weitere Tabelle vor, wofür ich persönlich keinen Vorteil erkennen kann. Mir reichen die 57 Tabellen, die ich in meiner Anwendung (beim Kunden installiert) habe.

Antwort
von kloogshizer, 35

Dann könntest du die Tabellen auch gleich zusammenfassen, bzw. das was telematiker gesagt hat. Die Kunden_Nr in "Bestellung" aufzunehmen macht Sinn, allerdings nicht als Primärschlüssel.

Kommentar von xeemiix ,

Naja, wäre dann ja eh ein Fremdschlüssel

Kommentar von kloogshizer ,

Ja, Ein Kunde kann mehrere Bestellungen aufgeben, aber eine Bestellung kann von nur einem Kunden aufgegeben werden. 

Kunde und Bestellung stehen damit in der 1:n Beziehung, womit die Kundentabelle unverändert bleibt, und ihr Primärschlüssel in "Bestellung" als Fremdschlüssel mit aufgenommen wird.

Kommentar von xeemiix ,

Ok


Kommentar von kloogshizer ,

gut :)

Antwort
von telematiker86, 40

Kannst du machen, aber damit kann ein Kunde nur exakt eine Bestellung und eine Rechnung haben. Überleg nochmal kurz ob das so gewollt ist.

Kommentar von xeemiix ,

Ok.

Warum kann er dann nur eine haben?

Sorry, stehe geraden ein bisschen aufm Schlauch :x

Kommentar von telematiker86 ,

Na überleg doch mal.... Wenn du jetzt eine Bestellung machst, dann weist du dieser ja dann die ID des Kunden als Schlüssel zu. Jetzt will er aber noch eine Bestellung machen, was trägst du dann als Schlüssel ein? Die KundenID geht ja nicht, weil du die schon verwendet hast. Also musst du entweder einen unabhängigen Schlüssel erstellen, oder etwas machen wie die Kombination der Kundennummer mit dem Bestellzeitpunkt. 

Es muss auf jedenfall eindeutig sein und darf sich nicht wiederholen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten