Организация базы данных MySQL - PullRequest
5 голосов
/ 31 декабря 2010

Я разрабатываю приложение, которое потребует от меня создания моей первой крупномасштабной базы данных MySQL.В настоящее время я испытываю затруднения, обсуждая лучший способ его организации.Кто-нибудь может порекомендовать какие-либо материалы для чтения, которые показывают разные способы организации базы данных MySQL для разных целей?

Я не хочу пытаться вдаваться в подробности того, что, как мне кажется, будут основными компонентами базы данных, потому что яне уверен, что смогу выразить это достаточно ясно, чтобы быть полезным на этом этапе.Вот почему я просто ищу общие ресурсы по организации баз данных MySQL.

Ответы [ 4 ]

6 голосов
/ 31 декабря 2010

Способ, которым я научился работать с этими вещами, заключается в том, чтобы останавливать и создавать ассоциации.

В более объектно-ориентированных языках (я полагаю, вы используете PHP?), Которые вынуждают ОО, вы учитесь думатьОО очень быстро, что-то вроде того, что вам нужно.

Мой рабочий процесс выглядит так:

  1. Определите, какие данные вам нужно хранить.(Имя клиента и т. Д.)
  2. Определите основные объекты, с которыми вы работаете (например, Клиент, Заказ, Продавец и т. Д.), И назначьте каждому из них ключ (например, Идентификатор клиента).
  3. Определите, какие данные подключаются к каким объектам.(Имя клиента принадлежит клиенту)
  4. Выясните, как основные объекты соединяются друг с другом (Продавец продал заказ Клиенту)

После того, как они у вас есть, у вас есть хороший объектмодель того, что вы после.Следующий шаг - посмотреть на связи.Например:

  • У каждого покупателя есть только одно имя.
  • Каждый продукт может быть продан кому угодно несколько раз
  • В каждом заказе только один продавец и один покупатель.

После того, как вы это разработали, вы захотите попробовать что-то под названием normalization , которое является искусством переноса этого набора данных в список таблиц, при этом минимизируя избыточность.,(Идея состоит в том, что один-к-одному (имя клиента) хранится в таблице с идентификатором клиента, многие к одному, один ко многим и многие ко многим хранятся в отдельных таблицах с определенными правилами)

В этом и заключается суть, если вы попросите об этом, я отсканирую вам примерный лист из моего рабочего процесса.

4 голосов
/ 31 декабря 2010

Может быть, я могу дать несколько советов на основе моего собственного опыта

  • если только не используется очень специфично (например, fulltext index), используйте механизм таблиц InnoDB (транзакции, блокировка строк и т. Д.) *
  • укажите кодировку по умолчанию - utf8 обычно является хорошим выбором
  • точная настройка параметров сервера (* key_buffer * и т.д ... много материала в сети)
  • нарисуйте схему БД вручную, обсудите ее с коллегами и программистами
  • определяет типы данных, основываясь не только на использовании программ, но и на запросах join (быстрее при одинаковых типах)
  • создание индексов на основе ожидаемых необходимых запросов, также обсуждаемых с программистами
  • планирование решения для резервного копирования (на основе репликации БД или сценариев и т. Д.)
  • управление пользователями и доступ, предоставление только необходимых прав доступа и создание пользователя только для чтения, который будет использоваться большинством запросов, которым не требуется доступ на запись
  • определение масштаба сервера, дисков (raid?), Памяти, CPU

Вот также несколько советов для использования и создания базы данных.

2 голосов
/ 31 декабря 2010

Я могу порекомендовать вам первую главу этой книги: Введение в системы баз данных , это может помочь вам упорядочить ваши идеи, и я, конечно, рекомендую не использовать 5-ю обычную форму, а использовать 4-ю, это важно.

0 голосов
/ 31 декабря 2010

Если бы я только мог дать вам один совет, то это было бы для генерации тестовых данных в том же объеме, что и при производстве, и для сравнения основных запросов.

Просто убедитесь, что распределение данных реалистично. (Не всех людей зовут "Джон", и не все люди имеют уникальные имена. Не все люди дают свой номер телефона, и у большинства людей также не будет 10 телефонных номеров).

Кроме того, убедитесь, что тестовые данные не помещаются в ОЗУ (если только вы не ожидаете, что объемы производственных данных тоже будут).

...