Вопрос с дублирующими мейлами Яндекса закрываем - останавливаемся на проверке и приведению к ya.ru при сохранении в базу.
С остальным особенно с разделением сущностей, пока остается не понятным.
В том числе:
Нужно организовать вывод персон, компаний, поиск, по всем полям, проверка и объединение дубликатов по mail/phone и т.д. поиск то телефонам/мейлам на вывод и компаний и персон, по компаниям возможность увидеть связанных с ней персон. компаний
Синхронизацию с другой базой - если у связь этого телефона/мейла и т.д. is_builder = 0, а у них is_builder = 1, то при синхронизации у нас меняем на is_builder = 1, не знаю куда лучше это поле к персоне или хранилищу
Итак вкратце, как все же лучше проектировать базу
Таблица - contact
Таблицы - contact_person и contact_company
Таблицы - contact_phone, contact_email и contact_social
Я правильно понял, что для выполнения этих задач делать связку где главная contact, а от нее идут к примеру contact_person и contact_phone
--- Добавлено 24/01/2018 ---
В общем для себя решил так сделать, делюсь может кому поможет
Таблица - contact для связки
В ней тип (person/company) и его ID
C другой стороны тип(phone/email/social) и его ID