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