Проектирование информационной системы для автоматизации процесса продажи туров

Моделирование процесса продажи туров. Анализ уровня технической и программной оснащенности предприятия. Требования к проектируемой информационной системе. Обзор программных аналогов. Обоснование проектирования собственной ИС и выбора средств разработки.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 23.01.2018
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Таблица 7. Результаты теста TPC

Название

Количество транзакций, tpmC

Стоимость транзакции, долл./tpmC

Монитор транзакций

Microsoft SQL

Server 2005 х64

661,475

1.16USD

Microsoft COM+

Oracle

Database

NgStandard

631,766

1.08 USD

Microsoft COM+

Рассмотрим критерий «Требования к рабочей среде». В Таблица 8приводятся результаты анализа альтернатив по критерию «Поддерживаемые операционные системы».

Таблица 8. Поддерживаемые ОС рассматриваемых систем

Microsoft SQL Server

MySQL

Oracle

Postgre SQL

Windows

+

+

+

+

Mac OS

+

+

+

+

Linux

+

+

+

+

BSD

+

+

-

+

UNIX

+

+

+

+

AmigaOS

+

+

-

-

Symbian

+

+

-

-

На основании изложенного формируем итоговую сравнительную таблицу (Таблица 9).

Таблица 9. Сравнительная характеристика СУБД

Oracle

Microsoft SQL Server

My SQL

Postеgre SQL

Структура данных

5,0

5,0

5,0

5,0

Функциональные возможности

4,0

5,0

4,0

4,0

Производительность

4,5

5,0

5,0

4,5

Требования к рабочей среде

5,0

5,0

5,0

5,0

Схема лицензирования

Коммерческая

Коммерческая

Бесплатная

Бесплатная

Поддержка производителем

5,0

5,0

5,0

4,0

ИТОГО:

4,7

5

4,8

4,5

2.2.2 Обзор языков программирования

Для реализации требований к архитектуре информационной системы язык программирования должен удовлетворять следующим основным критериям:

Кроссплатформенное программирование.

Многопоточность.

Эффективная работа с сетью и памятью.

Разработка клиентского и серверного приложений.

Функциональная, развивающаяся IDE.

Рассмотрим наиболее популярные языки, отвечающие указанным требованиям - C# и Java. С точки зрения разработчика языки Java и C# очень похожи - это два языка программирования, развивающих язык программирования С++, с синтаксисом, во многом наследующим синтаксис С++, и созданных во многом в условиях конкуренции, и, вследствие этого, обладающих определённым сходством, а также имеющих и ряд различий.

Исходный текст программ, написанных на Java и C# компилируется в промежуточный код, не зависящий от языка и платформы - byte code; этот код в дальнейшем выполняется в специальной управляемой среде.

CIL (Common Intermediate Language, он же MSIL, он же просто IL) - является байт-кодом с полиморфными (обобщенными) инструкциями.

Так, если в Java используется отдельная инструкция для каждого типа операций с различными типами (например: fadd - сложение 2-х float, iadd - сложение 2-х integer), то в CIL для каждого вида операций существует лишь одна инструкция с полиморфными параметрами (например, существует только одна инструкция - add, производящая сложение и float, и integer). Вопрос решения генерации соответствующих x86-инструкций ложится на JIT.

Количество инструкций у обеих платформ примерно одинаковое. Сравнивая список команд байт-кода Java и CIL, видно, что 206 у Java, и 232 -- CIL, однако не забываем, что у Java многие команды просто повторяют функционал друг друга.

Из других общих черт, являющихся следствием попытки улучшить C++ можно выделить следующие:

1. Автоматический сбор мусора (Garbage Collection) и запрет на использование указателей. В C# допускается ограниченное использование указателей в блоках кода, помечаемых как "ненадежные" (unsafe).

2. Отсутствие заголовочных файлов. Весь код помещается в пакеты (packages) и сборки(assemblies). Никаких проблем с порядком объявления классов в случае наличия перекрестных ссылок.

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

4. Многопоточность поддерживается путем блокирования объектов.

5. Интерфейсы, множественная реализация интерфейсов классом, однократное наследование базового класса производным.

6. Внутренние классы

7. Отсутствие концепции наследования классов с заданным уровнем доступа.

8. Отсутствие глобальных функций и констант, все элементы должны принадлежать классам.

9. Массивы и строки со встроенной длиной и проверкой границ.

10. Любая величина должна быть проинициализирована до того, как будет использована.

11. Блоки try могут иметь заключительное предложение finally.

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

Кроссплатформенное программирование. Java без проблем может работать во всевозможных операционных системах и средах. Известны многочисленные реализации JVM, иногда с открытыми исходными кодами.

C# также является кроссплатформенным стандартом. Его первичная платформа -- Windows, но существуют и реализации для других платформ, самая значительная из которых -- проект Mono.

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

Эффективная работа с сетью и памятью. Для эффективной работы с памятью в обоих средах встроен автоматический сбор мусора, однако эффективность JVMбайт кодового представления вкупе с агрессивными технологиями сжатия, такими как pack200, делают Java средством распространения сетевых приложений, по сравнению с C# более неприхотливым к полосе пропускания.

Разработка клиентского и серверного приложений. С точки зрения разработки клиентских приложений C# выглядит более привлекательно, т.к. целевая платформа информационной системы - Windows, и тут строгая приверженность Java принципу «пишем один раз, используем везде» затрудняет использование по максимуму специфических возможностей и режимов работы в каждой конкретной настольной системе. На стороне сервера, возможно, два языка наиболее близки к тому, чтобы считаться конкурентами. Java с её платформой J2EE (Java(2) Enterprise Edition) и C# с его ASP.NET и WCF соперничают в области создания динамического веб-контента и приложений. На этом рынке широко используются и поддерживаются оба языка, вместе с комплектом инструментов и сопровождающих продуктов, имеющихся для JavaEE и .NET.

Опираясь на проведенный анализ составляем таблицу сравнительных характеристик языков программирования Таблица 10.

Таблица 10. Сравнительная характеристика языков программирования

