Представим описание объектов и
связей между ними в виде логической
ER-модели и созданной в выбранном
для проектирования CASE-средстве MySQL
Workbench.
7.Проектирование
логической структуры базы данных
На этапе логического проектирования
необходимо определить типы и длины
полей. После построения ER-модели в
среде MySQL Workbench следует использовать
метод прямого инжиниринга, позволяющий
автоматически сгенерировать описание
и структуру спроектированной базы данных
в среде выбранной СУБД и будет выглядеть
следующим образом:
HomeOwner(idHomeowner(целое),
Name(Текстовый (45)), Address(Текстовый (60)), Passport(Текстовый
(45)), IdentificationCode(целое), PersonalAccount(целое)).
TypeUtilityServices(idTypeUtilityServices(целое),
Name(Текстовый (45))).
Payments(idPayments(целое),
MonthPayment(целое), DatePayment(дата), idTypeOfUtilityServices(целое),
idUtilityServices(целое)).
Housing(idHous(целое),
Address(Текстовый (45)), idHomeowner(целое), idStreet(целое),
idTypeOfHousing(целое), AreaFlat(число с плавающей
точкой)).
UtilityServices(idUtilityServices(целое),
Name(Текстовый (45)), idDisplayCounters(целое), idHous(целое),
Privilege(число с плавающей точкой)).
DisplayCounters(idDisplayCounters(целое),
idTypeCounters(целое), SerialCode(Текстовый (45)), DateOfVerification(дата),
LastStatement(целое)).
TypeOfHousing(idTypeOfHousing(целое),
Name(Текстовый (45))).
Street(idStreet(целое),
Name(Текстовый (45))).
TypeCounters(idTypeCounters(целое),
Name(Текстовый(45))).
W3_user_details(userId(целое(10)),
passwordHint(Текстовый), isEmailConfirmed (enum(0 or 1)), emailConfirmationKey(Текстовый),
isEmailVisible(enum(0 or 1)), isScreenNameEditable(enum(0 or 1)), deactivationTime(целое(10)),
firstName(Текстовый(128)), middleName(Текстовый(128)),
lastName(Текстовый(128)), initials(Текстовый(16)),
occupation(Текстовый(128)), gender(enum('male','female')),
birthDate(дата), textStatus(Текстовый), lastLoginTime(целое(10)),
lastVisitTime(целое(10)), totalTimeLoggedIn(целое(9)), secretQuestion(Текстовый),
secretAnswer(Текстовый(255)), administratorNote(Текстовый),
updateTime(целое(10))).
W3_user(id(целое(10)),
username(Текстовый(128)), password(Текстовый(128)),
salt(Текстовый(128)), email(Текстовый(255)), screenName(Текстовый(128)),
language(Текстовый(24)), interface(Текстовый(64)),
accessType(Текстовый(32)), accessLevel(целое(1)), isActive(ENUM('0','1')),
createTime(целое(10))).
8.Выявление
полного перечня ограничений целостности,
присущего данной предметной области
Обеспечение целостности данных является
важнейшей задачей при проектировании
и эксплуатации систем обработки
данных.
Целостность – это актуальность
и непротиворечивость информации, ее
защищенность от разрушения и несанкционированного
изменения. Целостность является одним
из аспектов информационной безопасности
наряду с доступностью – возможностью
с приемлемыми затратами получить
требуемую информационную услугу, и
конфиденциальностью – защитой
от несанкционированного прочтения. Ограничение
целостности – это набор специальных
предложений, описывающих допустимые
значения отдельных информационных единиц
и связей между ними. Большинство ограничений
целостности вызваны спецификой предметной
области. Нарушение ограничений целостности
может происходить по нескольким причинам:
ошибки, преднамеренное нарушение, вирусы,
сбои. Поэтому необходимо контролировать
ограничения целостности. Помимо упомянутых
нами на стадии описания предметной области
ограничений целостности, во время разработки
базы данных интернет-магазина нами также
были выявлены многие другие ограничения.
Большинство из них контролируются непосредственно
в таблицах. Поскольку ввод всех данных
в таблице осуществляется через разработанные
нами вспомогательные формы, также существует
достаточно большое количество ограничений,
которые контролируются средствами конструктора
форм, а также при помощи встроенного в
среду MySQL Workbench .Далее будут перечислены
все ограничения целостности, которые
будут контролироваться в данном курсовом
проекте, а также выбранные способы реализации
контроля целостности для каждого из ограничений.
Ограничения,
контролируемые в таблицах:
- Текстовое
поле «Name» в таблице «HomeOwner» не может содержать
пробелов.
- Текстовое
поле «Address» в таблице «HomeOwner» не может
содержать пробелов.
- Текстовое
поле «Passport» в таблице «HomeOwner» не может
содержать пробелов.
- Текстовое
поле «IdentificationCode» в таблице «HomeOwner» не
может содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «PersonalAccount» в таблице «HomeOwner» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «Name» в таблице «TypeUtilityServices» не может
содержать пробелов.
- Текстовое
поле «Address» в таблице «Housing» не может содержать
пробелов.
- Текстовое
поле «idHomeowner» в таблице «Housing» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «idStreet» в таблице «Housing» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «idTypeOfHousing» в таблице «Housing» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «AreaFlat» в таблице «Housing» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «MonthPayment» в таблице «Payments» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «DatePayment» в таблице «Payments» должно
быть определенного вида, который контролируется
маской ввода.
- Текстовое
поле «idTypeOfUtilityServices» в таблице «Payments»
не может содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «idUtilityServices» в таблице «Payments» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «Name» в таблице «UtilityServices» не может
содержать пробелов.
- Текстовое
поле «idDisplayCounters» в таблице «UtilityServices»
не может содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «idHous» в таблице «UtilityServices» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «Privilege» в таблице «UtilityServices» не может
содержать пробелов или кириллических
символов и может содержать только цифры
с плавающей точкой и должно быть определенного
вида.
- Текстовое
поле «Name» в таблице «TypeOfHousing» не может
содержать пробелов.
- Текстовое
поле «Name» в таблице «Street» не может содержать
пробелов.
- Текстовое
поле «Name» в таблице «TypeCounters» не может
содержать пробелов.
- Текстовое
поле «idTypeCounters» в таблице «DisplayCounters» не
может содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «SerialCode» в таблице «DisplayCounters» не может
содержать пробелов.
- Текстовое
поле «DateOfVerification» в таблице «DisplayCounters»
не может содержать пробелов и должно
быть определенного вида, который контролируется
маской ввода.
- Текстовое
поле «LastStatement» в таблице «DisplayCounters» не
может содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «username» в таблице «w3_user» не может
содержать пробелов и должно легко запоминаться.
- Текстовое
поле «password» в таблице «w3_user» не может
содержать пробелов и должно легко запоминаться.
- Текстовое
поле «salt» в таблице «w3_user» не может содержать
пробелов и должно легко запоминаться.
- Текстовое
поле «email» в таблице «w3_user» не может содержать
пробелов и должно легко запоминаться.
- Текстовое
поле «screenName» в таблице «w3_user» не может
содержать пробелов и должно легко запоминаться.
- Текстовое
поле «language» в таблице «w3_user» не может
содержать пробелов и должно легко запоминаться.
- Текстовое
поле «interface» в таблице «w3_user» не может
содержать пробелов и должно легко запоминаться.
- Текстовое
поле «accessType» в таблице «w3_user» не может
содержать пробелов и должно легко запоминаться.
- Текстовое
поле «accessLevel» в таблице «w3_user» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «isActive» в таблице «w3_user» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида(0 или
1).
- Текстовое
поле «createTime» в таблице «w3_user» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида.
- Текстовое
поле «isEmailConfirmed» в таблице «w3_user_deteils»
не может содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида(0 или
1).
- Текстовое
поле «firstName» в таблице «w3_user_deteils» не может
содержать пробелов и должно быть определенного
вида, который контролируется маской ввода.
- Текстовое
поле «middleName» в таблице «w3_user_deteils» не может
содержать пробелов и должно быть определенного
вида, который контролируется маской ввода.
- Текстовое
поле «lastName» в таблице «w3_user_deteils» не может
содержать пробелов и должно быть определенного
вида, который контролируется маской ввода.
- Текстовое
поле «gender» в таблице «w3_user_deteils» не может
содержать пробелов или кириллических
символов и может содержать только цифры
и должно быть определенного вида('male','female').
- Текстовое
поле «birthDate» в таблице «w3_user_deteils» не может
содержать пробелов.
9.Проектирование
физической структуры базы данных
Физическая модель – это привязка
логической модели к конкретной среде
хранения и методам хранения данных.
При проектировании физической модели
базы данных необходимо описать среду
и метод хранения информации. Для
этого необходимо изучить особенности
организации данных выбранной СУБД.
Для проектирования базы данных для
Интернет-магазина была выбрана СУБД
MySQL. Для хранения данных в этой СУБД используются
таблицы. В них хранится вся информация
о предметной области. Наша база данных
включает несколько взаимосвязанных таблиц.
Объекты, которые были описаны при построении
инфологической модели предметной области,
в базе данных являются таблицами. Представим
описание объектов и связей между ними
в виде физической ER-модели и созданной
в выбранном для проектирования php framework-а
Yii.
На рисунках ниже представлены разработанные
таблицы:
Таблица«displaycounters»
Таблица «Payments»
Таблица «streets»
Таблица «typecounters»
Таблица « typeofhousing»
Таблица « user»
Таблица « utilityservices»
Таблица «homeowner»
Таблица «housing»
9.1. Генерация
каркаса на php framework Yii
Create, read,
update и delete (CRUD) — четыре основных
операции, при помощи которых
можно управлять данными. В
нашем приложении главная задача
состоит в том, чтобы реализовать
операции CRUD для записей и комментариев.
В этом разделе мы будем
использовать инструмент yiic для выполнения
этой задачи. Этот процесс также известен
как scaffolding.
Чтобы подготовиться
к следующим этапам, давайте поближе
познакомимся с содержимым сгенерированных
файлов. Все сгенерированые файлы
расположены в директории/wwwroot/blog/protected. Для удобства
мы разделяем их на модели, контроллеры и представления:
файлы моделей:
Models/User.php содержит класс User, который наследуется
от CActiveRecord и может использоваться
для обращения к таблице User;
Models/Post.php содержит класс Post, который наследуется
от CActiveRecord и может использоваться
для обращения к таблице Post;
Models/Tag.php содержит класс Tag, который наследуется
от CActiveRecord и может использоваться
для обращения к таблице Tag;
Models/Comment.php содержит
класс Comment, который наследуется
от CActiveRecord и может использоваться
для обращения к таблице Comment;
файлы контроллеров:
Controllers/PostController.php содержит
класс PostController, который является
контроллером, отвечающим за все операции
CRUD для записей;
Controllers/CommentController.php содержит
класс CommentController, который является
контроллером, отвечающим за все операции
CRUD для комментариев;
файлы представлений:
views/post/create.php — файл представления,
который показывает HTML-форму для создания
записи;
views/post/update.php — файл представления,
который показывает HTML-форму для обновления
записи;
views/post/show.php — файл представления,
который отображает подробную информацию
поста;
views/post/list.php — файл представления,
который отображает список записей;
views/post/admin.php— файл представления,
который отображает записи в таблице с
административными командами.
views/post/_form.php — частичный
файл представления, который отображает
HTML-форму для сбора информации о посте.
Он включается в представления create и update.
Подобный
набор файлов представлений также
сгенерирован для комментариев.
10. Организация
ввода данных в БД
База данных состоит из взаимосвязанных
таблиц, которые наполняются записями.
Ведение базы данных подразумевает
под собой возможность управления
записями: их добавление, изменение, удаление.
Реализация данных возможностей возлагается
на СУБД. Существует несколько способов
реализации управления базой данных в
php framework. В частности, любое из указанных
действий можно выполнить тремя способами:
-через раздел СУБД «Таблицы», производя
действия по изменению, добавлению или
удалению непосредственно в таблице;
-через раздел СУБД «Формы», выполняя
необходимые действия в таблице через
интерфейс формы;
через раздел СУБД «Запросы», выполняя
запросы на обновление, добавление
или удаление данных.
Существует 3 способа ввода данных:
ввод с клавиатуры; сохранение данных,
сформированных иными программными
средствами; импорт из других источников.
В нашей базе данных мы использовали
ввод с клавиатуры. В процессе ввода
информации были использованы следующие
приемы: перенос значений полей из
предыдущих записей; замена ввода выбором
из списка, вспомогательные запросы
для полей, которые необходимо вычислять.
Ввод информации в базу данных может осуществляться
путем ввода данных в таблицу. Но такой
способ имеет многие очевидные недостатки.
Поэтому для этих целей обычно используются
экранные формы. Формы – это окна, через
которые пользователь взаимодействует
с программным кодом приложения и объектами
данных. Ввод данных при помощи форм очень
простой в использовании. С помощью форм
также можно осуществлять полноценную
навигацию по таблице.
При проектировании
нашей базы данных ввод информации
осуществлялся при помощи форм. Экранные
формы создаются либо в режиме
конструктора, либо автоматически по
выбранным полям таблицы или
запроса. Корректировка данных возможна
в этих же формах.
Эти формы
имеют следующий вид:
Экранная
форма «Login(вход)»
Экранная
форма «Register(регистрация)»
11. Организация
корректировки БД
Корректировка данных в базе данных
может осуществляться путем корректировки
данных в форме. В основных таблицах
нашей БД, например «Member», «My profile», «HomeOwner»
и так далее, основная информация чаще
всего поступает извне, а именно с сайта
Горисполкома, то формы, соответствующие
этим таблицам созданы прежде всего для
корректировки записей. Приведем примеры
этих форм:
Member:
My profile:
HomeOwner:
12. Описание
информационных потребностей пользователей
и выбор способов их реализации.
Пример расчета субсидии:
Гражданка
И., 1970 года рождения, не замужем, проживает
с несовершеннолетним ребёнком в доме
общей площадью 68 кв.м.
Имеет доходы:
зарплата – 968 грн.;
алименты – 400 грн.
Итого: 1368 грн. в месяц.
В доме установлен счётчик
на газ.
Среднемесячное фактическое
потребление газа – 750,0 куб.м при
норме 614,1 куб.м (52,5 кв.м).
Общая сумма коммунальных платежей
составляет:
газ (в пределах нормы
614,1 куб.м) по новой цене при объёме
газа до 6000 куб.м – 674,28 грн.;
холодная вода – 39,90 грн.;
электроэнергия (75 кВт) –
18,27 грн.
Итого: 732,45 грн.
Обязательный платёж
составляет 15% от дохода: 1368 х 15% = 205,20 грн.
Субсидия составляет: 732,45 грн. – 205,20
грн. = 527,25 грн. в месяц.
Пример
выполнения скрипта:
(SELECT
COUNT((p.MonthPayment)-(COUNT(p.MonthPayment)*us.Privilege/100)) AS
Subsidy, us.idHous
FROM
Payments AS p
INNER
JOIN UtilityServices AS us
ON us.UtilityServices
= p.UtilityServices
GROUP
BY us.idHous) AS mp
13. Разработка
интерфейса
При проектировании и разработке любой
базы данных интерфейс играет важную
роль. Он представляет собой совокупность
средств и методов, при помощи
которых пользователь взаимодействует
с различными компонентами базы данных.
Работа с нашей базой данных начинается
с заставки. После просмотра заставки,
пользователь попадает в главное меню,
которое предназначено для предоставления
пользователю удобной навигации по всем
формам базы данных, которые сгруппированы
по функциям. Главное меню содержит три
раздела:
-Сайт
-Администрирование БД
При переходе
на раздел сайт, пользователь попадает
на форму, эмулирующую работу сайта.
На котором можно зарегистрироваться,
войти, связаться с нами, просмотреть информацию
о компании и услугах. Раздел «Администрирование
БД» предназначен для сотрудников горисполкома.
Доступ к каждому из подразделов защищен
паролем и сотрудник имеет доступ только
к тем, которые относятся к его должностным
обязанностям.
14. Реализация
проекта в среде конкретной СУБД