Мое мнение, хотя оно и стоит, заключается в том, что для повышения производительности вы можете сделать де-нормализацию, а только , если у вас действительно есть проблема с производительностью. Я всегда проектирую для 3NF и возвращаюсь только в случае крайней необходимости.
Это не то, что вы делаете, чтобы ваши запросы выглядели лучше. Любой приличный разработчик баз данных не будет бояться умеренно сложного оператора SQL, хотя я должен признать, что видел несколько многострочных операторов, которые вызывали у меня дрожь - заметьте, это были клиенты, которые не контролировали схему: Администратор БД сначала перепроектировал бы схему, чтобы избежать такого уродства.
Но, пока вы довольны ограничениями, налагаемыми ненормализацией, вы можете делать все, что захотите. Это не так, как будто группа 3NF полиции бродит по планете в поисках нарушителей: -)
Я вижу следующие непосредственные ограничения (могут быть и другие):
- Вы будете ограничены (изначально без изменения схемы) пятью телефонными номерами в каждом местоположении. Из вашего описания не видно, что вы видите это как проблему.
- Вы будете тратить пространство на хранение данных, которых там не должно быть. Другими словами, каждая строка использует пространство для пяти чисел независимо от того, что они на самом деле имеют, хотя это влияние, вероятно, минимально (например, если они varchar и nullable).
- Ваши запросы для поиска номера телефона будут сложными, так как вам придется проверить пять разных столбцов. Является ли это одним из ваших вариантов использования, я не знаю, так что это может быть неактуально.
Возможно, вам следует выбрать тот или иной путь, хотя (я не уверен, что это ваше намерение здесь). Я был бы особенно раздражен, если бы наткнулся на схему с телефонными номерами в таблице магазинов и в отдельной таблице телефонных номеров, особенно , если они не согласились друг с другом. Даже когда я отменяю нормализацию, я склонен использовать триггеры вставки / обновления, чтобы обеспечить согласованность данных.