Ich möchte eine Datenbank für meine Anwendung entwerfen, und ich habe eine Frage über die Möglichkeit, eine Beziehung zwischen den Entitäten zu definieren.Datenbank-Design: Definieren einer Beziehung zwischen Entitäten in der Datenbank
Ich habe 2 verwandte Entitäten, deren ID Verbindung ist. Zum Beispiel:
- eine Adresse Einheit, die durch die Eigenschaften [Hausnummer, Hausnummer, Stadt, Land], und eine Telefonnummer (xx-yyyyyy)
- ein Unternehmen identifiziert werden, die durch die Eigenschaften identifiziert [Regionsnummer, die Nummer].
Die Beziehung ist „Für jede Adresse gibt es mehrere Telefonnummern Ich habe zwei Möglichkeiten, um die Tabellen zu definieren.
- Tabellen, die von allen ID-Felder verbunden
- Adresse → [Hausnummer, Hausnummer, Stadt, Land, ..., Regionalnummer, die Nummer]
- PhoneNumber → [Regionsnummer, die Nummer, ...]
- Tabellen mit einem ID-Feld (GUID), das über dieses Feld verbunden ist.
- Adresse → [ID, Hausnummer, Hausnummer, Stadt, Land, ...,]
- Phone → [ID, Region Nummer, die Nummer, ..., AddressID]
In der ersten Lösung sind der Primärschlüssel alle Felder, die die Entität identifizieren, und in der zweiten Lösung ist der Primärschlüssel nur das ID-Feld.
Meine Frage ist - was ist der bessere Weg? (Durch Leistung, Wartung, Design, etc ...)
In meiner ersten Ansatz ist der Schlüssel nicht alle Felder in der Tabelle, es sind nur die Schlüssel, die die Tabelle mit der anderen Tabelle verbindet. Wenn ich den zweiten Ansatz verwende, muss ich eine Eindeutigkeitseinschränkung für alle Felder hinzufügen, die logisch einen Primärschlüssel bilden. Ich schätze, wenn ich eine Eindeutigkeitsbedingung hinzufüge, dann muss ich auch einen Index für diese Felder hinzufügen, da die Eindeutigkeit ohne Index langsam ist (richtig?). Übrigens, in meinem Szenario wird die ID nie aktualisiert, also schien es richtig zu sein, diese Felder als primär zu definieren. – Andy
Sie sind nicht sehr klar, auf welchem Ihrer Felder * sind * Schlüssel dann. Vielleicht solltest du die Frage bearbeiten, um die Felder, die du für wichtig halten möchtest, fett oder ähnlich zu machen, weil ich deine Idee # 1 nicht verstehe. In Ihrer Idee # 2 machen Sie es falsch herum: Indem Sie eine PhoneNumberID in der Adresstabelle definieren, stellen Sie Ihr Datenmodell für mehrere Adressen pro Telefonnummer ein. – Tomalak