Описание и проектирование базы данных системы в phpmyadmin

После составления функционального описания  системы, мы можем приступить к проектированию базы данных в phpmyadmin.

ВНИМАНИЕ! Многие ссылки ведут на скриншоты, будет проще если вы включите javascript, тогда картинки будут отображаться без открытия нового окна. Здесь будет мало информации об использовании phpmyadmin. Во-первых, он достаточно прост и локализован, во-вторых подумайте только сколько писать придется, в-третьих, есть интернет. Не думал, что столько причин смогу придумать:) Немного скриншотов есть в прошлогоднем материале, но учтите вам не нужны таблицы описанные там. Ещё один важный момент: при добавлении нужно указать правильный тип таблицы, в нашем случае правильным будет InnoDB, так как MyISAM не поддерживает внешних связей и ключей.

В первую очередь опишем таблицы и поля необходимые нам для реализации функционала:

  • пользователи (users). Создасться при импортировании модуля авторизации. Модуль авторизации создаст 5 таблиц. Возрадуемся же тому, что не разрабатываем его с нуля:)
  • счета/проекты (accounts). Всю информацию по счетам (кроме операций и влкючая баланс). Список полей обсуждался на паре, поэтому просто смотрите скриншот таблицы accounts в phpmyadmin. На занятии забыл упомянуть один важный момент: все поля id в наших таблицах, само собой с атрибутом "auto_increment", то есть их значение автоматически задается при добавлении строки в базу данных. При разработке с возможностью задания единиц измерения, пришось бы создавать ещё две таблицы (ед. измерения, баланс счета), а так баланс будет сохраняться в поле balance. Поле sort_order определяет порядок счетов везде, по возрастанию или убыванию значения - решать вам. При создании всех текстовых полей (varchar, text) в поле "Сравенние" (collation) выбирайте utf8_general_ci. Полагаю формат указания типов данных понятен: тип(длина). Например, decimal(11, 2) - 2 число знаков после точки (касается всех полей денежного формата). Поля id также являются первичными ключами, в обоих наших таблицах.
  • операции (operations). Соответственно все доходы и расходы по всем счетам. Любуемся фотографией operations результата в phpmyadmin. Поле user_id дублирует значение из таблицы accounts просто для облегчения некоторых запросов при проверке права пользователя на изменение и просмотр записи. done - признак необходимости учитывать операцию при расчете остатка. Назначения других полей должны быть ясны, да и обсуждались они уже.

Кроме этих двух таблиц нам ещё нужно будет:

  • импортировать скрипт системы авторизации;
  • создать внешние связи в таблицах (операции со счетами, и счета с пользователями) для установки каскадного удаления записей;
  • добавить триггер строки для учета баланса при изменении, добавлении, удалении операции.

С этим мне придется вам помочь, потому что из-за синтаксических ошибок в скриптах тоже потратил немало времени. Об этом напишу отдельно.

вернуться назад

Комментарии

Тип таблицы

Внес одно исправление после публикации: тип создаваемой таблицы должен быть InnoDB.