Я часто задаюсь вопросом, правильно ли я применяю подход, пытаясь спланировать будущее расширение при создании баз данных и отношений.
У меня следующая ситуация:
У меня есть таблица
Donor
и таблицаRecipient
. Обе таблицы совместно используют общую информацию, такую какfirst_name
,last_name
,email_address
,date_of_birth
и т. д. Похоже, обе таблицы, если вы извините мой объектно-ориентированный язык, имеют общий абстрактный типPerson
. Вполне возможно, что кто-то, кто когда-то былRecipient
, позже может статьDonor
, сделав пожертвование, поэтому важно, чтобы информация не дублировалась в разных таблицах. Должен ли я выбрать шаблон наследования или просто внешний ключDonor
s иRecipient
s для таблицыPerson
?Первоначально я думал просто сопоставить такие свойства, как
email_address
и адреса улиц, непосредственно с вещами, которые в них нуждаются, но затем может возникнуть вероятность того, что у человека будет несколько адресов электронной почты или почтовых адресов (например: домашний, рабочий и т. д.) . Это означает, что у нас есть примерно такая модель:create table person(id int primary key auto increment, ..., default_email_address); create table email_address(id int primary key auto increment, email varchar(255), name varchar(255), is_default bool, person_id int);
Это немного усложняет ситуацию, как вы можете себе представить. Поле
name
также включает в себя список значений по умолчанию, а также возможность пользовательского ввода. Я не могу просто сделать его полем enum, потому что существует вероятность того, что у кого-то будет много электронных писем, которые нужно добавить, и все они могут быть разными... !?!?" и разочароваться в проекте)
Я предполагаю, что на самом деле это сводится к следующему: в какой момент нормализация данных становится смехотворной? Моя цель здесь — создать действительно хорошую модель данных с максимально возможной совместимостью, которую я не буду корить себя за создание позже.