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!