Использование SQL в прикладном программировании
Для упорядочивания строк в реляционной таблице модели данных используется первичный ключ, который представляет собой атрибут или группу атрибутов, а для упорядочивания столбцов одной таблицы, значения в котором совпадают со значениями в другой таблице, используется внешний ключ. Реляционная модель данных поддерживает операторы обработки отношений, таких как реляционная алгебра и реляционное… Читать ещё >
Использование SQL в прикладном программировании (реферат, курсовая, диплом, контрольная)
Негосударственное образовательное учреждение высшего образования Московский технологический институт Факультет: Техники и современных технологий Кафедра: Информатики и автоматизации КУРСОВАЯ РАБОТА по дисциплине «Базы данных»
на тему: «ИСПОЛЬЗОВАНИЕ SQL В ПРИКЛАДНОМ ПРОГРАММИРОВАНИИ»
Уровень образования: бакалавриат Направление: 230 100 «Информатика и вычислительная техника»
Профиль: «WEB разработка»
Выполнил:
Студент 5-го курса Форма обучения: заочная Иванов Иван Иванович Москва 2015
- Введение
- 1. Основные понятия и технологии распределенной обработки данных
- 1.1 Основные понятия и классификация баз данных и систем управления базами данных
- 1.2 Модели построения баз данных
- 1.3 Технологии распределенной обработки данных
- 2. Особенности языка структурированных запросов SQL
- 2.1 Общие понятия о языке SQL
- 2.2 Структура и назначение операторов SQL
- 2.3 Преимущества и недостатки языка SQL
- 3. Использование SQL в прикладном программировании
- 3.1 Обоснование выбора применяемых технологий для решения задачи
- 3.2 Реализация программной части веб — приложения
- 3.3 Описание общей схемы взаимодействия компонент вебприложения, основные сценарии работы
- Заключение
- Список использованной литературы
- Приложение А. Характеристики объектно-ориентированной модели данных
- Приложение Б. Описание таблиц базы данных
- Приложение В. Запросы, формирующие базу данных
- Приложение Г. Взаимодействие с БД средствами PHP
- Приложение Д. Основные элементы интерфейса пользователя сервиса подписки
- Введение
Актуальность темы
курсовой работы заключается в том, что в современном компьютерном мире язык структурированных запросов SQL предоставляет пользователю большое количество возможностей по применению и объединению информации из различных источников. Кроме того, в настоящее время SQL нашел широкое применение в прикладном программировании, поскольку значительно сокращает объем работ, который пришлось бы выполнять при использовании универсальных языков программирования.
- Язык структурированных запросов SQL (Structured Query Language) предназначен для создания и работы с реляционными базами данных, которые представляют собой наборы связанных данных, хранящихся в таблицах. Для управления реляционными базами данных используются программы, называемые системами управления базами данных, СУБД.
- В области баз данных наблюдается все большая интеграция, которая повышает важность стандартного языка, пригодного для использования на различных компьютерных платформах и с разными СУБД.
- При наличии стандартного языка достаточно изучить один набор команд и применять его для ввода, поиска, изменения и передачи информации независимо от имеющейся платформы: персональный компьютер, рабочая станция или большая ЭВМ.
- Приложения, написанные на стандартном языке, способны работать со многими базами данных, как при использовании API ODBC.
Объектом исследования курсовой работы являются «Базы данных», а предметом исследования — «Использование SQL в прикладном программировании».
Целью курсовой работы является изучение возможностей использования SQL в прикладном программировании.
Для достижения поставленной цели в курсовой работе необходимо решить следующие задачи:
1) раскрыть сущность понятий база данных, система управления базами данных путем изучения классификации баз данных и СУБД по степени распределенности, по технологии хранения данных, по содержимому, по моделям построения;
2) изучить особенности реляционной модели данных;
3) изучить технологии распределенной обработки данных путем определения из достоинств и недостатков, проведения сравнительного анализа, а также выделить технологию, которая наиболее подходит для распределенной обработки данных с использованием SQL-запросов к серверам БД;
4) рассмотреть структуру и назначение операторов SQL: операторов определения данных DDL, операторов манипулирования данных DML, операторов управления данными DCL;
5) изучить возможности использования SQL в прикладном программировании.
При написании курсовой работы использовались научные труды следующих авторов: Астахова И. Ф. 1], Боуман Дж.С. [2], Гарсиа-Молина Г. 3], Дейт К. 4−6], Дунаев В. В. 7], Жилин Д. М. 9] и другие.
1. Основные понятия и технологии распределенной обработки данных
1.1 Основные понятия и классификация баз данных и систем управления базами данных
База данных (БД) — это совместно используемый набор логически связанных данных (и их описание), предназначенный для удовлетворения информационных потребностей пользователей.
Система управления базами данных (СУБД) — программное обеспечение (ПО), с помощью которого пользователи могут определять, создавать и поддерживать базу данных, а также получать к ней контролируемый доступ [5, с. 123].
По степени распределенности базы данных и СУБД разделяются локальные и распределенные, групповые и корпоративные, как показано на рисунке 1 [6, с. 102].
Рисунок 1 — Классификация баз данных и СУБД по степени распределенности
Локальные базы данных и системы управления базами данных, как правило, реализуются на одном автономном компьютере и рассчитаны на работу одного пользователя. Как правило, приложения разрабатываются с помощью локальных баз данных, например: Clarion, Clipper, FoxPro, Paradox, dBase, Microsoft Access.
Групповые базы данных и системы управления базами данных реализуются в локальной сети и рассчитаны на работу группы пользователей подключенных к одному серверу баз данных, которые называются SQL серверами. Наиболее часто используемыми являются: Oracle, DB2, Microsoft SQL Server, Inter Base, Sybase, Informix.
Корпоративные базы данных и системы управления базами данных реализуются на больших предприятиях и могут поддерживать территориально разнесенные узлы в сети. Как правило, корпоративные БД и СУБД имеют иерархическую структуру, состоящую из нескольких уровней. Наибольшее распространение получили серверы баз данных: Oracle, DB2, Microsoft SQL Server [8, с. 76].
По технологии хранения данных базы данных и СУБД классифицируются следующим образом (рисунок 2) [9, с. 123]:
Рисунок 2 — Классификация баз данных и СУБД по технологии хранения данных
Фактографические базы данных и СУБД являются аналогами бумажных карточек и предназначены для хранения данных представленных в строго фиксированных форматах и краткой форме.
Документальные базы данных и СУБД являются аналогами исторических документов или архивов документов, обеспечены формализованным аппаратом поиска и предназначены для хранения графических объектов и неструктурированных текстовых документов [10, с. 156].
Централизованные базы данных и СУБД реализуются, как правило, либо на одном автономном компьютере, либо в сети на основании архитектуры «клиент-сервер», хранение данных организовано только на одном компьютере.
Распределенные базы данных и СУБД отличаются от централизованных тем, что данные могут быть разбиты на разные части и храниться на нескольких компьютерах в вычислительной сети.
По содержимому базы данных и СУБД разделяются на следующие группы [11, с. 336]:
1) графические, предназначенные для хранения данных графических форматов, как правило, это базы данных фотографий, архивы изображений различного стилевого оформления;
2) исторические, предназначенные для хранения текстовых данных представляющих историческую ценность, это, как правило, базы данных для ведения исторических архивов предприятий, выдающихся деятелей искусства, культуры и науки;
3) научные, предназначенные для хранения текстовых и графических данных, проведения научных исследований и отражения последних достижений науки и техники;
4) мультимедийные, предназначенные для хранения данных представленных в видео формате: базы данных видеофильмов, музыки, проектов анимационных разработок.
1.2 Модели построения баз данных
Модель данных — это абстрактное, самодостаточное, логическое определение объектов, операторов и прочих элементов, в совокупности составляющих абстрактную машину доступа к данным, с которой взаимодействует пользователь. Эти объекты позволяют моделировать структуру данных, а операторы — поведение данных.
В настоящее время существуют следующие основные модели построения баз данных: иерархическая, сетевая, объектная, объектно-ориентированная, реляционная.
Рассмотрим особенности каждой из моделей построения баз данных.
Иерархическая структура представляет множество элементов, имеющих между собой связи по определенным правилам. Объекты, связанные иерархическими отношениями, образуют ориентированный граф (перевернутое дерево).
К основным понятиям иерархической структуры относятся: уровень, элемент (узел), связь.
Узел — это совокупность атрибутов данных, которые описывают некоторый объект.
На схеме иерархического дерева узлы представляются вершинами графа. Каждый узел на низшем уровне связан только с одним узлом, который находится на более высоком уровне.
Иерархическое дерево имеет единственную вершину (корень дерева), не подчиненную никакой другой вершине и находится на самом верхнем (первому) уровне. Зависимые (подчиненные) узлы находятся на втором, третьем и так далее уровнях. Количество деревьев в базе данных соответствует числу корневых записей. К каждой записи базы данных существует только один (иерархический) путь от корневой записи.
Особенностью реализации операций поиска в иерархической модели является то, что операция всегда начинает поиск с корневой вершины и специфицирует иерархический путь (последовательность связанных вершин) от корня до вершины, экземпляры которой удовлетворяют условиям поиска.
Структура иерархической модели данных представлена на рисунке 3 [12, с. 206].
Рисунок 3 — Структура иерархической модели данных Структура иерархической модели данных (рисунок 3) состоит из структурной части и управляющий части. В структурной части иерархической модели данных выделяют поле, представляющие собой наименьшую единицу данных, доступную пользователю и сегмент, для которого определяются тип и экземпляр. Причем экземпляр сегмента образуется из значений полей данных заданных определенным образом и поименованной совокупности входящих в него типов полей данных определяемых типом сегмента.
Основными достоинствами иерархической модели данных являются: эффективное использование памяти ЭВМ; высокая скорость выполнения операций над данными; удобство работы с иерархически упорядоченной информацией.
Недостатком иерархической модели является ее громоздкость для обработки информации с достаточно сложными логическими связями.
На иерархической модели данных основано сравнительно ограниченное количество СУБД, в числе которых можно назвать зарубежные системы IMS, PC / Focus, Team — Up и Data Edge, а также отечественные системы Ока, ИНЭС и МИРИС.
Сетевая модель данных является расширением иерархического подхода, описывается строгой математической теорией, отражающей структурный, целостный и аспект обработки данных, и состоит из набора экземпляров определенного типа записи и набора экземпляров определенного типа связей между этими записями.
Основное отличие сетевой структуры от иерархической структуры данных заключается в том, что каждый элемент в сетевой структуре может быть связан с любым другим элементом.
Достоинствами сетевой модели данных являются: эффективность в использовании памяти компьютера; высокая скорость выполнения основных операций над данными; огромные возможности по сравнению с иерархической модели по образованию произвольных связей.
Недостатками сетевой модели данных являются: высокая сложность и жесткость схемы базы данных, которая построена на ее основе; трудность для понимания и выполнения обработки информации в базе данных непрофессиональным пользователем.
Наиболее известными сетевыми СУБД являются: IDMS, db _ VistaIII, СЕТЬ, СЕТОР и КОМПАС.
Объектная модель базы данных используется в основном для создания высокого уровня абстракции и работы с объектными данными, такими как изображение, музыка, видео и различного текста, Характеристика современных объектных моделей баз данных приведена в таблице 1 [13, с. 199].
Таблица 1 — Современные объектные модели баз данных
Название | Назначение | |
Versant (разработка Versant Technologies) | Используется для разработки телекоммуникаций | |
POET (компания POET Software) | Поддержка интерфейсов C++, Java, Visual Basic | |
Object Store PSE (разработка компании Object Design) | Модули объектов Java | |
Объектно-ориентированная модель отличается от объектной модели тем, что данные могут, как моделироваться в виде объектов, так и представляться атрибутами, методами и классами [14, с. 22].
Объектно-ориентированные модели представления данных позволяют идентифицировать отдельные записи базы. Между записями базы данных и функциями их обработки формируются определенные взаимосвязи с помощью механизмов, похожих на соответствующие средства в объектно-ориентированных языках программирования. Характеристики объектно-ориентированной модели данных приведены в Приложении А.
Достоинствами объектно-ориентированной модели данных являются: возможность показа информации о сложных взаимосвязях объектов; способность идентификации отдельной записи базы данных и определения функции ее обработки.
К недостаткам объектно-ориентированной модели данных относятся: трудность в понимании ее деятельности непрофессиональным пользователем; неудобство обработки данных; небольшая скорость выполнения запросов.
Среди объектно-ориентированных СУБД можно выделить системы фирмы РОЕТ: Software, Versant фирмы Versant Technologies и др.
Реляционная база данных представляет собой хранилище данных, организованных в виде двумерных таблиц. Таблицы отражают тип объекта (сущности), разделенные на строки, представляющие собой экземпляры объекта и столбцы, соответствующие атрибутам, на пересечении которых содержатся значения данных, составляющие основу организации реляционной модели данных.
Для упорядочивания строк в реляционной таблице модели данных используется первичный ключ, который представляет собой атрибут или группу атрибутов, а для упорядочивания столбцов одной таблицы, значения в котором совпадают со значениями в другой таблице, используется внешний ключ. Реляционная модель данных поддерживает операторы обработки отношений, таких как реляционная алгебра и реляционное исчисление.
Основные правила реляционной модели данных отражены на рисунке 4 [15, с. 49].
Рисунок 4 — Основные правила реляционной модели данных В реляционной модели данных различают связи по типу и мощности связи, которая представляет собой отношение количества экземпляров родительской сущности к соответствующему количеству дочерней сущности.
В таблице 2 приведены характеристики используемых в реляционной модели данных связей [16, с. 36].
Таблица 2 — Виды связей, используемых в реляционной модели данных
Название | Характеристика | |
По типу: | ||
Идентифицирующая | Экземпляр дочерней сущности идентифицируется через ее связь с родительской сущностью | |
Не идентифицирующая | Атрибуты, которые составляют первичный ключ родительской сущности, входят в состав не ключевых атрибутов дочерней сущности | |
По мощности связи: | ||
Один к одному | Одной строке родительской таблицы может соответствовать не более одной сроки дочерней таблицы | |
Один ко многим | Одной строке родительской таблицы может соответствовать множество строк дочерней таблицы, но любой сроке дочерней таблицы может соответствовать только одна строка родительской таблицы | |
Особое значение в реляционной модели данных уделяется нормализации отношений, которая представляет собой процесс функциональной зависимости между атрибутами одного и того же отношения, когда каждому значения одного атрибута соответствует только одно значение второго атрибута.
Нормализация связана с разделением одной таблицы на две или более таблиц, которые соответствуют требованиям нормальных форм, характеристика которых приведена в таблице 3 [17, с. 103].
Таблица 3 — Характеристика нормальных форм
Название формы | Характеристика | |
Первая нормальная форма (1НФ) | На любом пересечении строки и столбца находится единственное значение, которое должно быть атомарным, при этом не должно быть повторяющихся групп | |
Вторая нормальная форма (2НФ) | В основе находится понятие полной функциональной зависимости, когда один атрибут полностью функционально зависит от другого атрибута и не зависит от какого-либо подмножества атрибута | |
Третья нормальная форма (3НФ) | В основе находится транзитивная зависимость, то есть, чтобы ни один не ключевой столбец не зависел бы от другого не ключевого столбца | |
Четвертая нормальная форма (4НФ) | В основе находится многозначная зависимость, которая существует между атрибутами некоторого отношения, однако входящие в эти наборы значения не зависят друг от друга | |
Пятая нормальная форма (5НФ) | Отношение, которое не содержит зависимостей соединения, то есть когда декомпозиция отношения может сопровождаться генерацией ложных строки при обратном соединении декомпозированных отношений с помощью операции естественного соединения | |
Достоинство реляционной модели данных заключается в простоте, понятности и удобстве физической реализации на ЭВМ. Именно простота и понятность для пользователя явились основной причиной ее широкого использования.
К основным недостаткам реляционной модели относятся отсутствие стандартных средств идентификации отдельных записей и сложность описания иерархических и сетевых связей.
Примерами зарубежных реляционных СУБД для ПЭВМ являются: DB 2, Paradox, FoxPro, Access, Clarion, Oracle. К отечественным СУБД реляционного типа относятся системы ПАЛЬМА и HyTech.
На основании проведенного анализа основных моделей построения баз данных для дальнейшего исследования выбираем реляционную модель, как наиболее простую и удобную для физической реализации на ЭВМ.
1.3 Технологии распределенной обработки данных
Рассмотрим модели, которые используются в технологии распределенной обработки данных.
Технология модели «клиент-сервер» основана на принципе взаимодействия двух программных процессов, в котором клиентский процесс запрашивал некоторые услуги, а серверный — обеспечивал их выполнение, причем один серверный процесс может обслужить множество клиентских процессов.
В основу технологии «клиент-сервер» заложено разделение функций стандартного интерактивного приложения (рисунок 5).
В основе структуры типового интерактивного приложения, работающего с базой данных, содержатся:
Рис. 5. Функции технологии «клиент-сервер»
— претензионная логика, которая определяется тем, что пользователь видит на своем экране, когда работает приложение;
— бизнес — логика, определяющая алгоритмы решения задач приложений и обычно создается с использованием различных языков программирования;
— логика обработки данных, которая отвечает за обработку данных внутри приложения для обеспечения доступа, к которым используется язык запросов и средства манипулирования данными SQL;
— процессор управления данными, с помощью которого обеспечивается хранение и управление базами данных, где функции СУБД должны быть скрыты от бизнес — логики приложений.
Также для распределения указанных функций используются двухуровневые модели: модель удаленного управления данными и модель файлового сервера.
Распределение функций в модели файлового сервера данными показано на рисунке 6.
Рисунок 6 — Структура распределения функций в модели файлового сервера Достоинством модели файлового сервера является то, что не требуется разделение монопольного приложения на два взаимодействующих процесса, при этом сервер, как и при технологии «клиент-сервер» может одновременно обслуживать несколько клиентов, которые обращаются к нему с запросами.
Недостатки модели файлового сервера являются: высокий сетевой трафик, узкий спектр операций манипулирования с данными и отсутствие адекватных средств безопасности доступа к данным.
В отличие от модели файлового сервера, в модели удаленного доступа к данным, база данных храниться на сервере, на котором также находится ядро системы управления базами данных, а на клиенте располагается претензионная логика и бизнес логика приложения, как показано на рисунке 7 [21, с. 223].
Модель удаленного доступа к данным исключает главный недостаток модели файлового сервера, поскольку от клиентов к серверу передаются не запросы на ввод-вывод, а структурированные запросы, объем которых значительно меньше и в ответ на запросы клиент получает только данные, релевантные запросу, а не блоки файлов.
Рисунок 7 — Модель удаленного доступа к данным Таким образом, модель удаленного доступа к данным, наиболее подходит для реализации распределенной СУБД с использованием SQL запросов.
сервер запрос реляционный
2. Особенности языка структурированных запросов SQL
2.1 Общие понятия о языке SQL
Язык структурированных запросов SQL является информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных [22, с. 102].
Язык SQL является основным способом работы пользователя с базой данных и позволяет выполнять следующий набор операций, приведенных на рисунке 8 [23, с. 63].
Рисунок 8 — Возможности SQL
При всех своих изменениях, SQL остаётся единственным механизмом связи между прикладным программным обеспечением и базой данных.
В то же время, современные СУБД, а, также, информационные системы, использующие СУБД, предоставляют пользователю развитые средства визуального построения запросов.
Каждое предложение SQL — это запрос или обращение к базе данных, которое приводит к изменению в базе данных.
В соответствии с тем, какие изменения происходят в базе данных, различают следующие типы запросов (рисунок 9) [24, с. 122].
Рисунок 9 — Типы запросов для организации работы СУБД Основным объектом хранения реляционной базы данных является таблица, поэтому все SQL-запросы — это операции над таблицами. В соответствии с этим, запросы делятся на [25, с. 169]:
— запросы, оперирующие самими таблицами (создание и изменение таблиц);
— запросы, оперирующие с отдельными записями (или строками таблиц) или наборами записей.
Каждая таблица описывается в виде перечисления своих полей (столбцов таблицы) с указанием:
— типа хранимых в каждом поле значений;
— связей между таблицами (задание первичных и вторичных ключей);
— информации, необходимой для построения индексов.
Запросы первого типа, в свою очередь, делятся на запросы, предназначенные для создания в базе данных новых таблиц, и на запросы, предназначенные для изменения уже существующих таблиц.
Запросы второго типа оперируют со строками, и их можно разделить на запросы следующего вида [26, с. 108]:
— вставка новой строки;
— изменение значений полей строки или набора строк;
— удаление строки или набора строк.
Самый главный вид запроса — это запрос, возвращающий (пользователю) некоторый набор строк, с которым можно осуществить одну из трёх операций [27, с. 223]:
— просмотреть полученный набор;
— изменить все записи набора;
— удалить все записи набора.
Таким образом, использование SQL сводится, по сути, к формированию всевозможных выборок строк и совершению операций над всеми записями, входящими в набор [28, c.23].
2.2 Структура и назначение операторов SQL
Различают следующие основные операторы SQL:
1) операторы определения данных DDL;
2) операторы манипулирования данными DML;
3) операторы управления транзакциями TCL.
Операторы определения объектов базы данных позволяют создавать, удалять, изменять базу данных, таблицы в базе данных, а также выполнять операции с доменами баз данных и представлениями.
Основные операторы определения объектов базы данных DDL и их назначение приведены в таблице 4 [28, с. 56].
Таблица 4 — Основные операторы определения объектов базы данных DDL
Название | Значение | |
CREATE SCHEMA | Создание схемы базы данных | |
DROP SHEMA | Удалить схему базы данных | |
CREATE TABLE | Создать таблицу | |
ALTER TABLE | Изменить таблицу | |
DROP TABLE | Удалить таблицу | |
CREATE DOMAIN | Создать домен | |
ALTER DOMAIN | Изменить домен | |
DROP DOMAIN | Удалить домен | |
CREATE COLLATION | Создать последовательность | |
DROP COLLATION | Удалить последовательность | |
CREATE VIEW | Создать представление | |
DROP VIEW | Удалить представление | |
Операторы манипулирования данными DML позволяют отобрать, добавить и изменить строки в таблице базы данных, а также зафиксировать и откатить внесенные изменения, как показано в таблице 5 [28, с. 52].
Таблица 5 — Основные операторы манипулирования данными DML
Название | Значение | |
SELECT | Отобрать строки из таблиц | |
INSERT | Добавить строки в таблицу | |
UPDATE | Изменить строки в таблице | |
DELETE | Удалить строки в таблице | |
COMMIT | Зафиксировать внесенные изменения | |
ROLLBACK | Откатить внесенные изменения | |
Операторы управления транзакциями позволяют создавать и удалять ограничения, предоставлять и отменять привилегии пользователю или приложению на манипулирование объектами и их назначение приведено в таблице 6 [28, с. 46].
Таблица 6 — Операторы управления транзакциями TCL
Название | Значение | |
CREATE ASSERTION | Создать ограничение | |
DROP ASSERTION | Удалить ограничение | |
GRANT | Предоставить привилегии пользователю или приложению на манипулирование объектами | |
REVOKE | Отменить привилегии пользователя или приложения | |
2.3 Преимущества и недостатки языка SQL
Так как существует общепринятый стандарт языка SQL, многие разработчики СУБД стараются придерживаться его. Использование базой данных языка SQL является одним из факторов определяющих ее успешность и распространенность.
Существуют различия в синтаксисе между конкретными СУБД, но в большинстве случаев запросы из одной СУБД могут быть перенесены на другую с минимальными изменениями.
Наличие стандартов и набора тестов для определения совместимости конкретной реализации SQL к общепринятому стандарту заметно способствует унификации языка.
Правда, стоит заметить, что сам по себе стандарт несколько раздут в размерах (Например, размер части «ядра» стандарта SQL занимает 1300 страниц текста) [20, с. 44].
Основные преимущества языка структурированных запросов SQL приведены на рисунке 10 [2, с. 90].
Для опытных программистов баз данных важно знать, каким образом СУБД будет обрабатывать его запрос, поэтому в большинстве СУБД предусмотрена возможность показать программисту последовательность действий, которую будет выполнять СУБД при запросе.
При этом программист имеет возможность «подсказывать» СУБД при формировании запроса, какие лучше использовать индексы и в каком порядке.
Рисунок 10 — Преимущества языка SQL
К основным недостаткам языка SQL относятся неопределенные значения, возможность дублирования, отсутствие поддержки свойства «=» и высокая избыточность. Современный язык структурированных запросов SQL считается сложным для освоения, с ним работают в основном программисты, хотя изначально он задумывался как язык, с которым сможет работать конечный пользователь [21, с. 245].
Таким образом, язык SQL является одним из языков, появившихся в результате разработки реляционной модели данных, который фактически превратился в стандартный язык реляционных баз данных, поэтому представляет большой интерес рассмотреть в третьей главе применение языка SQL в прикладном программировании.
3. Использование SQL в прикладном программировании
3.1 Обоснование выбора применяемых технологий для решения задачи
Сегодня существует много различных технологий, позволяющих создавать веб-приложения разной степени сложности. К ним относятся ASP, ASP.NET, PHP, JSP и многие другие. Наиболее популярной и распространённой технологией на сегодняшний день является PHP, во многом благодаря своей бесплатности [20, с. 72].
ASP.NET — это новая технология, разработанная компанией Microsoft и являющаяся частью среды .NET Framework. Она позволяет динамически создавать документы на веб-сервере, когда они запрашиваются по протоколу HTTP.
PHP — это открытая и бесплатная технология. PHP — это скриптовый язык, созданный для динамического вывода HTML.
JSP (Java Server Pages) — технология, позволяющая веб-разработчикам легко создавать содержимое, которое имеет как статические, так и динамические компоненты. По сути, страница JSP является текстовым документом, который содержит текст 2-х типов:
— статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML;
— XML и JSP элементы, которые конструируют динамическое содержимое.
Кроме этого могут использоваться библиотеки JSP тегов, а также EL (Expression Language), для внедрения Java-кода в статичное содержимое JSP-страниц.
Одним из важнейших факторов, влияющим на выбор той или иной технологии, является быстродействие, особенно при одновременной работе с множеством пользователей. Утверждать, что какая — то из технологий всегда выигрывает в быстродействии нельзя, необходимо рассматривать каждый конкретный случай отдельно.
Скорость работы обеспечивается тем, что все РНР-приложения работают в едином адресном пространстве, тогда как ASP.NET за счет сложной модели классов многократно проверяет и перепроверяет данные, удерживая каждое приложение в отдельном адресном пространстве.
Первый подход более быстр, но менее надежен, второй — более надежен, но за это приходится платить.
Отдельно стоит упомянуть об обеспечении быстродействия при взаимодействии с СУБД. Технология PHP ориентирована на работу с MySQL, а ASP.NET — с MS SQL Server. Это значит, что наилучшее быстродействие будет достигаться при использовании соответствующей СУБД.
JSP — одна из высокопроизводительных технологий, так как весь код страницы транслируется в Java-код сервлета с помощью компилятора JSP страниц Jasper, и затем компилируется в байт-код виртуальной машины Java (JVM). Контейнеры сервлетов, способные исполнять JSP страницы, написаны на языке Java, который может работать на различных платформах. JSP страницы загружаются на сервере и управляются из структуры специального Java Server Packet, который называется Java EE WEB Application, в большинстве своём упакованные в файловые архивы .war и .ear.
Выгода, которую дает технология JSP в сравнении с другими веб-технологиями заключается в том, что JSP является платформонезависимой, переносимой и легко расширяемой технологией для разработки веб-приложений.
Любая из представленных технологий сможет реализовать требования, предъявляемые к нашему приложению. Одним из ключевых фактов однако является хостинг созданной системы, и тут у РНР весомое преимущество, в интернете существует огромное число хостингов поддерживающих РНР в связке с MySQL, это и повлияло на выбор используемого языка программирования для серверной части системы [19, с. 170].
Для разработки клиентской части системы используется язык программирования JavaScript.
Язык JavaScript — это прототипно-ориентированный сценарный язык программирования. Является диалектом языка ECMAScript.
Язык JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.
Основные архитектурные черты: динамическая типизация, слабая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса.
На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке.
Язык JavaScript практически не имеет конкурентов, единственным языком программирования — конкурентом JavaScript является язык Dart, разработанный в google, но он так и не приобрел популярность.
А вот фреймворков, облегчающих разработку на JavaScript, создано десятки, например: Backbone. js, Ember. js, CanJS, AngularJS, Dojo, YUI, jQuery, KnockoutJS, ExtJS.
Для создания системы выбран фреймворк jQuery, как один из наиболее популярных, а также рекомендуемых для простых веб-приложений и сайтов. Обеспечивающих кроссбраузерность, легкую обработку событий, взаимодействие с удаленными сервисами, расширяемость и огромный набор плагинов. В работе был использован свободный набор инструментов для создания сайтов и веб-приложений Twitter Bootstrap, основанный на фреймворке jQuery.
Разрабатываемая система будет хранить значительные объёмы структурированной информации, к которой необходимо обеспечить эффективный множественный доступ. Исходя из этого, в качестве информационной системы была выбрана реляционная база данных.
Для управления базой данных необходимо выбрать СУБД, которая будет максимально отвечать требованиям, предъявляемым к разрабатываемому веб-приложению.
Довольно часто для малых и средних проектов используется СУБД MySQL, она первоначально была разработана как простая бесплатная база данных. Однако при правильной архитектуре ее можно использовать и для высоконагруженных отказоустойчивых систем. Связка РНР +MySQL является наиболее популярной у веб разработчиков, а также стала необходимым условием предоставления услуг для веб хостинга.
Для написания и локального тестирования системы выбрался Open Server. Это портативная программная платформа, созданная специально для веб-разработчиков с учётом их рекомендаций и пожеланий.
Программный комплекс имеет богатый набор серверного программного обеспечения, удобный, многофункциональный продуманный интерфейс, обладает мощными возможностями по администрированию и настройке компонентов. Платформа широко используется с целью разработки, отладки и тестирования веб-проектов, а так же для предоставления веб-сервисов в локальных сетях.
Open Server включает в себя: Apache, nginx, PHP, MySQL, phpMyAdmin, FTP-сервер, FileZilla.
Open Server— это пожалуй наилучший комплект на сегодняшний день для создания и тестирования локальных сайтов под Windows. Удобное меню, система запуска, простое создание виртуальных хостов, внимание к мелочам позволяют легко работать начинающим веб-разработчикам, а входящие в комплект компоненты устроят и профессиональных программистов.
Для хостинга сайта был выбран сервис Hostinger.ru. Компания Hostinger — лидер услуг бесплатного веб-хостинга. Пользователи могут создавать собственные сайты без лишних расходов, без рекламы и под любые потребности. На этом сервисе поддерживается PHP, MySQL и FTP-сервер. Это необходимый минимум для работоспособности разрабатываемой системы. Также сервис предоставляет собственные домены 3 уровня.
3.2 Реализация программной части веб — приложения
Реляционная структура базы данных приведена на рисунке 11.
Рисунок 11 — Реляционная структура базы данных Таблица users содержит информацию о пользователях. Поле nickname является логином пользователя на сайт. Поля password_hash и salt отвечают за хранение пароля пользователя в БД.
Таблица categories содержит список категорий (тем) рассылки и определить какой пользователь подписан, на какие категории рассылки помогает таблица subscriptions, если она содержит ключ ID пользователя — ID категории, то пользователь подписан на эту категорию.
Таблица mails хранит в себе все отправленные сообщения. Понять какие сообщения были отправлены для каких категорий помогает таблица mailing_map. Если она содержит ключ ID категории — ID сообщения, то данное сообщение передавалось для всех пользователей данной категории.
Таблица hashes требуется для автоматической авторизации пользователя со всех устройств, с которых он уже входил в систему. при загрузке сайта с устройства, если пользователь не залогинен, то в cookies проверяется хэш сайта, и если совпадают пары хэш и ID пользователя, происходит автоматическая авторизация пользователя.
Описание таблиц базы данных приведено в Приложении Б.
Запросы, формирующие базу данных, приведены в Приложении В.
Для работы с базой данных и формирования контента сайта используется язык php.
Описание взаимодействия с базой данных средствами PHP приведено в Приложении Г.
3.3 Описание общей схемы взаимодействия компонент веб-приложения, основные сценарии работы
Попав на сайт, пользователь может зарегистрироваться или авторизоваться. Если пользователь попытается подписаться на рассылку без авторизации, то всплывет модальное окно с приглашением войти на сайт. Пользователи могут изменять настройки своих подписок.
Администратор имеет расширенный интерфейс, он может изменять настройки пользователь, а также изменять настройки категорий рассылок в специальных меню, доступных только людям с правами администратора. Также он может создать дополнительные категории, посмотреть архив рассылок и создать свою собственную рассылку.
Все события обрабатываются скриптом index. php или скриптами, доступными в папке / scripts. Все скрипты из этой папке не опасны, т.к. не содержат информации для подключения к базе данных.
Схема переходов пользователя приведена на рисунке 12.
Рисунок 12 — Схема переходов пользователя Как видно из рисунка 12 схема переходов пользователя включает регистрацию, авторизацию, восстановление пароля, подписаться и отписаться от категории.
Основные страницы веб — приложения приведены в Приложении Д.
В третьей главе курсовой работы рассмотрен практический пример использования SQL в прикладном программировании на основании разработки веб — приложения, для которого была разработана и описана реляционная база данных, созданы SQL запросы по работе с базой данных и описан интерфейс пользователя.
Заключение
В первом разделе данной курсовой работы были изучены основные понятия и технологии распределенной обработки данных.
База данных представляет собой набор логически связанных данных, которые предназначен для удовлетворения информационных потребностей пользователей, а система управления базами данные — это программное обеспечение (ПО), с помощью которого пользователи могут определять, создавать и поддерживать базу данных, а также получать к ней контролируемый доступ.
Проведена классификация баз данных и СУБД по степени распределенности, по технологии хранения данных, в зависимости от характера хранимой информации и способа хранения данных, а также по содержимому.
Проведен сравнительных анализ основных моделей построения баз данных, обоснованно выделена реляционная модель построения баз данных для дальнейшего исследования.
Реляционная модель данных представляет собой логическую модель данных, построенную на основе набора отношений и аспекта целостности, где отношения отвечают определенным условиям целостности и принципам обработки, с помощью которого реляционная модель данных поддерживает операторы обработки отношений, таких как реляционная алгебра и реляционное исчисление.
В результате изучения технологий распределенной обработки данных была рассмотрена технология модели «клиент-сервер» основана на принципе взаимодействия двух программных процессов, в котором клиентский процесс запрашивал некоторые услуги, а серверный — обеспечивал их выполнение, причем один серверный процесс может обслужить множество клиентских процессов.
Также для распределения указанных функций рассмотрены структура, достоинства и недостатки двухуровневых моделей: модель удаленного управления данными и модель файлового сервера, которые исключают недостатки одноуровневой «клиент-серверной» технологии.
На основании проведенного исследования в первой главе обоснованно выбраны для дальнейшего исследования реляционная модель построения баз данных и модель удаленного управления данных, как наиболее подходящие для распределенной обработки данных с использование SQL-запросов к серверу БД.
Во втором разделе были рассмотрены особенности построения языка структурированных запросов SQL, который является информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных.
Каждое предложение SQL — это запрос или обращение к базе данных, которое приводит к изменению в базе данных.
Таким образом, использование SQL сводится, по сути, к формированию всевозможных выборок строк и совершению операций над всеми записями, входящими в набор.
Различают следующие основные операторы SQL: операторы определения данных DDL, операторы манипулирования данными DML, операторы управления транзакциями TCL.
Наличие стандартов и набора тестов для определения совместимости конкретной реализации SQL к общепринятому стандарту заметно способствует унификации языка. При этом программист имеет возможность «подсказывать» СУБД при формировании запроса, какие лучше использовать индексы и в каком порядке.
В третьем разделе данной курсовой работе рассмотрен практический пример использования SQL в прикладном программировании на основании разработки веб — приложения, для которого была разработана и описана реляционная база данных, созданы SQL запросы по работе с базой данных и описан интерфейс.
В процессе выполнения курсовой работы решены следующие задачи:
1) раскрыты сущность понятий база данных, системы управления базами данных путем изучения классификации баз данных и СУБД по степени распределенности, по технологии хранения данных, по содержимому, по моделям построения;
2) рассмотрены особенности реализации реляционной модели данных;
3) рассмотрены технологии распределенной обработки данных путем определения из достоинств и недостатков, проведения сравнительного анализа, а также выделена технология, которая наиболее подходит для распределенной обработки данных с использованием SQL-запросов к серверам БД;
4) выделена структура и определены назначения основных операторов SQL: операторов определения данных DDL, операторов манипулирования данных DML, операторов управления данными DCL;
5) рассмотрены и реализованы на практике возможности использования SQL в прикладном программировании.
Учитывая, что все поставленные задачи курсовой работы решены, можно обоснованно утверждать, что главная цель исследования — достигнута.
1. Астахова И. Ф., Толстобров А. П., Мельников В. М. SQL в примерах и задачах. — Мн.: Новое знание, 2011. — С.4
2. Боуман Дж.С., Эмерсон С. Л., Дарновски М. Практическое руководство по SQL. — Вильямс, 2011. — С.56−90
3. Гарсиа-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных. Полный курс. — Вильямс, 2010. — С.125
4. Дейт К.
Введение
в системы баз данных, 8-е издание. — Вильямс, 2006. — С.725
5. Дейт К. SQL и реляционная теория. Как грамотно писать код на SQL. — Символ-Плюс, 2010. — С.123
6. Дейт К., Дарвен Х. Основы будущих систем баз данных. Третий манифест. — Янус-К, 2011. — С.102
7. Дунаев В. В. Базы данных. Язык SQL. — СПб.: БХВ-Петербург, 2010. — С.88
8. Дж. Кастаньетто, Х. Рават, С. Шуман, К. Сколло, Д. Велиаф «Профессиональное РНР программирование». — Пер. с англ. — СПб: Символ-Плюс, 2010. — С.76
9. Жилин Д. М. Теория систем: опыт построения курса. — КомКнига, 2011. — С.123
10. Иванова Г. С. — «Основы программирования» Учебник для вузов. — М.: Изд-во МГТУ им. Н. Э. Баумана, 2010. — С.156
11. Коггзолл Джон. PHP 5. Полное руководство — М.: Вильямс, 2012 — С.336
12. Кренке Д. Теория и практика построения баз данных. — Питер, 2010. — С.206
13. Мирошниченко Г. Реляционные базы данных. Практические приемы оптимальных решений. — СПб.: БХВ-Петербург, 2011. — С.199
14. Новиков Б., Домбровская Г. Настройка приложений баз данных. — BHV, 2011. — С.22
15. Советов Б. Я., Цехановский В. В., Чертовской В. Д. Базы данных. Теория и практика.- Высшая школа, 2010. — С.49
16. Скотт В. Эмблер, Прамодкумар Дж. Садаладж Рефакторинг баз данных. Эволюционное проектирование. — Вильямс, 2010. — C.36
17. Тоу Д. Настройка SQL. Для профессионалов. — Питер, 2011. — С.103
18. Фейт С. TCP/IP. Архитектура, протоколы и реализация (включая IP версии 6 и IP Security) — Питер, 2011. С.196
19. MySQL. Библиотека профессионала — Киев: Диалектика, 2012 — С.170−179
20. PHP/MySQL для начинающих — Кудиц-образ, 2010 — С.44−108
21. Теория и практика построения баз данных: Д. Крёнке. — Питер, 2011. — С.223−250
22. Базы данных. «Проектирование, реализация и сопровождение», Томас Конном, Королинг Берг — 2010. — С.102
23. Microsoft Access 2007. Шаг за шагом: Практическое пособие / Пер. с англ. — М.: ЭКОМ, 2011. — С.63
24. Багриновский К. А. Хрусталев Е.Ю. Новые информационные технологии. — М.: ЭКО, 2011. — С.122
25. Информатика и информационно-коммуникационные технологии. Базовый курс: И. Г. Семакин, С. В. Русаков, Л. В. Шестакова. — М: БИНОМ, Лаборатория знаний, 2010. — С. 169
26. Компьютерные технологии обработки информации / Под ред. С. В. Назарова. — М.: Финансы и статистика, 2005. — С.108
27. Соболь Б. В., Галин А. Б., Панов Ю. В. и др. Информатика: учебник. — М.: Феникс, 2007. — С.223
28. Шкарина Л. Язык SQL: учебный курс. — СПб.: Питер, 2001 — С.23−96
Приложение, А Характеристики объектно-ориентированной модели данных
Название | Значение | |
Поддержка сложных объектов | Предусмотрена возможность создания составных объектов за счет применения конструкторов составных объектов. Необходимо, чтобы конструкторы объектов были ортогональны, то есть любой конструктор можно было применять к любому объекту | |
Поддержка индивидуальности объектов | Основным требованием является, что все объекты должны иметь уникальный идентификатор, который не зависит от значений их атрибутов | |
Поддержка инкапсуляции | Корректная инкапсуляция достигается за счет того, что программисты обладают правом доступа только к спецификации интерфейса методов, а данные и реализация методов скрыты внутри объектов | |
Поддержка типов и классов | Необходима концепция между типами и классами, компилятор может использовать информацию для проверки выполняемых с переменной операций на совместимость с ее типом | |
Поддержка наследования типов и классов от их предков | Подкласс должен наследовать атрибуты и методы его супертипа и для обеспечения этой функциональности связывание имен методов в системе не должно выполняться до времени выполнения программы | |
Вычислительная полнота | Язык программирования должен быть общего назначения для манипулирования данными | |
Расширенность набора типа данных | Наличие средств для создания новых типов данных на основе набора предопределенных системных типов. Особое требование — это то, что между способами использования системных и пользовательских типов данных не должно быть никаких различий | |
Приложение Б Описание таблиц базы данных
Таблица users | ||
`u_id` | Первичный ключ пользователя | |
`nickname` | Логин пользователя | |
`email` | Адрес электронной почты пользователя | |
`password_hash` | Хэш пароля пользователя | |
`salt` | Соль, используемая для получения пароля пользователя | |
`reg_date`, | Дата регистрации | |
`last_update` | Дата последних изменений профиля пользователя | |
`role` | Права пользователя | |
Таблица categories | ||
`id` | Первичный ключ категории | |
`name` | Название категории | |
`description` | Описание категории | |
`promo_content` | Контент, демонстрирующийся на сайте для рекламы категории | |
`date_create` | Дата создания категории | |
Таблица subscriptions | ||
`fk_user` | Внешний ключ к таблице пользователей | |
`fk_category | Внешний ключ к таблице категорий | |
Таблица mails | ||
`id` | Первичный ключ сообщения | |
`content` | Содержание сообщения | |
`date_create` | Дата создания сообщения | |
Таблица mailing_map | ||
`fk_mail` | Внешний ключ к таблице сообщений | |
`fk_category` | Внешний ключ к таблице категорий | |
Таблица hashes | ||
`h_id` | Первичный ключ хэша | |
`u_fk` | Внешний ключ к таблице пользователей | |
`s_hash` | Значение хэша | |
`date_create` | Дата создания записи | |
`last_update` | Дата последнего обновления хэша | |
Приложение В Запросы, формирующие базу данных
CREATE DATABASE IF NOT EXISTS `emailbd` /*!40 100 DEFAULT CHARACTER SET utf8 */;
USE `emailBD`;
CREATE TABLE IF NOT EXISTS `users` (
`u_id` int (11) NOT NULL AUTO_INCREMENT,
`nickname` varchar (50) NOT NULL,
`email` varchar (50) NOT NULL,
`password_hash` varchar (64) NOT NULL,
`salt` varchar (64) DEFAULT NULL,
`reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_update` datetime DEFAULT NULL,
`role` varchar (30) DEFAULT NULL,
PRIMARY KEY (`u_id`),
UNIQUE KEY `nickname` (`nickname`),
UNIQUE KEY `email` (`email`),
KEY `password_hash` (`password_hash`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `categories` (
`id` int (11) NOT NULL AUTO_INCREMENT,
`name` varchar (100) NOT NULL,
`description` text,
`promo_content` text,
`date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `subscriptions` (
`fk_user` int (11) NOT NULL,
`fk_category` int (11) NOT NULL,
PRIMARY KEY (`fk_user`,`fk_category`),
KEY `fk_category` (`fk_category`),
CONSTRAINT `subscriptions_ibfk1` FOREIGN KEY (`fk_user`) REFERENCES `users` (`u_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `subscriptions_ibfk2` FOREIGN KEY (`fk_category`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `mails` (
`id` int (11) NOT NULL AUTO_INCREMENT,
`content` text,
`date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `mailing_map` (
`fk_mail` int (11) NOT NULL,
`fk_category` int (11) NOT NULL,
PRIMARY KEY (`fk_mail`,`fk_category`),
KEY `fk_category` (`fk_category`),
CONSTRAINT `mailing_map_ibfk1` FOREIGN KEY (`fk_mail`) REFERENCES `mails` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `mailing_map_ibfk2` FOREIGN KEY (`fk_category`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `hashes` (
`h_id` int (11) NOT NULL AUTO_INCREMENT,
`u_fk` int (11) NOT NULL,
`s_hash` varchar (64) DEFAULT NULL,
`date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_update` datetime DEFAULT NULL,
PRIMARY KEY (`h_id`),
KEY `hashes_ibfk1` (`u_fk`),
CONSTRAINT `hashes_ibfk1` FOREIGN KEY (`u_fk`) REFERENCES `users` (`u_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Приложение Г
Взаимодействие с БД средствами PHP
Mail — Класс письмо | ||
Private: | ||
$id | id письма в таблице | |
$content | Содержимое письма | |
$date_create | Дата добавления в таблицу письма | |
Public : | ||
__construct ($data) | Вызывает контсруктор объекта (устанавливает значения полей) | |
__get_id () | Получить значение переменной $id | |
__get_content () | Получить значение переменной $content | |
__get_date_create () | Получить значение переменной $ date_create | |
__set_id ($val) | Установить значение переменной $id | |
__set_content ($val) | Установить значение переменной $content | |
__set_date_create ($val) | Установить значение переменной $ date_create | |
MailManager — Отвечает за создание письма и рассылку пользователям | ||
public static: | ||
CreateMail ($content) | Сохраняет письмо в БД | |
SendMailText ($mailAdres,$content) | Отправляет письмо по указанному адресу | |
CreateMailing ($listCategories,$content) | Выполняет рассылку всем пользователям, подписанным на категории, содержащимся в списке $ listCategories | |
GetListMails ($start,$skip) | Возвращает массив писем размером $skip начиная с элемента $start из БД | |
Category — Класс категория (тема подписки) | ||
Private: | ||
$id | id категории в таблице | |
$name | Название категории | |
$description | Описание категории | |
$promo_content | Контент, который будет представлять на сайте категорию. | |
$date_create | Дата добавления в таблицу письма | |
Public : | ||
__construct ($data) | Вызывает контсруктор объекта (устанавливает значения полей) | |
__get_id () | Получить значение переменной $id | |
__get_name () | Получить значение переменной $name | |
__get_description () | Получить значение переменной $ description | |
__get_promo_content () | Получить значение переменной $promo_content | |
__get_date_create () | Получить значение переменной $date_create | |
__set_id ($val) | Установить значение переменной $id | |
__set_name ($val) | Установить значение переменной $name | |
__set_description ($val) | Установить значение переменной $description | |
__set_promo_content ($val) | Установить значение переменной $ promo_content | |
__set_date_create ($val) | Установить значение переменной $ date_create | |
MailManager — Управляет множеством товаров как одной сущностью | ||
public static: | ||
CreateMail ($content) | Сохраняет письмо в БД | |
SendMailText ($mailAdres,$content) | Отправляет письмо по указанному адресу | |
CreateMailing ($listCategories,$content) | Выполняет рассылку всем пользователям, подписанным на категории, содержащимся в списке $ listCategories | |
GetListMails ($start,$skip) | Возвращает массив писем размером $skip начиная с элемента $start из БД | |
User — Класс пользователь | ||
Private: | ||
$id | id пользователя в таблице | |
Адрес электронной почты пользователя | ||
$nickname | Имя пользователя на сайте | |
$password_hash | Хэш пароля пользователя | |
$salt | Соль пользователя при получении хэша пароля | |
$reg_date | Дата регистрации пользователя | |
$last_update | Последнее обновление настроек пользователя | |
$role | Права пользователя (user/admin) | |
Public: | ||
__construct ($data) | Вызывает контсруктор объекта (устанавливает значения полей) | |
__get_u_id () | Получить значение переменной $u_id | |
__get_role () | Получить значение переменной $role | |
__get_email () | Получить значение переменной $email | |
__get_nickname () | Получить значение переменной $nickname | |
__get_reg_date () | Получить значение переменной $reg_date | |
__get_last_update () | Получить значение переменной $last_update | |
__get_salt () | Получить значение переменной $salt | |
__get_password_hash () | Получить значение переменной $ password_hash | |
__set_u_id ($val) | Установить значение переменной $u_id | |
__set_role ($val) | Установить значение переменной $role | |
__set_email ($val) | Установить значение переменной $email | |
__set_nickname ($val) | Установить значение переменной $nickname | |
__set_reg_date ($val) | Установить значение переменной $reg_date | |
__set_last_update ($val) | Установить значение переменной $last_update | |
__set_salt ($val) | Установить значение переменной $salt | |
__set_password_hash ($val) | Установить значение переменной $ password_hash | |
UserManager — Класс отвечает за регистрацию/ аутентификацию/удаление пользователей | ||
Public : | ||
__construct () | Вызывает контсруктор объекта (устанавливает значения полей) | |
Public static : | ||
generateSalt () | Возвращает случайную последовательность для соли к паролю пользователя | |
myCrypt ($pass,$salt)() | Возвращает хэш пароля пользователя и соли | |
updateHashe_Cookie ($q_id,$q_hahs) | Устанавливает в cookie новое значение параметра SH (используется для автоматического логина пользователя) | |
checkUserByNickname_Pass ($login,$pass) | Сравнивает введенный пароль пользователя с хранящимся в базе (их хэши) и возвращает ID пользователя в случае совпадения | |
setCookie ($id=null) | Устанавливает cookie в браузер пользователя (параметры userid, SH) | |
delCookie ($id=null) | Удаляет cookie с браузера пользователя | |
refreshUser ($q_id,$q_hahs) | Обновляет параметр SH в cookie пользователя | |
registrationUser ($login,$pass,$mail) | Регистрирует пользователя — сохраняет в БД его логин, пароль и адрес электронной почты | |
recoveryUserByNickname ($login) | Отсылает на почту пользователя по его запросу новый пароль, сгенерированный автоматически | |
recoveryUserByID ($userid) | Отсылает на почту пользователя по запросу администратора новый пароль, сгенерированный автоматически | |
sendUserNewPassByMail ($usr0,$new_pass) | Функция отвечает непостредственно за отсылку пользователю пароля | |
checkUserByNickname ($login) | Проверяет наличие в БД пользователя с переданным логином | |
deleteUser ($id) | Удаляет пользователя из БД | |
SettingController — Класс отвечает за действия над пользователями из административной части сайта | ||
Public static : | ||
getListUsers () | Возвращает список пользователей | |
getListCategories () | Возвращает списко категорий | |
getUserByID ($u_id) | Возвращает данные пользователя по его ID | |
getCategoryByID ($cat_id) | Возвращает данные каотегории по ее ID | |
getCategoriesMapByUser ($u_id) | Возвращает все категории и выделяет категории, на которые подписан пользователь | |
getNumberSubscriberByCategoryId ($cat_id) | Вовзращает число подписанных пользователей на категорию | |
updateSubscription ($userid,$cat_id,$statuse) | Изменяет состояние подписки пользователя на категорию | |
updateRole ($userid,$role) | Изменяет права пользователя на сайте | |
newCategory ($name,$description,$content) | Создает новую категорию | |
updateCategory ($cat_id,$name,$description,$content) | Изменяет категорию | |
deleteCategory ($cat_id) | Удаляет категорию | |
DBConnectКласс для работы с БД | ||
private static: | ||
$DB_HOST | Адрес БД | |
$DB_NAME | Имя БД | |
$DB_USER | Имя пользователя в БД | |
$DB_PASS | Пароль пользователя в БД | |
protected $DBH; | Объект — соединение с БД | |
public function: | ||
getUserByID ($id=null) | Возвращает пользователя | |
deleteUserByID ($u_id) | Удаляет пользователя из БД | |
getUserByNickname ($nickname=null) | Возвращает пользователя по его логину | |
getUserByNicknameForRecovery ($login) | Возвращает пользователя (его ID) если он есть в БД (логин) | |
getUserByMail ($mail=null) | Возвращет пользователя по его адресу электронной почты | |
addSubscription ($fk_user,$fk_category) | Добавляет подписку пользователю на категорию | |
DBConnectКласс для работы с БД | ||
delSubscription ($fk_user,$fk_category) | Удаляет подписку пользователю на категорию | |
addMailingMap ($fk_mail,$fk_category) | Добавляет в БД информацию о том, какое сообщение было отправлено по каким категориям | |
delMailingMap ($fk_mail,$fk_category) | Удаляет из БД информацию о том, какое сообщение было отправлено по каким категориям | |
addUser ($nickname,$pass_hash, $salt,$mail=null,$role='user') | Добавляет в БД нового пользователя | |
addCoupleUserID_Hash ($u_id,$hash) | Добавляет в таблицу хэшей пару — ID пользователя и его хэщ | |
delCoupleUserID_Hash ($u_id,$hash | Удаляет запись из таблицы хэшей | |
updCoupleUserID_Hash ($u_id,$hash,$new_hash) | Обновляет запись в таблице хэшей | |
getCountCoupleUserID_Hash ($u_id,$hash) | Возвращает из БД число устройств, с которых залогинен пользователь | |
getCountUsersByMail ($mail) | Возвращает число пользователей в БД с указанным адресом электронной почты | |
updPassword_SoltByUserID ($u_id,$new_pass_hash,$new_solt) | Обновляет хэш и соль пароля пользователя | |
getListUsers ($skip=0,$max=1000) | Возвращает список пользователей | |
getListCategories ($skip=0,$max=100) | Возвращает список категорий | |
getMapCategoriesByUser ($userid) | Возвращает список всех категорий и отмечает на какие подписан пользователь | |
getCountSubscriberByCategoryID ($cat_id) | Возвращает число пользователей подписанных на категорию | |
getCategoryByID ($id=null) | Возвращает данные о категории | |
updUserRoleByID ($id,$role) | Обновляет права пользователя на сайте | |
addCategory ($name,$description,$content) | Добавляет новую категорию | |
updateCategory ($id, $name, $description, $content) | Обновляет параметры категории | |
deleteCategory ($id) | Удаляет категорию | |
addMail ($content) | Записывает в БД текст письма | |
getListEmailsByCategoriesID ($listCategoryID) | Возвращает массив адресов электронных почт пользователей, подписанных на категории, указанные в параметр | |
getListMailsForArhive ($start=0,$skip=20) | Возвращает массив писем, которые были посланы по категориям, указанным в параметре | |
Приложение Д Основные элементы интерфейса пользователя сервиса подписки Рисунок П1 — Главная страница сайта Рисунок П2 — Страница авторизации Рисунок П3 — Страница управления настройками Рисунок П4 — Страница архива рассылок Рисунок П5 — Страница создания новой рассылки