C#

Java

Кроссплатформенное программирование.

5,0

5,0

Многопоточность

5,0

5,0

Эффективная работа с сетью и памятью.

4,5

5,0

Разработка клиентского и серверного приложений.

5,0

4,0

Функциональная, развивающаяся IDE.

5,0

VisualStudio

MonoDevelop

5,0

NetBeans

Eclipse

IntelliJ IDEA

ИТОГО

24,5

24,0

Как видно из проведенного анализа C# и Java являются мощными языками, а также мощными платформами (.NET и Java). Однако, для каждой задачи существует свой инструмент, и для разработки информационной системы ООО «МИР» более подходящим выбором будет C#.

2.3 Обоснование проектирования собственной ИС и выбора средств разработки

В настоящий момент процесс обслуживания клиентов в ООО «МИР» автоматизирован крайне незначительно, что, безусловно, сдерживает рост предприятия. Однако, как было показано ранее (см. п. 1.3) уровень технической и программной оснащенности позволяет развернуть достаточно мощную информационную систему. Применение существующих на рынке решений имеет ряд недостатков, главные из которых - высокая стоимость, сложность кастомизации, ограниченные возможности развития и потенциальные риски утечки данных. Также, дополнительным аргументом в пользу решения о разработке собственной информационной системы может служить наличие в структуре предприятия полноценного отдела информационных технологий. В перспективе разработка информационной системы может создать предпосылки для технологического доминирования на рынке туристических услуг.

Принимая во внимание проведенные исследования средств разработки компонентов информационной системы:

- в качестве СУБД выбираем MySQL

- приложение-клиент будем разрабатывать на языке C# в IDE Visual Studio

- реализацию сервера выполним в виде службы на языке C# с использованием технологии Windows Communication Foundation (WCF), которая представляет платформу для построения сервисноориентированных приложений.

С помощью WCF можно отправлять данные в виде асинхронных сообщений от одной конечной точки службы к другой. Конечная точка службы может входить в постоянно доступную службу, размещаемую в IIS, или представлять службу, размещаемую в приложении. Конечная точка может быть клиентом службы, которая запрашивает данные от конечной точки службы.

3. Проектная часть

3.1 Моделирование процесса продажи туров на ООО «МИР». Модель TO-BE

Проектируемая информационная система предназначена для автоматизации менеджера по направлению. На контекстной диаграмме назначение информационной системы изобразим в виде стрелки механизма (Приложение Б). Рассматривая диаграмму декомпозиции А0 приходим к выводу что на данном уровне внедрение информационной системы повлияет на каждую функцию, но ни одну не исключит. При декомпозиции функции «Найти тур» отмечаем, что функцию поиска по дополнительным требованиям клиента полностью возьмет на себя информационная система. На диаграмме декомпозиции функции «Оформить документы по продаже тура»фиксируем изменения в части бронирования туров и оформления документации.

3.2 Объектно-ориентированное проектирование информационной системы продажи туров на ООО «МИР»

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

Диаграмма вариантов использования (use case diagram);

Диаграмма классов (class diagram);

Диаграмма последовательности (sequence diagram);

Диаграмма кооперации (collaboration diagram);

Диаграмма состояний (state chart diagram);

Диаграмма деятельности (activity Diagram);

Диаграмма компонентов (component diagram);

Диаграмма развертывания (deployment diagram).

3.2.1 Диаграмма вариантов использования

Проектируемая система представляется в виде множества сущностей или актеров, взаимодействующих с системой с помощью прецедентов. При этом актером (actor) или действующим лицом называется любая сущность, взаимодействующая с системой извне, в нашем случае это будут сотрудники ООО «МИР», клиенты и туроператоры. Каждый вариант использования определяет некоторый набор действий, совершаемый системой при диалоге с актером. В соответствии с моделью бизнес-процесса продажи туров опишем схему взаимодействия актеров с информационной системой. Клиент устанавливает требования к туру в процессе диалога с менеджером. Менеджер проходит авторизацию в информационной системе продажи туров и руководствуясь пожеланиями клиента осуществляет поиск тура и предлагает клиенту найденные варианты. После согласования найденного тура с клиентом, менеджер вводит в систему данные клиента, бронирует тур, распечатывает сформированный системой договор и документы клиента по туру. Взаимодействие туроператоров с информационной системой заключается в регулярном пополнении базы данных актуальными предложениями путевок.

Диаграмма вариантов использования информационной системы ООО «МИР» приведена в Приложении В.

3.2.2 Диаграмма классов

Диаграмма классов служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, различные взаимосвязи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывает их внутреннюю структуру (поля, методы…) и типы отношений (наследование, реализация интерфейсов …). На диаграмме классов не указывается информация о временных аспектах функционирования системы.

Учитывая требования к архитектуре системы - она должна быть трехуровневая (п. 1.4) - диаграммы классов будем разрабатывать отдельно для клиентской и серверной части. На сервере предусматриваем классы для работы с базой данных и интерфейсы взаимодействия с клиентским приложением. Диаграммы классов для клиента и сервера приведены в Приложении Г.

3.2.3 Диаграмма последовательности

Для моделирования взаимодействия объектов в языке UML используются соответствующие диаграммы взаимодействия. Взаимодействия объектов можно рассматривать во времени, и тогда для представления временных особенностей передачи и приема сообщений между объектами используется диаграмма последовательности. Взаимодействующие объекты обмениваются между собой некоторой информацией. При этом информация принимает форму законченных сообщений. Другими словами, хотя сообщение и имеет информационное содержание, оно приобретает дополнительное свойство оказывать направленное влияние на своего получателя. Диаграмма последовательности для процесса продажи тура приведена в Приложении Д.

3.2.4 Диаграмма кооперации

На диаграмме кооперации в виде прямоугольников изображаются участвующие во взаимодействии объекты, содержащие имя объекта, его класс и, возможно, значения атрибутов. Как и на диаграмме классов, указываются ассоциации между объектами в виде различных соединительных линий. При этом можно явно указать имена ассоциации и ролей, которые играют объекты в данной ассоциации.

