Ich richte eine sehr kleine MySQL-Datenbank ein, in der Vorname, Nachname, E-Mail-Adresse und Telefonnummer gespeichert sind, und habe Probleme, für jedes Feld den „perfekten“ Datentyp zu finden. Ich weiß, dass es keine perfekte Antwort gibt, aber es muss eine gemeinsame Konvention für häufig verwendete Felder wie diese geben. Zum Beispiel habe ich festgestellt, dass eine unformatierte US-Telefonnummer zu groß ist, um als vorzeichenloses Int gespeichert zu werden. Es muss mindestens ein Bigint sein.
Da ich sicher bin, dass andere Leute dies wahrscheinlich nützlich finden würden, möchte ich meine Frage nicht nur auf die oben genannten Felder beschränken.
Welche Datentypen sind für allgemeine Datenbankfelder geeignet? Felder wie Telefonnummer, E-Mail und Adresse?
Hier sind einige gängige Datentypen, die ich verwende (ich bin allerdings kein großer Profi):
quelle
Nach meiner Erfahrung sollten Vor- / Nachnamenfelder mindestens 48 Zeichen lang sein - es gibt Namen aus einigen Ländern wie Malaysia oder Indien, die in ihrer vollständigen Form sehr lang sind.
Telefonnummern und Postleitzahlen sollten Sie immer als Text behandeln, nicht als Nummern. Der normale Grund dafür ist, dass es Postleitzahlen gibt, die mit 0 beginnen, und in einigen Ländern können Telefonnummern auch mit 0 beginnen. Der wahre Grund ist jedoch, dass es sich nicht um Nummern handelt - es handelt sich um Kennungen , die zufällig erfunden werden von numerischen Ziffern (und das ignoriert Länder wie Kanada, deren Postleitzahlen Buchstaben enthalten). Speichern Sie sie also in einem Textfeld.
In MySQL können Sie VARCHAR-Felder für diese Art von Informationen verwenden. Es klingt zwar faul, bedeutet aber, dass Sie sich nicht zu viele Gedanken über die richtige Mindestgröße machen müssen.
quelle
VARCHAR(255)
sinnvoll.Da Sie mit Daten variabler Länge (Namen, E-Mail-Adressen) arbeiten, möchten Sie VARCHAR verwenden. Der von einem VARCHAR-Feld belegte Speicherplatz beträgt
[field length]
+ 1 Byte, bis zu einer maximalen Länge von 255, sodass ich mir keine Sorgen darüber machen muss, eine perfekte Größe zu finden. Schauen Sie sich an, was Ihrer Meinung nach die längste Länge sein könnte, verdoppeln Sie es und legen Sie es als Ihr VARCHAR-Limit fest. Das gesagt...:Ich habe E-Mail-Felder im Allgemeinen auf VARCHAR (100) gesetzt - ich habe noch kein Problem damit. Namen, die ich auf VARCHAR (50) gesetzt habe.
Wie die anderen gesagt haben, sind Telefonnummern und Postleitzahlen keine numerischen Werte, sondern Zeichenfolgen mit den Ziffern 0-9 (und manchmal auch mehr!). Daher sollten Sie sie als Zeichenfolge behandeln. VARCHAR (20) sollte ausreichend sein.
Beachten Sie, dass viele Systeme davon ausgehen, dass eine Zahl, die mit 0 beginnt, eine Oktalzahl (Basis 8) ist, wenn Sie Telefonnummern als Ganzzahlen speichern! Daher wird die einwandfreie Telefonnummer "0731602412" als Dezimalzahl "124192010" in Ihre Datenbank aufgenommen !!
quelle
Ich mache ungefähr das Gleiche und hier ist, was ich getan habe.
Ich habe separate Tabellen für Name, Adresse, E-Mail-Adresse und Nummern verwendet, jede mit einer NameID-Spalte, die ein Fremdschlüssel für alles ist, außer für die Name-Tabelle, für die es sich um den primären Clusterschlüssel handelt. Ich habe MainName und FirstName anstelle von LastName und FirstName verwendet, um sowohl geschäftliche als auch persönliche Einträge zuzulassen, aber das ist möglicherweise nicht erforderlich.
Die NameID-Spalte wird in allen Tabellen zu einer Kleinigkeit, da ich ziemlich sicher bin, dass ich nicht mehr als 32000 Einträge machen werde. Fast alles andere ist varchar (n) und reicht von 20 bis 200, je nachdem, was Sie speichern möchten (Geburtstage, Kommentare, E-Mails, wirklich lange Namen). Das hängt wirklich davon ab, welche Art von Material Sie aufbewahren.
In der Zahlentabelle weiche ich davon ab. Ich habe es so eingerichtet, dass es fünf Spalten mit den Namen NameID, Telefonnummer, CountryCode, Nebenstelle und Telefontyp enthält. Ich habe bereits über NameID gesprochen. Telefonnummer ist varchar (12) mit einer Prüfbedingung, die ungefähr so aussieht: CHECK (Telefonnummer wie '[0-9] [0-9] [0-9] - [0-9] [0-9] [0 -9] - [0-9] [0-9] [0-9] [0-9] '). Dies stellt sicher, dass nur das, was ich will, in die Datenbank gelangt und die Daten sehr konsistent bleiben. Die Nebenstellen- und Ländercodes nannte ich nullable smallints, aber diese könnten varchar sein, wenn Sie wollten. PhoneType ist varchar (20) und kann nicht auf Null gesetzt werden.
Hoffe das hilft!
quelle