Постановка
задачи. Модель и структура данных
Постановка
задачи
Понятно, что, не имея представления о предметной области, никакую
программу создать невозможно. Здесь есть проблема. С одной стороны,
программисты часто не имеют о предметной области ни малейшего
представления. С другой стороны, заказчик совершенно не представляет,
как его пожелания воплотятся в программе. И здесь очень важно наличие
специалиста, называемого постановщиком задачи, который знает предметную
область, представляет, как будет выглядеть будущая программа и сможет
на основе пожеланий заказчика составить для программиста грамотное
техническое задание. Довольно часто встречаются случаи, когда в роли
постановщика задачи вынужден выступать сам программист, и почти никогда
- заказчик. При внешней малозначительности вопроса отсутствие грамотной
постановки задачи - серьезная проблема, часто перерастающая в конфликт
с заказчиком при сдаче работы. При отсутствии конкретного заказчика
проблема не снимается, так как программист должен четко представлять
запросы целевой аудитории своего продукта и подстраивать программу под
возможные пожелания теперь уже абстрактного заказчика.
Модель и структура данных
Итак, задача поставлена, надо делать. Чего скрывать, в массе
своей программисты - люди неорганизованные. Получив задачу, тут же
бросаются к компу, начинают клепать базы и писать коды. Вскоре
выясняется, что все сделано неправильно, не учтены важнейшие моменты,
половину приходится переделывать. А потом переделывать еще, еще и еще
... Существует, конечно, подобная техника, называемая экстремальным
программированием, но это не для всех (потому и экстремальное). Так что
есть смысл обратиться к передовому опыту проектирования программных
систем, согласно которому нужно:
1. Провести анализ предметной области, в результате чего появится
концептуальная модель будущей программной системы.
2. Разработать детальную структуру базы данных.
3. Только после этого приступить к написанию кодов.
Есть для этого и соответствующие
программные средства, называемые CASE-средства. С их помощью
можно смоделировать практически любые программные системы - от описания
структуры и поведения до проектирования базы данных и написания кодов.
Продвинутые программисты пользуются этим делом вовсю. Например, в
замечательной книжке "PHP 5 для профессионалов" авторы так по-простому
и советуют: "Запустите любое
приложение, предназначенное для построения
диаграмм UML ..." (тот же CASE). Совет, конечно, хорош, да вот нет у
нас под рукой
такого приложения. Все это сплошь коммерческие продукты, да еще и
недешевые. То есть, находясь в правовом поле, большинству из нас
попользоваться всеми этими чудесами не светит. Рисовать на бумажке тоже
как-то неприлично. Однако выход есть. Поскольку во многих случаях,
особенно для небольших систем, концептуальная модель хорошо
накладывается на структуру БД, для построения модели можно
воспользоваться стандартными средствами СУБД для описания структуры
базы. В MySQL это будет MySQL
Workbench. или программа
сторонних производителей (например, DBDesigner
или Open
System Architect).
Воспользуемся MySQL Workbench. Перед использованием
надо глянуть на версию программы. Если бета или альфа - лучше скачать
заново. Существует бесплатная и коммерческая версия программы,
последняя, естественно, с несколько большими возможностями.
Модель программной системы описывается ER-диаграммами (диаграммы
сущность-связь). О таких диаграммах см. полезные
ссылки, повторяться не будем.
MySQL Workbench позиционируется разработчиками как средство построения
ER-диаграмм, то есть включает все необходимое для построения модели, за
исключением автоматической генерации кодов обработки. В качестве
сущностей выступают таблицы БД, в качестве связей - естественно, связи
между ними. Для примера построим ER-диаграмму для пользователей,
объединенных в группы. Имеем две сущности - группы пользователей и
пользователей. Связь определяет принадлежность пользователя той или
иной группе. Запускаем программу:
По умолчанию предлагается название схемы mydb. Можно изменить его в
соответствии с названием своего проекта. Два раза щелкаем Add Diagram и
попадаем в поле построения диаграммы. С левой панели инструментов
перетаскиваем на поле диаграммы две новые таблицы, именуем их (Group и
Users) и добавляем в каждую поля id и name. Затем на той же левой
панели выбираем связь <Один ко многим> и щелкаем вначале
на таблице пользователей (многие), затем на таблице групп (один).
Автоматически в таблицу пользователей добавляется поле Group_id,
указывающее на группу, и формируется внешний ключ (связь):
Связь автоматически настраивается по автоинкрементному полю таблицы
групп и вновь созданному полю таблицы пользователей. Естественно, поля
связи в дальнейшем можно перенастроить. Простейшая ER-модель готова.
Дальше MySQL Workbench предоставляет возможность перенести
разработанную структуру данных на физическую БД. Сохраняем проект в
файл. Создание скрипта производится через меню
<File - Export - Forward Engineer SQL CREATE
Script...>. После этого можно загрузить полученный скрипт в
MySQL Query Browser <File - Open Script ...> и выполнить
по кнопке Execute. (В платной версии MySQL Workbench то же самое можно
сделать более изящно.)
Будет создана схема данных mydb с таблицами групп и пользователей. (Для
переноса связей MySQL должна поддерживать машину данных InnoDB.) В
дальнейшем разработанную модель можно исправить и дополнить, и
перенести изменения в базу.
Конечно, для простой задачи подобный путь может показаться длинноватым
и не слишком удобным, однако для большой задачи с разветвленной схемой
данных использование такой программы позволит в дальнейшем сэкономить
кучу времени и сил, особенно если разработка является протяженной во
времени.
Полезные
ссылки:
http://www.interface.ru/home.asp?artId=2805 (проектирование
информационных систем 1)
http://www.interface.ru/home.asp?artId=3006 (проектирование
информационных систем 2)
http://i-vd.org.ru/books/php/object-oriented.shtml (объектно-ориентированное
програмирование в PHP)
http://forge.mysql.com/wiki/MySQL_Workbench
(англ.)
© re-stichka.narod.ru
При
публикации данного материала ссылка на источник обязательна.