В отличие от диаграммы последовательности, на диаграмме кооперации (Приложение Е) изображаются только отношения между объектами, играющими определенные роли во взаимодействии.

3.2.5 Диаграмма состояний

Главное предназначение этой диаграммы -- описать возможные последовательности состояний и переходов, которые в совокупности характеризуют поведение элемента модели в течение его жизненного цикла. Диаграмма состояний представляет динамическое поведение сущностей, на основе спецификации их реакции на восприятие некоторых конкретных событий. Диаграмму состояний (Приложение Ж) строим для основного назначения информационной системы - поиск и продажа тура.

3.2.6 Диаграмма деятельности

На диаграмме деятельности представляется логика и последовательность перехода от одних действий к другим. Описываются фрагменты поведения системы в контексте реализации потоков событий, т.е. потоки событий представляются в виде activity диаграмм.

На диаграммах применяются:

переходы - обозначают направление передачи управления;

точки принятия решений - переход, содержащий контрольное условие;

слияние и разделение потоков действий.

На диаграммах activity используются плавательные дорожки, которые разбивают диаграммы на зоны, которые связывают с конкретным актером, либо с некоторой частью системы.

Диаграмма деятельности варианта использования «Поиск тура»приведена в приложении И.

3.2.7 Диаграмма компонентов

Диаграмма компонентов, в отличие от ранее рассмотренных диаграмм, описывает особенности физического представления системы. Диаграмма компонентов позволяет определить архитектуру разрабатываемой системы, установив зависимости между программными компонентами, в роли которых может выступать исходный, бинарный и исполняемый код. Во многих средах разработки модуль или компонент соответствует файлу. Пунктирные стрелки, соединяющие модули, показывают отношения взаимозависимости, аналогичные тем, которые имеют место при компиляции исходных текстов программ. Основными графическими элементами диаграммы компонентов являются компоненты, интерфейсы и зависимости между ними. В нашем случае в диаграмму компонентов (Приложение К) войдут следующие основные компоненты системы: система управления базой данных, серверная сервисная служба, клиентское приложение.

3.2.8 Диаграмма развертывания

Диаграмма развертывания предназначена для визуализации элементов и компонентов программы, существующих лишь на этапе ее исполнения (runtime). При этом представляются только компоненты-экземпляры программы, являющиеся исполнимыми файлами или динамическими библиотеками. Те компоненты, которые не используются на этапе исполнения, на диаграмме развертывания не показываются.

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

Информационная система ООО «МИР» развертывается на двух серверах (СУБД и бизнес логика) и персональных компьютерах пользователей (Приложение Л), администрирование информационной системы осуществляется с отдельной рабочей станции.

3.3 Разработка реляционной базы данных информационной системы

3.3.1 Построение инфологической концептуальной модели

Цель инфологического моделирования - обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Основными конструктивными элементами инфологических моделей являются сущности, связи между ними и их свойства (атрибуты). В соответствии с назначением выделены следующие основные объекты базы данных информационной системы:

Страны содержащие курорты, для описания которых нужны следующие данные: идентификатор курорта, наименование, индекс популярности, название, отели, фотографии.

Туры: уникальный номер тура, дата и место вылета, дата и место прибытия, номер рейса, наименование туроператора, наименование курорта, отель, тип номера, питание, тип тура, цена.

Клиенты: ФИО, пол, дата рождения, номер телефона, номер и серия паспорта РФ, дата и место выдачи паспорта РФ, номер и серия заграничного паспорта, дата окончания действия загранпаспорта, электронная почта. С клиентами заключается договор на оказание туристических услуг. Основные характеристики договора: номер договора, дата, характеристика тура, сумма договора.

Сотрудники компании: табельный номер, ФИО, дата рождения, адрес, номер телефона, отдел, электронная почта. Для авторизации в базе данных сотрудникам, имеющим доступ необходим логин и пароль.

Анализ объектов позволяет выделить:

стержневые сущности «Страны», «Клиенты»;

слабые сущности «Курорт», «Сотрудник», (зависят от существования других сущностей);

ассоциативные сущности «Тур» (связывают Страну, Курорт и Заказчика), «Договор» (связывает Тур, Сотрудника компании и Заказчика).

Между выделенными сущностями можно установить следующие связи:

супертип-подтип - сущность «Страна» является супертипом для подтипов: «Курорт», «Валюта», «Город».

множественные безусловные - один-ко-многим (1:n) например, между Курортом и Страной (в каждой стране может быть один или несколько курортов, но каждый курорт находится только в одной стране), между Отделом и Сотрудниками (в каждом отделе может работать один или несколько сотрудников, но каждый сотрудник работает только в одном отделе), между Сотрудником и Договором (каждый сотрудник может заключать несколько договоров, но каждый договор заключен только одним сотрудником);

Полученная модель на языке инфологического проектирования описывается следующим образом:

Страна (номер страны, наименование русское, наименование английское, код, континент, население, площадь, плотность населения)

Клиент (индивидуальный номер, ФИО, пол, дата рождения, номер телефона, номер паспорта РФ, серия паспорта РФ, дата выдачи паспорта РФ, место выдачи паспорта РФ, номер загранпаспорта, серия загранпаспорта, дата окончания действия загранпаспорта, электронная почта)

Курорт (идентификатор курорта, наименование, индекс популярности, название) {Страна}

Сотрудник компании (табельный номер, ФИО, дата рождения, адрес, номер телефона, отдел, электронная почта, логин, пароль) {Отдел}

Договор[Сотрудник, Тур, Платеж] (номер, дата, характеристика тура, сумма договора) {Клиент}

Отдел [Сотрудник] (номер, название)

Отель [Тур] (инд. номер, название, категория, курорт, пляжная линия, рейтинг)

Тур [Туроператор, Отель, Курорт] (номер, дата вылета, место вылета, дата прибытия, место прибытия, номер рейса, наименование туроператора, наименование курорта, отель, тип номера, питание, тип тура, цена).

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

