Как грамотно разработать базу данных?
1. Выделяем все необходимые сущности (объекты)
2. Определяем набор полей для сущностей
3. После того, как сущности созданы, производим их нормализацию — минимум к 3ей форме привести надо
4. Снова заглядываем в тех. задание и примерно накидываем возможные запросы, выделяем тяжелые запросы (те, которые тянут много данных, или которые жойнят много таблиц) и пытаемся переделать структуру БД так, чтобы упростились запросы. Здесь остановочка: чаще всего основными запросами являются SELECTы, но бывает что SELECT делается относительно редко и намного более важен быстрый INSERT данных, плясать надо отсюда.
5. Снова критически оцениваем структуру, и снова кидаем примерные запросы. Внимательно смотрим на INSERTы. Смотрим, какие INSERTы можно вынести в триггеры. Накидываем примерное тело триггера, рихтуем структуру под него
6. Снова критически оцениваем структуру, смотрим чего у нас не хватает. Пытаемся часть SELECTов вынести в View, а часть в хранимые процедуры
7. Снова критически оцениваем получившуюся кашу. Что-то поправляем, вспоминаем что мы упустили что-то ещё. Возвращаемся к пункту 3.
8. После того, как нам кажется что все сделано, описываем каждую таблицу и поле словами, подробно расписываем что и для чего мы сделали, где что оптимизировали и для чего.
9. На следующее утро смотрим снова свою структуру, ужасаемся. Вспоминаем что вчера сделали описание. Внимательно читаем, понимаем что мы упустили кое-что ещё. Поправляем, дополняем.
10. Несем структуру соседнему программисту и пытаемся ему объяснить flow of data. Когда до него наконец-то все дойдет, спрашиваем что бы он мог переделать. Он дает советы, после которых выдумаете что «это ведь было очевидно». Снова все переделываем.
11. Когда сосед-программист от вас устал и послал нахуй согласился с вашей структурой, открываем администратор БД, накидываем схему, проставляем ключи. Снова понимаем что что-то упустили. Снова переделываем структуру.
12. Измучанный и злой ложишься спать. Утро вечера мудренее :)

© me
Спасибо всем )