私は同じことをやっていて、これが私がしたことです。
名前、住所、電子メール、および数値に個別のテーブルを使用し、それぞれにNameID列があり、クラスター化された主キーであるNameテーブル以外のすべての外部キーです。LastNameとFirstNameの代わりにMainNameとFirstNameを使用して、ビジネスエントリと個人エントリを許可しましたが、その必要がない場合もあります。
NameID列はすべてのテーブルでsmallintになります。これは、32,000を超えるエントリを作成しないことをかなり確信しているためです。それ以外のほとんどすべては、保存したいもの(誕生日、コメント、電子メール、本当に長い名前)に応じて、20〜200の範囲のvarchar(n)です。それは本当にあなたがどんなものを保存しているのかに依存しています。
数値表は、私がそこから逸脱している場所です。NameID、Phone#、CountryCode、Extension、PhoneTypeという5つの列があるように設定しました。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] ')。これにより、必要なものだけがデータベースに入り、データの一貫性が保たれます。拡張子と国コードはnullable smallintsと呼んでいましたが、必要に応じてvarcharにすることもできます。PhoneTypeはvarchar(20)であり、nullにすることはできません。
お役に立てれば!