3.3.2 Разработка ER-модели базы данных

В качестве иллюстрации уровня сложности баз данных туроператоров можно привести перечень запросов XML-шлюза одного из туроператоров, Таблица 11.

Таблица 11. Перечень запросов XML-шлюза компании TEZ TOUR

URL

Название

1

http://xml.tez-tour.com/xmlgate/auth_data.jsp

Аутентификация

2

http://xml.tez-tour.com/xmlgate/list/hotelRooms.xml

Пары "отель-тип номера"

3

http://xml.tez-tour.com/xmlgate/list/countries.xml

Страны

4

http://xml.tez-tour.com/xmlgate/list/hotelTypes.xml

Категории отелей

5

http://xml.tez-tour.com/xmlgate/list/stayTypes.xml

Типы размещения

6

http://xml.tez-tour.com/xmlgate/list/room.xml

Типы номеров

7

http://xml.tez-tour.com/xmlgate/list/aircraftType.xml

Самолеты

8

http://xml.tez-tour.com/xmlgate/list/cities.xml

Города

9

http://xml.tez-tour.com/xmlgate/list/airports.xml

Аэропорты

10

http://xml.tez-tour.com/xmlgate/list/spoStops.xml

Спо-стопы

11

http://xml.tez-tour.com/xmlgate/list/flights.xml

Рейсы

12

http://xml.tez-tour.com/xmlgate/list/aircompanies.xml

Авиакомпании

13

http://xml.tez-tour.com/xmlgate/list/spoRegionSets.xml

Типы туров (они же Туры, они же регионы СПО).

14

http://xml.tez-tour.com/xmlgate/list/groupTypeAges.xml

Возрастные группы

15

http://xml.tez-tour.com/xmlgate/list/flightDepartures.xml

Вылеты

16

http://xml.tez-tour.com/xmlgate/list/seatSets.xml

Наличие мест на рейсе

17

http://xml.tez-tour.com/xmlgate/list/hotelPansions.xml

Пары "отель-пансион"

18

http://xml.teztour.com/xmlgate/list/saleTasks.d.xml

Мгновенные подтверждения

19

http://xml.tez-tour.com/xmlgate/list/transferTypes.xml

Типы трансферов

20

http://xml.tez-tour.com/xmlgate/list/currencies.xml

Валюты

21

http://xml.tez-tour.com/xmlgate/list/genders.xml

Пол

22

http://xml.tez-tour.com/xmlgate/list/hotelStops.d.xml

Стопы по отелям

23

http://xml.tez-tour.com/xmlgate/list/regions.xml

Регионы

24

http://xml.tez-tour.com/xmlgate/list/pansions.xml

Пансионы

25

http://xml.tez-tour.com/xmlgate/list/hotelResources.xml

Список существующих пансионов и типов комнат в конкретном отеле

26

http://xml.tez-tour.com/xmlgate/list/hotels.xml

Отели

27

http://xml.tez-tour.com/xmlgate/agency/flexCommission

Правила гибкой комиссии

28

http://xml.tez-tour.com/xmlgate/order/view?orderId=

Просмотр заявки

29

http://xml.tez-tour.com/xmlgate/order/list?param=

Список заявок

30

http://xml.tez-tour.com/xmlgate/order/orderFromOfferId?

Формирование xml-заявки

38

http://xml.tez-tour.com/xmlgate/order/сalculate

Расчет стоимости тура

31

http://xml.tez-tour.com/xmlgate/order/book

Бронирование заявки

33

Передается в результатах работы сервиса http://xml.tez-tour.com/xmlgate/order/veiw

Печать авиасправки

34

Передается в результатах работы сервиса http://xml.tez-tour.com/xmlgate/order/veiw

Печать авиабилетов

35

Передается в результатах работы сервиса http://xml.tez-tour.com/xmlgate/order/veiw

Печать страховки

36

Передается в результатах работы сервиса http://xml.tez-tour.com/xmlgate/order/veiw

Печать визы

37

Передается в результатах работы сервиса http://xml.tez-tour.com/xmlgate/order/veiw

Печать ваучера

32

http://xml.tez-tour.com/xmlgate/order/docPrintSubmit?orderId=

Подтверждение печати документов

39

http://xml.tez-tour.com/xmlgate/list/extraServiceTypes.d.xml

Типы доп. услуг

40

http://xml.tez-tour.com/xmlgate/list/hotelTimeNotes.d.xml

Примечания по отелям

41

http://xml.tez-tour.com/xmlgate/list/seatTypes.xml

Классы кресел в самолете

Для поддержки базы данных в актуальном состоянии сервисная часть информационной системы с заданной периодичностью должна выполнять запросы аналогичные показанным в Таблице 11 к XML-шлюзам 97 туроператоров с которыми работает агентство ООО «МИР». В рамках дипломного проекта и силами одного разработчика невозможно охватить подобную сложность, поэтому на данном этапе разработки в базу данных информационной системы включен необходимый минимум сущностей.

Для проектирования ER-модели данных применяем My SQL Workbench 6.3. На первом этапе реализуем первичные сущности, выявленные на стадии инфологического проектирования. Далее анализируя и сравнивая перечни запросов XML-шлюзов крупных туроператоров определяем необходимый минимум дополнительных сущностей и отношений. Результирующая ER-модель представлена в Приложении М.DDL код для развертывания базы данных приведен в Приложении Н.

3.4 Разработка серверной части информационной системы

Как правило, данные, поставляемые туроператорами, выглядят так:

<entry>

<tour_date>18.11.2014</tour_date>

<aircompany>Трансаэро (аэропортПафос / Ларнака)</aircompany>

<town>Пафос / Paphos</town>

<room>STANDARD Inland View BB</room>

<dt>18.11.2014</dt>

<id_hotel>102610001680</id_hotel>

<id_ns>104610415895</id_ns>

<duration>1</duration>

<o_duration>1</o_duration>

<quota>9</quota>

<id_price>121132934133</id_price>

<price>

<amount>435</amount>

<RUR>25435</RUR>

