Sollte ich einen Fremdschlüssel oder characterkettenwert aus der Fremdtabelle verwenden?

Sagen wir, Sie haben eine Angestelltentabelle und eine Joblistentabelle. Jeder Mitarbeiter muss einen Job in der Tabelle haben. Normalerweise würde ich jedem Job eine ID geben und sie als Fremdschlüssel in der Mitarbeitertabelle referenzieren. Einer meiner Kollegen hat jedoch vorgeschlagen, dass wir die Joblistentabelle als dictionary verwenden und dass wir vor dem Einfügen / Aktualisieren prüfen, ob der Jobtyp in der Tabelle vorhanden ist, und fügen Sie den Jobtyp als String in die Mitarbeitertabelle ein.

Soweit ich das beurteilen kann

die Profis:

Schnellere Auswahl (obwohl ein Join auf einem Primärschlüssel einen marginalen Unterschied machen sollte)

Die Nachteile:

Langsamer Auswahl von Mitarbeitern nach Art des Jobs
Schwieriger, einen Job-Typ zu ändern

Welcher der oben genannten Ansätze ist am besten?

Ich bin mir nicht sicher, ob ich verstehe, warum es einen Konflikt gibt. Sie sind sich bewusst, dass Schlüssel, sowohl primäre als auch fremde, genauso leicht characterfolgen wie Zahlentypen sein können? Sie können die Vorteile beider Systeme nutzen, indem Sie das Feld Jobtyp zum Primärschlüssel in der Tabelle der Jobtypen und den Fremdschlüssel in der Tabelle employee machen.

Der Vorteil dieses Ansatzes besteht darin, dass Sie die Jobtyptabelle nicht an die employee-Tabelle anfügen müssen, um einen beschreibenden Namen für den Jobtyp zu erhalten, während Sie weiterhin die database verwenden, um die für Ihre database wichtige referenzielle Integrität bereitzustellen Design.

Der Nachteil besteht darin, dass Sie bei einer sehr großen Anzahl von Mitarbeitern ein wenig mehr memoryressourcen verwenden und dass Sie die Änderungen über die employee-Tabelle kaskadieren müssen, wenn Sie die Jobbeschreibung ändern.

Es ist zwar üblich, Integer als Primärschlüssel zu verwenden (und einige Frameworks erfordern dies), aber es gibt keine Regel, die besagt, dass es so sein muss.

Wenn es schwieriger wird, die Job-Typen zu verwalten (was ich annehme, ist etwas, was Sie oder jemand anderes tun wird), wäre es das wirklich wert für eine kleine performancessteigerung? Es klingt auch so, als würde es die Dinge für eine kleine Belohnung übermäßig komplizieren. Ich würde sagen, dass es am besten ist, der Einfachheit halber mit einem Fremdschlüssel zu bleiben.