Wie erstellen Sie eine Beziehung zu einem Nicht-Primärschlüssel in SQL Server?

8

Ich habe eine Benutzertabelle mit zwei Spalten, einem Primärschlüssel namens UserID und einer weiteren Spalte namens UserName.

  • UserID (int) PK
  • Benutzername (varchar (256)

Sie sind beide einzigartig, aber ich habe mich aus Gründen entschieden, den Benutzernamen als Referenz in anderen Tabellen zu verwenden. So enthält die Auftragstabelle beispielsweise einen Verweis auf user by UserName not userid.

  • Auftragsnummer
  • Nutzername

Ich möchte eine Beziehung zwischen allen Tabellen erstellen, die auf den Benutzernamen und die Benutzertabelle verweisen, damit ich die Kaskadenaktualisierungs- / Löschfunktion von SQL Server erhalte.

Mit SQL Server kann ich jedoch keine Beziehung für eine Nicht-Primärschlüsselspalte erstellen. Gibt es eine Möglichkeit, die Funktion zum Aktualisieren / Löschen von Kaskaden zu erhalten, ohne die Benutzertabelle so zu ändern, dass Benutzername der Primärschlüssel und nicht Benutzer-ID ist?

Shrage Smilowitz
quelle

Antworten:

13

Erstellen Sie einen eindeutigen Index oder eine eindeutige Einschränkung, UserNameund verweisen Sie darauf in einer FK-Einschränkungsstrafe.

Ihre Aussage, dass

Mit SQL Server kann ich keine Beziehung für eine Nicht-Primärschlüsselspalte erstellen

ist falsch. SQL Server kümmert sich nur darum, dass für die an der FK-Beziehung beteiligten Spalten ein eindeutiger Index definiert ist.

Martin Smith
quelle
1
Sie haben Recht, meine Aussage basierte auf der Fehlermeldung, die ich vom SQL Server erhalten habe, als ich versuchte, die Beziehung zu erstellen.
Shrage Smilowitz