<ag>14+, 14+</ag>

<id_vr>102510005340</id_vr>

</price>

</entry>

В соответствии с выбранной архитектурой информационной системы за работу с базой данных и реализацию бизнес-логики должен отвечать специализированный модуль. Раз в неделю серверная служба начинает процесс сборки информации. За один проход осуществляется просмотр более 4000 отелей в 21 стране мира.

Сбор данных осуществляется с 97 туроператоров. Данные бережно укладываются в базу данных до востребования. Новые отели так же добавляются автоматически. Это решает проблему изменения названия отеля или его закрытия. Так же автоматически осуществляется сбор множества дополнительной информации.

Ранее было принято решение (п.2.3) реализацию сервера выполнить в виде службы на языке C# с использованием технологии Windows Communication Foundation (WCF). Объявление интерфейса для работы клиента с сервером и базой данных выглядит так:

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Runtime.Serialization;

usingSystem.ServiceModel;

usingSystem.Text;

namespaceWcfToDB

{

[ServiceContract]

publicinterfaceIWIService

{

[OperationContract]

intInsertStuff(Stuff s);

[OperationContract]

boolGetConnection(string name, string password);

[OperationContract]

List<Stuff>GetAllStuff();

[OperationContract]

List<Resort>GetResort(stringcountry_name);

[OperationContract]

List<Hotel>GetHotel(List<Parameter> parameters);

[OperationContract]

List<Operator>GetOperator();

[OperationContract]

voidSetOperator(List<Operator>Oper, List<Parameter> parameters, string Command);

[OperationContract]

List<Airline>GetAirline(List<Parameter> parameters);

[OperationContract]

voidSetAirline(List<Airline> Airline, List<Parameter> parameters, string Command);

[OperationContract]

List<Airport>GetAirport(List<Parameter> parameters);

[OperationContract]

voidSetAirport(List<Airport> Airport, List<Parameter> parameters, string Command);

[OperationContract]

List<BeachLine>GetBeachLine(List<Parameter> parameters);

[OperationContract]

voidSetBeachLine(List<BeachLine>Beachline, List<Parameter> parameters, string Command);

[OperationContract]

List<City>GetCity(List<Parameter> parameters);

[OperationContract]

voidSetCity(List<City> City, List<Parameter> parameters, string Command);

[OperationContract]

List<Contract>GetContract(List<Parameter> parameters);

[OperationContract]

voidSetContract(List<Contract> Contract, List<Parameter> parameters, string Command);

[OperationContract]

List<Country>GetCountry(List<Parameter> parameters);

[OperationContract]

voidSetCountry(List<Country> Country, List<Parameter> parameters, string Command);

[OperationContract]

List<Language>GetLanguage(List<Parameter> parameters);

[OperationContract]

voidSetLanguage(List<Language> Language, List<Parameter> parameters, string Command);

[OperationContract]

List<Currency>GetCurrency(List<Parameter> parameters);

[OperationContract]

voidSetCurrency(List<Currency> Currency, List<Parameter> parameters, string Command);

[OperationContract]

List<Customer>GetCustomer(List<Parameter> parameters);

[OperationContract]

voidSetCustomer(List<Customer> Customer, List<Parameter> parameters, string Command);

[OperationContract]

List<Department>GetDepartment(List<Parameter> parameters);

[OperationContract]

voidSetDepartment(List<Department> Department, List<Parameter> parameters, string Command);

[OperationContract]

List<Flight>GetFlight(List<Parameter> parameters);

[OperationContract]

voidSetFlight(List<Flight> Flight, List<Parameter> parameters, string Command);

[OperationContract]

List<Payment>GetPayment(List<Parameter> parameters);

[OperationContract]

voidSetPayment(List<Payment> Payment, List<Parameter> parameters, string Command);

[OperationContract]

List<Tour>GetTour(List<Parameter> parameters);

[OperationContract]

voidSetTour(List<Tour> Tour, List<Parameter> parameters, string Command);

[OperationContract]

List<TourOperatorContact>GetTourOperatorContact(List<Parameter> parameters);

[OperationContract]

voidSetTourOperatorContact(List<TourOperatorContact>TourOperatorContact, List<Parameter> parameters, string Command);

[OperationContract]

List<TypeHousing>GetTypeHousing(List<Parameter> parameters);

[OperationContract]

voidSetTypeHousing(List<TypeHousing> Tour, List<Parameter> parameters, string Command);

[OperationContract]

List<TypeMeal>GetTypeMeal(List<Parameter> parameters);

[OperationContract]

voidSetTypeMeal(List<TypeMeal> Tour, List<Parameter> parameters, string Command);

[OperationContract]

List<TypeTour>GetTypeTour(List<Parameter> parameters);

[OperationContract]

voidSetTypeTour(List<TypeTour> Tour, List<Parameter> parameters, string Command);

[OperationContract]

List<TypeApp>GetTypeApp(List<Parameter> parameters);

[OperationContract]

voidSetTypeApp(List<TypeApp> Tour, List<Parameter> parameters, string Command);

}

}

Здесь, функция Get Connection (stringname, stringpassword) отвечает за соединение с базой данных. Реализация данной функции в классе представлена ниже

publicboolGetConnection(string name, string password)

{

Connect.Open();

MySqlDataReaderdr = null;

try

{

MySqlCommandcmd = newMySqlCommand("SELECT * FROM stuff WHERE username='" +

name + "' AND password='" + password + "'", Connect);

dr = cmd.ExecuteReader();

if (dr.Read())

{

returntrue;

}

else

{

returnfalse;

}

}

catch (Exception ex)

{

returnfalse;

}

}

Обработка возвращаемого логического значения, представляющего собой результат подключения осуществляется на стороне клиента.

Функции вида

[OperationContract]

List<Country>GetCountry(List<Parameter> parameters);

[OperationContract]

voidSetCountry(List<Country> Country, List<Parameter> parameters, string Command);

Предназначены для работы с сущностями базы данных. Здесь Countryпредставляет собой класс, поля которого соответствуют полям сущности базы данных.

