Dies ist eine interessante Frage.Auf jeden Fall müssen Sie hier Leistungsziele berücksichtigen. Wenn Sie Geschwindigkeit anstreben, ist int ein Muss. Eine Datenbank kann ganze Zahlen ein bisschen besser als Strings indizieren, obwohl ich sagen muss, dass es überhaupt keinen schlechten Performanceverlust gibt.
Ein Beispiel ist die Oracle-Datenbank selbst, wo sie den Luxus haben, Large Caps Enum als Strings auf ihren Systemtabellen zu machen. Dinge wie USER_ALLOCATION_TYPE oder solche Dinge sind die Norm. Wie du sagst, Strings können "erweiterbarer" und besser lesbar sein, aber auf jeden Fall in dem Code wirst du enden mit:
Statische letzte Zeichenkette USER_ALLOCATION_TYPE = "USER_ALLOCATION_TYPE";
anstelle von
static final int USER_ALLOCATION_TYPE = 5;
Da Sie dies entweder tun, werden Sie mit all diesen Zeichenfolgenliteralen enden, die nur für jemanden schmerzvoll sind, dorthin zu gehen und einen Buchstaben falsch zu setzen! :)
In meiner Firma verwenden wir Tabellen mit ganzen Zahlen Primärschlüssel; Alle Tische haben einen seriellen Primärschlüssel, denn selbst wenn Sie nicht glauben, dass Sie einen brauchen, werden Sie das früher oder später bereuen.
In dem Fall, den Sie beschreiben, was wir tun, haben wir eine Tabelle mit (PK Int, Beschreibung String) und dann machen wir Views über die Master-Tabellen mit Joins, um die Beschreibungen zu erhalten, auf diese Weise sehen wir die Verbundene Felder Beschreibungen, wenn wir müssen und wir halten die Leistung aufrecht.
Mit einer separaten Beschreibungstabelle können Sie EXTRA Informationen über diese IDs haben, an die Sie niemals denken würden. Nehmen wir beispielsweise an, ein Benutzer kann nur dann auf einige Felder im Kombinationsfeld zugreifen, wenn sie diese Eigenschaft haben. Sie können zusätzliche Felder in der Beschreibungstabelle verwenden, um diese anstelle von Ad-hoc-Code zu speichern.
Meine zwei Cent.
Ein Vorteil der Verwendung von Zeichenfolgen ist, dass sie einfacher zu lesen sind, wenn Sie oder jemand anderes jemals direkt mit der Datenbank arbeiten muss. Es erspart Ihnen den Aufwand, sich den Tabellen anzuschließen, die die Ints definieren, um Abfragen lesbar zu machen. Ich habe ziemlich große Implementierungen mit Strings gesehen - die Auswirkungen auf die Performance sind vernachlässigbar. –