Первым приоритетом в разработке базы данных является эффективность.Было бы неявное определение того, принадлежит ли адрес пользователю или группе при использовании стратегии с одной таблицей для сохранения всех адресов.
Поскольку вам не нужно распознавать, какие адреса являются желаемым набором(пользователи или группы), стратегия с двумя таблицами - это более простой способ программирования и предотвращение написания неправильного кода (SQL).
Например, нам нужны данные из адресов пользователей:
SELECT * FROM user_address WHERE <other conditions>; // The two-table strategy
/**
* The one-table strategy
*/
SELECT * FROM all_addresses
WHERE user_id IS NOT NULL
AND <other conditions>;
Более того, производительность была бы лучше, если бы мы использовали две таблицы для сохранения адресов независимо от того, какие адреса нужны.
В стратегии с одной таблицей, возможно, условие "НЕ НУЛЬ"не будет оптимизирован, даже если в этом столбце есть индекс (зависит от систем баз данных).Объединение - это еще один способ распознавания адресов пользователей в стратегии «за одним столом», но при этом требуется больше усилий, чем в другой стратегии.
Однако стратегия «за одним столом» имеет свои преимущества в производительности.Если нам нужно собрать все адреса (независимо от пользователей или групп) и этот тип операций является узким местом производительности системы, вы можете рассмотреть возможность использования стратегии с одной таблицей.