3.5 Разработка клиентской части информационной системы

Клиентская часть информационной системы -- это интерфейсный компонент комплекса, предоставляемый конечному пользователю. По требованиям безопасности и масштабируемости этот уровень не имеет прямых связей с базой данных (см. Приложение Л), не нагружен бизнес-логикой (по требованиям масштабируемости) и не хранит состояние приложения (по требованиям надёжности). На этот уровень выносим только простейшую бизнес-логику: интерфейс авторизации, проверка вводимых значений на допустимость и соответствие формату, несложные операции с данными (сортировка, группировка, подсчёт значений), уже загруженными на терминал.

Дизайн формы авторизации в информационной системе показан на Рисунок 4.

Рисунок 4. Форма авторизации в информационной системе

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

using System;

usingSystem.Windows.Forms;

using WorldInformationSystem.ServiceReference1;

namespaceWorldInformationSystem

{

publicpartialclassLogin :Form

{

publicLogin()

{

InitializeComponent();

}

privatevoidbtnCancel_Click(object sender, EventArgs e)

{

Application.Exit();

}

privatevoidbtnOK_Click(object sender, EventArgs e)

{

WIServiceClient Service = newWIServiceClient();

if(Service.GetConnection(tbxUserName.Text, tbxPassword.Text))

{

Program.UserLoginName = tbxUserName.Text;

this.Close();

}

else

{

MessageBox.Show("Неверное имя пользователя или пароль");

}

}

privatevoidtbxUserName_KeyDown(object sender, KeyEventArgs e)

{

if(e.KeyCode==Keys.F4 &&e.Modifiers == Keys.Alt)

{

Application.Exit();

}

}

privatevoidtbxPassword_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.F4 &&e.Modifiers == Keys.Alt)

{

Application.Exit();

}

}

privatevoidbtnOK_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.F4 &&e.Modifiers == Keys.Alt)

{

Application.Exit();

}

}

privatevoidbtnCancel_KeyDown(object sender, KeyEventArgs e)

{

if (e.KeyCode == Keys.F4 &&e.Modifiers == Keys.Alt)

{

Application.Exit();

}

}

}

}

В коде формы авторизации также использованы обработчики нажатий комбинации клавиш, которая может привести к пропуску процедуры авторизации.

При корректно введенных учетных данных открывается главное окно приложения Рисунок 5. Интерфейс выполнен в виде окна с вкладками соответствующими основным направлениям взаимодействия пользователя с информационной системой.

Вкладка «Поиск тура» позволяет менеджеру задать основные характеристики тура для поиска подходящих предложений. Как показано на рисунке 6 в зависимости от введенных данных система непрерывно обновляет информацию, предлагая доступные варианты выбора параметров. После ввода всех необходимых данных система осуществляет поиск туров в базе данных и представляет их пользователю в виде списка, каждый вариант можно подробно рассмотреть в отдельном окне и при необходимости забронировать.

Рисунок 5. Интерфейс информационной системы ООО «МИР»

Рисунок 6. Обновление информации на форме в реальном времени

Список литературы

1. ДИ 002/15. Должностная инструкция зам. ген. директора. б.м.: ООО "МИР".

2. ДИ 004/15. Должностная инструкция менеджера по направлению. б.м.: ООО "МИР".

3. ДИ 007/15. Должностная инструкция менеджера по рекламе. б.м.: ООО "МИР".

4. Business Studio 4.2. Самара: ГК «Современные технологии управления».

5. "Ю-ОН", Компания. U-ON.Travel. Москва: б.н.

6. «ТурКонтрол», ООО. TourControl. Москва: б.н.

7. МоиТуристы. МоиТуристы. Москва: б.н.

8. Полякова, Л.Н. Основы SQL. Курс лекций. Москва: ИНТУИТ.РУ, 2007. стр. 224.

9. Туманов, В.Е. Основы проектирования реляционных баз данных. Москва: ИНТУИТ.РУ, 2007. стр. 424.

10. TPC Benchmarks.

Приложение А

Модель AS-IS процесса продажи туров ООО «МИР»

Приложение Б

Модель TO-BE процесса продажи туров ООО «МИР»

Приложение В

Диаграмма вариантов использования

Приложение Г

Диаграмма классов клиента

Диаграмма классов сервера

Приложение Д

Диаграмма последовательности

Приложение Е

Диаграмма кооперации

Приложение Ж

Диаграмма состояний

Приложение И

Диаграмма деятельности варианта использования «Поиск тура»

Приложение К

Диаграмма компонентов

Приложение Л

Диаграмма развертывания

Приложение М

ER-диаграмма базы данных

Приложение Н

DDL код развертывания базы данных

-- -----------------------------------------------------

-- Schema worldb

-- -----------------------------------------------------

CREATE SCHEMA IF NOT EXISTS `worldb` DEFAULT CHARACTER SET utf8 ;

USE `worldb` ;

-- -----------------------------------------------------

-- Table `worldb`.`Country`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Country` (

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`name_ru` VARCHAR(100) NULL DEFAULT 'null',

`name_en` VARCHAR(100) NULL DEFAULT 'null',

`Code` VARCHAR(2) NULL,

`Continent` ENUM('Азия', 'Европа', 'СевернаяАмерика', 'Африка', 'Океания', 'Антарктика', 'ЮжнаяАмерика') NOT NULL,

`Population` INT NOT NULL DEFAULT '0',

`area` FLOAT(10,2) NOT NULL DEFAULT '0.00',

`density_population` FLOAT(5,2) NULL DEFAULT '0.00',

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Resort`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Resort` (

`id_Resort` INT UNSIGNED NOT NULL,

`Country_id` INT UNSIGNED NOT NULL,

`Name` VARCHAR(45) NULL,

`Popularity` TINYINT NULL,

`Parent_id` INT UNSIGNED NULL,

`last_update` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Resort`),

INDEX `fk_Resort_Country1_idx` (`Country_id` ASC),

UNIQUE INDEX `id_Resort_UNIQUE` (`id_Resort` ASC),

