Primary key als text
In der Datenbanken-Kurs, ich habe während meiner Ausbildung (ca. 4 Jahren), dachte ich, dass es empfehlenswert ist, die Vermeidung der Verwendung von Zeichenketten als Primärschlüssel den Datentyp.
Kann mir jemand sagen, was sind die vor-und Nachteile für die Wahl eines Charakter unterschiedlicher Daten-Typ für den Primärschlüssel in SQL und wie viel der oben genannten Prämisse wahr ist?
N. B.: (ich bin mit PostgreSQL Datenbank). Ich bin auch mit einer situation zu tun, wenn Sie auf Sie verweisen müssen so eine Tabelle von einer anderen, so dass sich der Fremdschlüssel auf Charakter unterschiedlicher Daten geben. Bitte nehmen Sie in Konto, das auch.
InformationsquelleAutor der Frage artaxerxe | 2013-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorteile, die Sie haben für die Wahl eines Charakter-Datentyp als ein Primärschlüssel-Feld ist, dass Sie können wählen, welche Daten es zeigen kann. Als ein Beispiel, könnten Sie die E-Mail-Adresse das key-Feld für die Benutzer-Tabelle. Das beseitigt die Notwendigkeit für eine zusätzliche Spalte ein. Ein weiterer Vorteil ist, wenn Sie eine gemeinsame Daten-Tabelle, die enthält Indizes, die von mehreren anderen Tabellen (denke, eine NOTES-Tabelle mit einer externen Referenz zu FINANZEN, KONTAKT und ADMIN-Tabellen), können Sie einfach wissen, in welcher Tabelle diese kamen aus (z.B. Ihre FINANZEN Tabelle hat einen index von F00001 -, KONTAKT-Tabelle hat einen index von C00001, etc). Ich fürchte, die Nachteile gehen, um größere größer in dieser Antwort, als ich mich gegen eine solche Vorgehensweise.
Die Nachteile sind wie folgt:
In Ihrem Fall können Sie immer noch einen Fremdschlüssel auf einen numerischen index, also ich bin mir nicht sicher, warum würden Sie wollen, es zu zwingen, eine varchar-Typ. Suchen und filtern auf ein numerisches Feld ist theoretisch schneller als ein text-Feld wie der server werden gezwungen zu konvertieren, die Daten zuerst. Allgemein gesprochen, würden Sie einen numerischen Primärschlüssel, der nicht-gruppierten, und erstellen Sie dann einen clustered key auf deine Daten Spalte, die Sie filtern viel.
Diejenigen sind die Allgemeinen Normen beim schreiben von SQL, aber wenn es um benchmarking -, Sie wird nur varchar-Spalten sind ein wenig langsamer auf den Beitritt und die Filterung als integer-Spalten. Solange Ihr Primärschlüssel nicht ändern ÜBERHAUPT, dann sind Sie in Ordnung.
InformationsquelleAutor der Antwort DFM