Философский ответ: Субоптимальные (реляционные) базы данных изобилуют аномалиями вставки, обновления и удаления. Все это приводит к противоречивым данным, что приводит к низкому качеству данных. Если вы не можете доверять точности своих данных, что хорошего в этом? Задайте себе вопрос: хотите ли вы правильные ответы медленнее или хотите неправильные ответы быстрее?
С практической точки зрения: сделайте это правильно, прежде чем быстро. Мы, люди, очень плохо предсказываем, где возникнут узкие места. Сделайте базу данных великолепной, измерьте производительность за приемлемый период времени, а затем решите, нужно ли вам сделать это быстрее. Прежде чем денормализовать и пожертвовать точностью, попробуйте другие методы: можете ли вы получить более быстрый сервер, соединение, драйвер БД и т. Д.? Могут ли хранимые процедуры ускорить процесс? Как индексы и их коэффициенты заполнения? Если те и другие методы производительности и настройки не справляются, только тогда рассмотрите возможность денормализации. Затем измерьте производительность, чтобы убедиться, что вы получили увеличение скорости, за которое вы «заплатили». Убедитесь, что вы выполняете оптимизацию, а не пессимизацию.
[править]
Q: Так что, если я оптимизирую в последний раз, можете
рекомендовать разумный способ миграции
данные после схемы меняются? Если,
например, я решил избавиться от
справочная таблица - как я могу мигрировать
существующие базы данных для этого нового дизайна?
A: Конечно.
- Сделайте резервную копию.
- Сделайте еще одну резервную копию на другое устройство.
- Создание новых таблиц с помощью команд типа «выбрать в новую таблицу из старой таблицы ...». Вам нужно будет выполнить несколько объединений, чтобы объединить ранее отдельные таблицы.
- Удалите старые таблицы.
- Переименуйте новые таблицы.
НО ... рассмотрим более надежный подход:
Создайте несколько представлений для ваших полностью нормализованных таблиц прямо сейчас. Эти представления (виртуальные таблицы, «окна» в данных ... спросите меня, хотите ли вы узнать больше об этой теме) будут иметь тот же определяющий запрос, что и третий шаг выше. Когда вы пишете свое приложение или логику уровня БД, используйте представления (по крайней мере, для доступа для чтения; обновляемые представления ... ну, это интересно). Затем, если вы денормализуетесь позже, создайте новую таблицу, как указано выше, удалите представление, переименуйте новую базовую таблицу, какой бы она ни была. Ваше приложение / уровень DB не будет знать разницу.
На самом деле это еще не все на практике, но это должно помочь вам начать.