CONSTRAINT `fk_Resort_Country1`

FOREIGN KEY (`Country_id`)

REFERENCES `worldb`.`Country` (`id`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`beach_line`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`beach_line` (

`id_beach_line` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(45) NULL,

`Description` TEXT NULL,

`last_update` TIMESTAMP NULL,

PRIMARY KEY (`id_beach_line`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`type_housing`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`type_housing` (

`id_type_housing` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`name` VARCHAR(20) NULL,

`full_name` VARCHAR(45) NULL,

`description` TEXT NULL,

`last_update` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_type_housing`),

UNIQUE INDEX `name_UNIQUE` (`name` ASC))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Hotel`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Hotel` (

`id_Hotel` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(100) NOT NULL,

`Category` INT UNSIGNED NOT NULL,

`id_Resort` INT UNSIGNED NOT NULL,

`id_beach_line` INT UNSIGNED NULL DEFAULT NULL,

`Rating` FLOAT NULL DEFAULT 0.00,

`Link` VARCHAR(256) NULL DEFAULT 'null',

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Hotel`),

INDEX `fk_Hotel_Resort1_idx` (`id_Resort` ASC),

INDEX `fk_Hotel_beach_line1_idx` (`id_beach_line` ASC),

INDEX `fk_Hotel_type_housing1_idx` (`Category` ASC),

CONSTRAINT `fk_Hotel_Resort1`

FOREIGN KEY (`id_Resort`)

REFERENCES `worldb`.`Resort` (`id_Resort`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Hotel_beach_line1`

FOREIGN KEY (`id_beach_line`)

REFERENCES `worldb`.`beach_line` (`id_beach_line`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Hotel_type_housing1`

FOREIGN KEY (`Category`)

REFERENCES `worldb`.`type_housing` (`id_type_housing`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`TypeApp`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`TypeApp` (

`id_TypeApp` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Type_App` VARCHAR(5) NOT NULL,

`AppDescr` VARCHAR(45) NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_TypeApp`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Country_Language`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Country_Language` (

`id_Languages` INT NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(45) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Languages`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Currency`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Currency` (

`id_Currency` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(45) NOT NULL,

`Designation` VARCHAR(5) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Currency`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`TourOperators`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`TourOperators` (

`id_TourOperators` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(45) NOT NULL,

`FullName` VARCHAR(100) NULL DEFAULT 'null',

`ZipCode` VARCHAR(10) NULL DEFAULT 'null',

`Address` VARCHAR(45) NULL DEFAULT 'null',

PRIMARY KEY (`id_TourOperators`),

UNIQUE INDEX `Name_UNIQUE` (`Name` ASC))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Type_meal`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Type_meal` (

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`name` VARCHAR(45) NOT NULL,

`full_name` VARCHAR(45) NULL,

`Description` VARCHAR(256) NULL DEFAULT 'null',

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`TourOperatorContakt`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`TourOperatorContakt` (

`id_TourOperatorContakt` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`First_Name` VARCHAR(20) NOT NULL,

`Second_Name` VARCHAR(20) NULL,

`Last_Name` VARCHAR(20) NOT NULL,

`id_TourOperators` INT UNSIGNED NOT NULL,

`Post` VARCHAR(40) NULL,

`Phone_number` VARCHAR(20) NOT NULL,

`Email` VARCHAR(45) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_TourOperatorContakt`),

INDEX `fk_TourOperatorContakt_TourOperators1_idx` (`id_TourOperators` ASC),

CONSTRAINT `fk_TourOperatorContakt_TourOperators1`

FOREIGN KEY (`id_TourOperators`)

REFERENCES `worldb`.`TourOperators` (`id_TourOperators`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Type_tour`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Type_tour` (

`id_Type_tour` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(45) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Type_tour`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Tour`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Tour` (

`id_Tour` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Date_depart` DATE NOT NULL,

`Date_arrival` DATE NOT NULL,

`Places` INT NOT NULL DEFAULT '0',

`Flight` TINYINT NOT NULL DEFAULT 1,

`id_TourOperators` INT UNSIGNED NOT NULL,

`id_Resort` INT UNSIGNED NOT NULL,

`id_Hotel` INT UNSIGNED NOT NULL,

`id_TypeApp` INT UNSIGNED NOT NULL,

`Type_meal_id` INT UNSIGNED NOT NULL,

`id_Type_tour` INT UNSIGNED NOT NULL,

`Price` FLOAT(10,2) NOT NULL DEFAULT '0.00',

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Tour`),

INDEX `fk_Tour_Type_tour1_idx` (`id_Type_tour` ASC),

INDEX `fk_Tour_TourOperators1_idx` (`id_TourOperators` ASC),

INDEX `fk_Tour_Resort1_idx` (`id_Resort` ASC),

INDEX `fk_Tour_Hotel1_idx` (`id_Hotel` ASC),

INDEX `fk_Tour_TypeApp1_idx` (`id_TypeApp` ASC),

INDEX `fk_Tour_Type_meal1_idx` (`Type_meal_id` ASC),

CONSTRAINT `fk_Tour_Type_tour1`

FOREIGN KEY (`id_Type_tour`)

REFERENCES `worldb`.`Type_tour` (`id_Type_tour`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Tour_TourOperators1`

FOREIGN KEY (`id_TourOperators`)

REFERENCES `worldb`.`TourOperators` (`id_TourOperators`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Tour_Resort1`

FOREIGN KEY (`id_Resort`)

REFERENCES `worldb`.`Resort` (`id_Resort`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Tour_Hotel1`

FOREIGN KEY (`id_Hotel`)

REFERENCES `worldb`.`Hotel` (`id_Hotel`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Tour_TypeApp1`

FOREIGN KEY (`id_TypeApp`)

REFERENCES `worldb`.`TypeApp` (`id_TypeApp`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Tour_Type_meal1`

FOREIGN KEY (`Type_meal_id`)

REFERENCES `worldb`.`Type_meal` (`id`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Customer`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Customer` (

`id_Customer` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`First_Name` VARCHAR(45) NOT NULL,

`Second_Name` VARCHAR(45) NULL,

`Last_Name` VARCHAR(45) NOT NULL,

`Gender` ENUM('муж', 'жен') NULL,

`Birth_date` DATE NULL,

`Phone_number` VARCHAR(20) NOT NULL,

`Num_Passport` VARCHAR(45) NOT NULL,

`Ser_Passport` VARCHAR(45) NOT NULL,

`Who_Issue` VARCHAR(45) NOT NULL,

`Data_Issue` DATE NOT NULL,

`Num_Inter_Passport` VARCHAR(45) NOT NULL,

`Ser_Inter_Passport` VARCHAR(45) NOT NULL,

`Data_Valid` DATE NOT NULL,

`Email` VARCHAR(45) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Customer`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Department`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Department` (

`id_Department` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Name` VARCHAR(45) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Department`))

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Stuff`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Stuff` (

`id_Stuff` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`First_name` VARCHAR(20) NOT NULL,

`Second_name` VARCHAR(20) NULL,

`Last_name` VARCHAR(20) NOT NULL,

`Birth_date` DATE NOT NULL,

`id_Department` INT UNSIGNED NOT NULL,

`Post` VARCHAR(100) NOT NULL,

`Address` VARCHAR(100) NOT NULL,

`Email` VARCHAR(70) NULL,

`Phone_number` VARCHAR(20) NOT NULL,

`username` VARCHAR(25) NOT NULL,

`password` VARCHAR(40) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Stuff`),

INDEX `fk_Stuff_Department1_idx` (`id_Department` ASC),

CONSTRAINT `fk_Stuff_Department1`

FOREIGN KEY (`id_Department`)

REFERENCES `worldb`.`Department` (`id_Department`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Contract`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Contract` (

`id_Contract` INT NOT NULL AUTO_INCREMENT,

`Number` INT NOT NULL,

`Data` DATE NOT NULL,

`id_Tour` INT UNSIGNED NOT NULL,

`Sum` FLOAT(10,2) NOT NULL DEFAULT '0.00',

`id_Stuff` INT UNSIGNED NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Contract`),

INDEX `fk_Contract_Stuff1_idx` (`id_Stuff` ASC),

INDEX `fk_Contract_Tour1_idx` (`id_Tour` ASC),

CONSTRAINT `fk_Contract_Stuff1`

FOREIGN KEY (`id_Stuff`)

REFERENCES `worldb`.`Stuff` (`id_Stuff`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Contract_Tour1`

FOREIGN KEY (`id_Tour`)

REFERENCES `worldb`.`Tour` (`id_Tour`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`City`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`City` (

`id_City` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Country_id` INT UNSIGNED NOT NULL,

`name_ru` VARCHAR(100) NOT NULL,

`name_en` VARCHAR(100) NULL,

`isCapital` TINYINT NULL DEFAULT 0,

`region` VARCHAR(2) NULL,

`postal_code` VARCHAR(10) NULL,

`latitude` VARCHAR(10) NULL,

`longitude` VARCHAR(10) NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_City`),

INDEX `fk_City_Country1_idx` (`Country_id` ASC),

CONSTRAINT `fk_City_Country1`

FOREIGN KEY (`Country_id`)

REFERENCES `worldb`.`Country` (`id`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Country_has_CountryLanguage`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Country_has_CountryLanguage` (

`Country_id` INT UNSIGNED NOT NULL,

`id_Languages` INT NOT NULL,

`isOfficial` TINYINT NULL DEFAULT 1,

`Percentage` FLOAT(4,1) NULL DEFAULT '0.0',

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`Country_id`, `id_Languages`),

INDEX `fk_Country_has_CountryLanguage_CountryLanguage1_idx` (`id_Languages` ASC),

INDEX `fk_Country_has_CountryLanguage_Country1_idx` (`Country_id` ASC),

CONSTRAINT `fk_Country_has_CountryLanguage_CountryLanguage1`

FOREIGN KEY (`id_Languages`)

REFERENCES `worldb`.`Country_Language` (`id_Languages`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Country_has_CountryLanguage_Country1`

FOREIGN KEY (`Country_id`)

REFERENCES `worldb`.`Country` (`id`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Payment`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Payment` (

`id_Payment` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Sum` FLOAT(10,2) NOT NULL DEFAULT '0.00',

`Payment_date` DATE NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

`id_Contract` INT NOT NULL,

PRIMARY KEY (`id_Payment`),

INDEX `fk_Payment_Contract1_idx` (`id_Contract` ASC),

CONSTRAINT `fk_Payment_Contract1`

FOREIGN KEY (`id_Contract`)

REFERENCES `worldb`.`Contract` (`id_Contract`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Contract_has_Customer`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Contract_has_Customer` (

`id_Contract` INT NOT NULL,

`id_Customer` INT UNSIGNED NOT NULL,

PRIMARY KEY (`id_Contract`, `id_Customer`),

INDEX `fk_Contract_has_Customer_Customer1_idx` (`id_Customer` ASC),

INDEX `fk_Contract_has_Customer_Contract1_idx` (`id_Contract` ASC),

CONSTRAINT `fk_Contract_has_Customer_Contract1`

FOREIGN KEY (`id_Contract`)

REFERENCES `worldb`.`Contract` (`id_Contract`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Contract_has_Customer_Customer1`

FOREIGN KEY (`id_Customer`)

REFERENCES `worldb`.`Customer` (`id_Customer`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

-- -----------------------------------------------------

-- Table `worldb`.`Airline`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `worldb`.`Airline` (

`id_Airline` INT UNSIGNED NOT NULL AUTO_INCREMENT,

`Country_id` INT UNSIGNED NOT NULL,

`Name` VARCHAR(20) NOT NULL,

`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id_Airline`),

INDEX `fk_Airline_Country1_idx` (`Country_id` ASC),

CONSTRAINT `fk_Airline_Country1`

FOREIGN KEY (`Country_id`)

REFERENCES `worldb`.`Country` (`id`)


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.