Мне кажется, что у вас есть два вида категоризации, которые вам нужно учитывать.Сначала у вас есть цель контакта, то есть Дом или Офис (могут быть другие, такие как Главный офис, Экстренный контакт, Дом отдыха, ...), а другой - средство контакта, например, E-Mail, Телефон(здесь могут быть и другие, например, PIN-код BlackBerry, факс, почтовый адрес, адрес доставки, ...)
В первом случае вы хотите описать, как или почему используется контакт, а во второмЕсли вы хотите описать, какой носитель используется для установления контакта.
Их следует рассматривать отдельно, поскольку они будут управлять различными функциями приложения.Например, у вас может быть некоторый код графического интерфейса пользователя, который представляет разные поля и требует различных изменений в зависимости от того, захватываете ли вы почтовый адрес, почтовый адрес или номер телефона и т. Д. Аналогично, у вас могут быть бизнес-правила, согласно которым контакт Office является обязательным.и Домашний контакт необязателен.
Вот краткий набросок схемы, которая позволяет выполнить следующие классификации:

Таблица CUSTOMER (радииллюстрация) содержит людей, с которыми вы хотите связаться.Таблица CONTACT содержит актуальную информацию, необходимую для связи с клиентом.Вы можете использовать общий дизайн или что-то вроде данных XML, чтобы структурировать это в зависимости от ваших потребностей.Два типа категоризаций управляются таблицами следующим образом:
CONTACT_PURPOSE сообщает, почему будет использоваться контакт.Это ваш дом / офис / ... классификация.В основном это справочная таблица, но в ней могут быть некоторые правила, например, является ли контакт обязательным.
CONTACT_FORMAT сообщает вам структуру контакта.Это ваша электронная почта / телефон / адрес / ... классификация.Это будет элемент таблицы поиска, но он также может содержать правила структурирования контактных данных, например, сколько полей?Насколько велико каждое поле?Какой шаблон регулярного выражения используется для проверки содержимого контакта и т. Д.