Как грамотно разработать базу данных?

Всегда при разработке нового проекта возникает вопрос как грамотно разработать базу данных в MySQL так что бы она хорошо справлялась с нагрузками и удобно было пользоваться. К примеру, есть пользователи, есть контактная инфа о пользователях, компания, привязки компаний к пользователям, транзакции, счета и т.д. ) может быть есть методика, статья, софт?
  • Вопрос задан
  • 4341 просмотр
Решения вопроса 1
@SSoft
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
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@exaide
Материала по этой теме много даже в пределах рунета. Но для начала желательно почитать про нормализацию и функциональные зависимости. Примеры хорошего проектирования можно подсмотреть в опенсорсных проектах, например, в багзилле.
Ответ написан
Комментировать
netAn
@netAn
Нас в ККЭП учили так:
  • Предметная область. Описываем (лучше не в уме) простым русским языком — что мы моделируем. База данных всегда является моделью чего-то в реальности. Укрупненно основные объекты и связи между ними, без деталей. Инструмент — MS Word, notepad, Бумагаручкамозг.
  • Создаем концептуальную модель. Уже можно порисовать рисунки в ворде.
  • Далее идет логическая модель данных — в ней уже есть эмбрионы будущих таблиц, с именами полей и связями между ними. Тут уже указываем тип связей — 1:1, 1:n, m:n. Тут уже можно порисовать в простом графическом редакторе или на доске.
  • Далее предпоследний этап — физическая модель данных, когда указываем типы полей. На этом этапе наименее мучительно использовать UML-схемы, например с помощью StarUML.
  • И последний, но циклический этап — нормализация данных. Выясням, какие данные избыточны и повторяются, и выносим их в отдельную таблицу. На этом этапе уже можно подключать PHPMyAdmin или схожую утилиту и создавать непосредственно таблицы на сервере.
  • Если перестарались — система может работать медленно, и можно кое-где сделать денормализацию. Тут уже помогут нагрузочное тестирование и опыт.
  • ???????
  • PROFIT

Если предметная область (ваша задача) простые, некоторые шаги можно делать в уме.
Такой подход был применён не раз вживую оказался полезным.
Ответ написан
@yetanotherape
Думаю начать надо с выделения сущностей и нормализации. Исходя из запросов (хорошенько проексплейнив) следует расставить индексы. Если и этого не хватит — задуматься над денормализацией.
Ответ написан
Комментировать
evgenyk
@evgenyk
Картина неполная.
Где заказчик, который непременно хочет внедрить свои умные мысли в структуру таблиц/полей БД?
Ответ написан
afiskon
@afiskon
Вот еще по теме eax.me/database-design
Ответ написан
Комментировать
vitovt
@vitovt Автор вопроса
Спасибо всем )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы