Майкл Джексон (не , что один) , как известно, сказал, что ,
- Первое правило оптимизации программы: не делайте этого.
- Второе правило оптимизации программы - только для экспертов: пока не делайте этого.
Это было, вероятно, до появления СУБД, но я думаю, что он расширил бы Правила, чтобы включить их.
Выбор нескольких таблиц почти всегда необходим для нормализованной модели данных; как это часто бывает с такого рода вопросом, «правильный» ответ на «денормализацию?» Вопрос зависит от нескольких факторов.
Платформа СУБД.
Относительная производительность запросов к нескольким таблицам зависит от платформы, на которой работает ваше приложение: уровень сложности оптимизаторов запросов может варьироваться. Например, MySQL, по моему опыту, очень быстро работает с запросами из одной таблицы, но не очень хорошо оптимизирует запросы с несколькими объединениями. Это не настоящая проблема с меньшими таблицами (скажем, менее 10 000 строк), но на самом деле больно с большими (более 10 миллионов) таблицами.
Объем данных
Если вы не смотрите на таблицы в области строк размером более 100K, проблем быть не должно. Если вы посмотрите на размеры таблиц в сотнях строк, я бы даже не стал задумываться об индексации.
(Де-) нормализация
Весь смысл нормализации состоит в том, чтобы минимизировать дублирование, чтобы убедиться, что любое значение поля, которое должно быть обновлено, должно быть изменено только в одном месте. Денормализация нарушает это, что не является большой проблемой, если обновления дублированных данных редки (в идеале они никогда не должны происходить). Поэтому очень тщательно подумайте, прежде чем дублировать что-либо, кроме самых статических данных. Обратите внимание, что ваша база данных может значительно вырасти
Требования / Ограничения
Каким требованиям к производительности вы пытаетесь соответствовать? У вас есть фиксированное оборудование или бюджет? Иногда повышение производительности может быть наиболее легко - и даже самым дешевым - достигнуто с помощью обновления оборудования. Какие объемы транзакций вы ожидаете? Система бухгалтерского учета для малого бизнеса имеет совершенно иной профиль, например, для Twitter.
Одна последняя мысль поражает меня: если вы достаточно денормализуете, чем ваша база данных отличается от плоского файла? SQL превосходен для гибких данных и многомерного переноса, но он может быть на порядок (как минимум) медленнее, чем прямой последовательный или довольно просто проиндексированный файл.