Я пытаюсь создать приложение для контактов, в котором есть две основные сущности - личность и компания. Человек может иметь много адресов электронной почты, номеров и адресов. Компания также может иметь много адресов электронной почты, номеров и адресов. Я пытаюсь определить правильный дизайн для этого сценария.
Опция № 1 - несколько внешних ключей
Электронные письма, номера и адреса будут иметь два столбца с именами person_id и company_id. В зависимости от того, к какому объекту принадлежат данные, один из них будет нулевым, а другой будет содержать идентификатор, ссылающийся на родителя.
Вариант № 2 - одна таблица для каждого типа на объект
Я дублирую каждую таблицу, чтобы была таблица company_addresses и таблица person_addresses. У меня было бы вдвое больше таблиц, но сейчас это решение имеет смысл.
Вариант № 3 - одна таблица ссылок
Я создаю одну таблицу - «ссылка». Эта таблица будет содержать четыре столбца: source_id, source_entity, dest_id, dest_entity. Поэтому, если компания получает новый номер, у вас будет такая строка: 1, номер, 2, компания.
Опция № 4 - таблицы с несколькими ссылками
Я создаю таблицу для каждого типа ссылки (company_address, person_address, company_email, person_email и т. Д.)
Какой вариант вы бы выбрали?