Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
892
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2598
0
Как грамотно разработать базу данных?
Просмотров: 387
 
Ответов: 7
Всегда при разработке нового проекта возникает вопрос как грамотно разработать базу данных в MySQL так что бы она хорошо справлялась с нагрузками и удобно было пользоваться. К примеру, есть пользователи, есть контактная инфа о пользователях, компания, привязки компаний к пользователям, транзакции, счета и т.д. ) может быть есть методика, статья, софт?
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
Нас в ККЭП учили так:
- Предметная область. Описываем (лучше не в уме) простым русским языком — что мы моделируем. База данных всегда является моделью чего-то в реальности. Укрупненно основные объекты и связи между ними, без деталей. Инструмент — MS Word, notepad, Бумагаручкамозг.
- Создаем концептуальную модель. Уже можно порисовать рисунки в ворде.
- Далее идет логическая модель данных — в ней уже есть эмбрионы будущих таблиц, с именами полей и связями между ними. Тут уже указываем тип связей — 1:1, 1:n, m:n. Тут уже можно порисовать в простом графическом редакторе или на доске.
- Далее предпоследний этап — физическая модель данных, когда указываем типы полей. На этом этапе наименее мучительно использовать UML-схемы, например с помощью StarUML.
- И последний, но циклический этап — нормализация данных. Выясням, какие данные избыточны и повторяются, и выносим их в отдельную таблицу. На этом этапе уже можно подключать PHPMyAdmin или схожую утилиту и создавать непосредственно таблицы на сервере.
- Если перестарались — система может работать медленно, и можно кое-где сделать денормализацию. Тут уже помогут нагрузочное тестирование и опыт.
- ???????
- PROFIT
Если предметная область (ваша задача) простые, некоторые шаги можно делать в уме.
Такой подход был применён не раз вживую оказался полезным.
- Предметная область. Описываем (лучше не в уме) простым русским языком — что мы моделируем. База данных всегда является моделью чего-то в реальности. Укрупненно основные объекты и связи между ними, без деталей. Инструмент — MS Word, notepad, Бумагаручкамозг.
- Создаем концептуальную модель. Уже можно порисовать рисунки в ворде.
- Далее идет логическая модель данных — в ней уже есть эмбрионы будущих таблиц, с именами полей и связями между ними. Тут уже указываем тип связей — 1:1, 1:n, m:n. Тут уже можно порисовать в простом графическом редакторе или на доске.
- Далее предпоследний этап — физическая модель данных, когда указываем типы полей. На этом этапе наименее мучительно использовать UML-схемы, например с помощью StarUML.
- И последний, но циклический этап — нормализация данных. Выясням, какие данные избыточны и повторяются, и выносим их в отдельную таблицу. На этом этапе уже можно подключать PHPMyAdmin или схожую утилиту и создавать непосредственно таблицы на сервере.
- Если перестарались — система может работать медленно, и можно кое-где сделать денормализацию. Тут уже помогут нагрузочное тестирование и опыт.
- ???????
- PROFIT
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться