Я делаю то же самое, и вот что я сделал.
Я использовал отдельные таблицы для имени, адреса, адреса электронной почты и номеров, каждая из которых имела столбец NameID, который является внешним ключом для всего, кроме таблицы Name, для которой он является основным кластеризованным ключом. Я использовал MainName и FirstName вместо LastName и FirstName, чтобы разрешить как деловые записи, так и личные записи, но вам это может не понадобиться.
Столбец NameID становится маленьким шрифтом во всех таблицах, потому что я вполне уверен, что не буду делать больше 32000 записей. Почти все остальное - varchar (n) в диапазоне от 20 до 200, в зависимости от того, что вы хотите хранить (дни рождения, комментарии, электронные письма, действительно длинные имена). Это действительно зависит от того, какие вещи вы храните.
Таблица чисел - это то, где я отклоняюсь от этого. Я настроил его на пять столбцов с именами NameID, Phone #, CountryCode, Extension и PhoneType. Я уже обсуждал NameID. Phone # - это varchar (12) с проверочным ограничением, которое выглядит примерно так: CHECK (Phone # like '[0-9] [0-9] [0-9] - [0-9] [0-9] [0 -9] - [0-9] [0-9] [0-9] [0-9]). Это гарантирует, что только то, что я хочу, попадает в базу данных, и данные остаются очень согласованными. Коды добавочных номеров и кодов стран, которые я назвал пустыми строчками, могут быть varchar, если хотите. PhoneType имеет тип varchar (20) и не может быть обнуляемым.
Надеюсь, это поможет!