Разработка базы данных "Отдел сбыта"

Министерство образования и науки Республики Казахстан

Карагандинский государственный технический университет

Кафедра: САПР



















ПОЯСНИТЕЛЬНАЯ

ЗАПИСКА

по дисциплине: "Технология разработки баз данных"

Тема: "Разработка базы данных "Отдел сбыта"





Руководитель

____________________________

(число) (подпись)

Студент

____________________________

(число) (подпись)







Караганда 2009


Содержание



Введение

1. Постановка задачи

2. Теоретическая часть

2.1 Основные понятия и определение теории баз данных

2.2 Системы управления базами данных

3. Обоснование выбора программного обеспечения

4.Структура базы данных

4.1 Структура таблиц

4.2 Структура хранимой информации

4.3 Концептуальная модель данных

5. SQL - запросы

6. Руководство пользователю

Заключение

Список используемых источников

Приложения




Введение



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

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

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




1. Постановка задачи



Задачей данного курсового проекта является разработка программы управления базой данных "Отдел сбыта", которая должна содержать информацию об организациях, приобретающих продукцию завода, о продукциях и о продажах. Необходимо обеспечить хранение, добавление, удаление и редактирование информации, а также использование запросов и отчетов. В программе должна быть продумана поддержка физически удаленной БД и возможность работы нескольких клиентов с одной БД.




2. Теоретическая часть



2.1 Основные понятия и определение теории баз данных



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

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

Базой данных часто упрощённо или ошибочно называют Системы Управления Базами Банных (СУБД). Нужно различать набор данных (собственно БД) и программное обеспечение, предназначенное для организации и ведения баз данных (СУБД).

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

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

объектные модели;

физические модели;

логические модели.

В свою очередь логические модели можно классифицировать на:

реляционные;

иерархические;

сетевые.

На уровне физической модели электронная БД представляет собой файл или их набор в формате CSV, DBF, XML либо в специализированном формате конкретной СУБД. Также в СУБД в понятие физической модели включают специализированные виртуальные понятия, существующие в ёё рамках - таблица, табличное пространство, сегмент, куб, кластер и т.д.

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



2.2 Системы управления базами данных



СУБД - специализированная программа (чаще комплекс программ), предназначенная для манипулирования базой данных. Для создания и управления информационной системой СУБД необходима в той же степени, как для разработки программы на алгоритмическом языке необходим транслятор.

Основные функции СУБД:

управление данными во внешней памяти (на дисках);

управление данными в оперативной памяти;

журнализация изменений и восстановление базы данных после сбоев;

поддержка языков БД (язык определения данных, язык манипулирования данными).

Обычно современная СУБД содержит следующие компоненты:

ядро, которое отвечает за управление данными во внешней и оперативной памяти и журнализацию,

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

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

СУБД классифицируются по следующим признакам:

а) по типу управляемой базы данных СУБД разделяются на:

Сетевые

Иерархические

Реляционные

Объектно-реляционные

Объектно-ориентированные

б) по архитектуре организации хранения данных

локальные СУБД (все части локальной СУБД размещаются на одном компьютере)

распределенные СУБД (части СУБД могут размещаться на двух и более компьютерах)




3. Обоснование выбора программного обеспечения



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

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

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

Используемая в курсовом проекте СУБД Microsoft SQL Server 6.0 - одна из наиболее мощных СУБД архитектуры клиент-сервер. Эта СУБД позволяет удовлетворять такие требования, предъявляемые к системам распределенной обработке данных, как тиражирование данных, параллельная обработка, поддержка больших баз данных на относительно недорогих аппаратных платформах при сохранении простоты управления и использования.

Для разработки программы была использована среда программирования Delphi с использование языка программирования Object Pascal, тат как она является наиболее удобной и простой в использовании.




4.Структура базы данных



4.1 Структура таблиц



Вся информация, которая должна храниться в создаваемой БД, можно разбить на три таблицы. Первая таблица "Organizations" будет хранить информацию об организациях, приобретающих продукцию завода, вторая "Productions" - информацию о продукции и третья "Sale" - информацию о продажах.

Целесообразно будет, если включить в таблицу "Organizations" следующие атрибуты:

"Organization_name" - уникальное название организации, выступающее в роли первичного ключа таблицы (char 20);

"Address" - атрибут, имеющий символьный тип и содержит информацию о местонахождении организации (char 30);

"Activity" - содержит информацию о виде деятельности организации (char 20);

"Phone" - контактирующий телефон (char 15);

"E_mail" - адрес электронной почты (char 20);

Таблица "Productions" будет иметь следующие атрибуты:

1 "Production_name" - является уникальным названием продукции, выступающим в роли первичного ключа таблицы (char 10);

2 "Price_for_one" - цена за единицу (int);

3 "Num_in_depository" - количество единиц данной продукции на складе (int);

И соответственно в таблицу "Sale" необходимо поместить следующие атрибуты:

"nakladnaya" - является уникальным номером накладной, выступающим в роли первичного ключа таблицы (int);

"Organization_name" - название организации (char 20);

"Production_name" - наименование продукции (char 10);

"Number" - количество проданной продукции (int)

"Date" - дата продажи (datetime)

"Payment" - вид оплаты (char 20)



4.2 Структура хранимой информации



Поступающая от менеджера (пользователя) информация будет вноситься в основные таблицы базы данных ("Organizations", "Productions", "Sale").

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





Рисунок 1 - Связь между таблицами БД "Отдел сбыта"



Вид связи между таблицами "один-ко-многим". Связующими полями являются поле "Organization_name" таблицы "Organizations" с полем "Organization_name" таблицы "Sale", и аналогично поле "Production_name" таблицы "Productions" с полем "Production_name" таблицы "Sale".


4.3 Концептуальная модель данных



Концептуальное моделирование - это переход от неформализованного описания предметной области к ее формальному изложению с помощью специальных языковых средств. В приложении А представлена концептуальная модель данной базы данных "Отдел сбыта".




5. SQL - запросы



Запрос 1 - Выводит организации с общим видом деятельности, указанным пользователем

select *

from Organizations

where Activity=activ,

где activ - указанный вид деятельности организации

Запрос 2 - Выводит список продукций с ценой за единицу большей указанной цены:

select *

from Productions

where Price_for_one>=price

order by Production_name,

где price - указанная цена продукции за еденицу

Запрос 3 - Выводит список указанной пользователем продукции, которая имеет заявки на продажу превышающие указанного количества единиц:

select *

from Sale

where Production_name=prod and number>=col,

где prod - указанная продукция, а col - указанное количество единиц продукции

Запрос 4 - Выводит количество проданной продукции

select Sum (number) as Number_saled

from Sale

where Productio_ name] =prod,

где prod - указанная продукция

Запрос 5 - Выводит список организаций с указанного города с указанным общим видом деятельности:

select *

from Organizations

where Address=town and Activity=active,

где town - указанный город, active - вид деятельности организации

Запрос 6 - Выводит все информацию о проданной продукции за раз превышающей указанного количества единиц продукции:

select *

from Sale

where number>=col

где col - количество единиц продукции

Запрос 7 -Выводит информацию о максимальном количестве продукции, проданной за 1 заявку:

select Production_name, MAX (number) as МАХ

from Sale

group by Production_name

Запрос 8 - Выводит список организаций и наименования продукции с наибольшими партиями закупок:

select distinct Organization_name, Production_name, MAX (number) as МАХ

from Sale

group by Production_name,Organization_name




6. Руководство пользователю



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





Рисунок 3 - Главное окно программы



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





Рисунок 4 - Окно программы со списком запросов



Четвертая вкладка содержит список запросов (Рисунок 4). Здесь пользователь может выбрать из списка один из предложенных запросов, либо в списке запросов выбрать "создать запрос…", либо в меню Action выбрать Make query. В результате появится диалоговое окно (Рисунок 5), где можно ввести нужные критерии запроса и нажать "ОК". Результат запросов отображается в таблице на вкладке "Запросы".





Рисунок 5 - Окно создания запроса



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

список организаций (указать вид деятельности)

список организаций (указать город и вид деятельности)

максимальные заявки на продукцию

организации с макс числом куп продукции





Рисунок 6 - Окно отчета



Для получения справки об использовании программы пользователю необходимо в меню About выбрать Program…. Появится окно справки программы (Рисунок 7).





Рисунок 7 - Окно справки программы




Заключение



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

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

Клиент-серверная технология SQL позволит организовать централизованное хранение информации и возможность обращения к ней физически удаленных сотрудников.




Список используемых источников



Мартин Груббер, "Понимание SQL", Москва, 2003 г

Т. Карпова - Базы данных: модели, разработка, реализация. Питер, 2001

Курс лекций по разработке баз данных, Терлецкая А.М., 2007 г





Приложения



Приложение А Концептуальная модель данных



ОТДЕЛ СБЫТА

ОТДЕЛ СБЫТА

ОРГАНИЗАЦИИ

 ДОГОВОРА

О ПРОДАЖЕ

ПРОДУКЦИИ

    ОТДЕЛ 

ПОГРУЗКИ

ПРОДУКЦИЯ

ОРГАНИЗАЦИЯ

  ДОГОВОР 

О ПРОДАЖЕ

  ОТДЕЛ ПОГРУЗКИ

НАИМЕНОВАНИЕ



ЦЕНА ЗА ЕД.



КОЛ-ВО НА СКЛАДЕ

НАЗВАНИЕ 



АДРЕС



ДЕЯТЕЛ-ТЬ



ТЕЛЕФОН



E-MAIL



№ НАКЛАД



ОРГАНИЗАЦИЯ



ПРОДУКЦИЯ



КОЛ-ВО



ДАТА

СОСТОЯНИЕ



ОБЪЕМ 



ДАТА



Приложение Б. Листинг программного кода



Unit1

procedure TForm1. TabControl1Change (Sender: TObject);

begin

case Tabcontrol1. TabIndex of

0: // управление вкладками

begin

DBGrid1. Visible: =true;

DBNavigator1. Visible: =true;

DBGrid2. Visible: =false;

DBNavigator2. Visible: =false;

DBGrid3. Visible: =false;

DBNavigator3. Visible: =false;

DBGrid4. Visible: =false;

ComboBox1. Visible: =false;

end;

1:

begin

DBGrid1. Visible: =false;

DBNavigator1. Visible: =false;

DBGrid2. Visible: =true;

DBNavigator2. Visible: =true;

DBGrid3. Visible: =false;

DBNavigator3. Visible: =false;

DBGrid4. Visible: =false;

ComboBox1. Visible: =false;

end;

2:

begin

DBGrid1. Visible: =false;

DBNavigator1. Visible: =false;

DBGrid2. Visible: =false;

DBNavigator2. Visible: =false;

DBGrid3. Visible: =true;

DBNavigator3. Visible: =true;

DBGrid4. Visible: =false;

ComboBox1. Visible: =false;

end;

3:

begin

DBGrid1. Visible: =false;

DBNavigator1. Visible: =false;

DBGrid2. Visible: =false;

DBNavigator2. Visible: =false;

DBGrid3. Visible: =false;

DBNavigator3. Visible: =false;

DBGrid4. Visible: =true;

ComboBox1. Visible: =true;

end;

end;

end;

procedure TForm1. Exit1Click (Sender: TObject);

begin

Close; закрытие программы

end;

procedure TForm1.comboBox1Change (Sender: TObject);

var

town: string;

prod: string;

price: string;

aktiv: string;

begin

case ComboBox1. ItemIndex of

0: // первый запрос

begin

ADOQuery1. Active: = false;

aktiv: =InputBox ('Введите','Вид деятельности предприятия',aktiv);

aktiv: =Edit1. Text+aktiv+Edit1. Text;

if aktiv<>'' then

ADOQuery1. SQL. Text: = 'select * from Organizations where Activity='+aktiv;

ADOQuery1. Active: = true;

 // ------------------report----------------------------------------------

N2. Enabled: =true;

Form3. QRLabel2. Caption: ='Организации';

Form3. QRLabel4. Caption: ='Адрес';

Form3. QRLabel5. Caption: ='Деятельность';

Form3. QRLabel6. Caption: ='Телефон';

Form3. QRLabel7. Caption: ='E-mail';

end;

1: // второй запрос

begin

ADOQuery1. Active: = false;

price: =InputBox ('Введите','Цена за единицу продукции',price);

if (price<>'') or (StrToInt (price) >=1000) then

ADOQuery1. SQL. Text: = 'select * from Productions where Price_for_one>='+price+' order by Production_name';

ADOQuery1. Active: = true;

N2. Enabled: =false;

end;

2: // третий запрос

begin

ADOQuery1. Active: = false;

prod: =InputBox ('Введите','Наименование продукции',prod);

prod: =Edit1. Text+prod+Edit1. Text;

if prod<>'' then

aktiv: =InputBox ('Введите','Количество проданной продукции',aktiv);

if (aktiv<>'') or (StrToInt (aktiv) >0) then

ADOQuery1. SQL. Text: = 'select * from Sale where Production_name='+prod+' and number>='+aktiv;

ADOQuery1. Active: = true;

N2. Enabled: =false;

end;

3: // четвертый запрос

begin

ADOQuery1. Active: = false;

prod: =InputBox ('Введите','Наименование продукции',prod);

prod: =Edit1. Text+prod+Edit1. Text;

if prod<>'' then

ADOQuery1. SQL. Text: = 'select Production_name, Sum (number) as Number_saled from Sale where Production_name='+prod+' group by Production_name';

ADOQuery1. Active: = true;

N2. Enabled: =false;

end;

4: // пятый запрос

begin

ADOQuery1. Active: = false;

town: =InputBox ('Введите','Название города',town);

town: =Edit1. Text+town+Edit1. Text;

if town<>'' then

aktiv: =InputBox ('Введите','Вид деятельности предприятия',aktiv);

aktiv: =Edit1. Text+aktiv+Edit1. Text;

if aktiv<>'' then

ADOQuery1. SQL. Text: = 'select * from Organizations where (Address='+town+') and Activity='+aktiv;

ADOQuery1. Active: = true;

 // -------------------------------отчет--------------------------

N2. Enabled: =true;

Form3. QRLabel2. Caption: ='Организации';

Form3. QRLabel4. Caption: ='Адрес';

Form3. QRLabel5. Caption: ='Деятельность';

Form3. QRLabel6. Caption: ='Телефон';

Form3. QRLabel7. Caption: ='E-mail';

end;

5: // шестой запрос

begin

ADOQuery1. Active: = false;

aktiv: =InputBox ('Введите','Количество прод. продукции за одну заявку >=',aktiv);

if aktiv<>'' then

ADOQuery1. SQL. Text: = 'select * from Sale where number>='+aktiv;

ADOQuery1. Active: = true;

N2. Enabled: =false;

end;

6: // седьмой запрос

begin

ADOQuery1. Active: = false;

ADOQuery1. SQL. Text: = 'select Production_name, MAX (number) as MAX from Sale group by Production_name';

ADOQuery1. Active: = true;

 // ---------------------------отчет------------------------------------

N2. Enabled: =true;

Form3. QRLabel2. Caption: ='';

Form3. QRLabel4. Caption: ='Продукция';

Form3. QRLabel5. Caption: ='МАХ';

Form3. QRLabel6. Caption: ='';

Form3. QRLabel7. Caption: ='';

end;

7: // восьмой запрос

begin

ADOQuery1. Active: = false;

ADOQuery1. SQL. Text: = 'select distinct Organization_name,Production_name, MAX (number) as MAX from Sale group by Production_name,Organization_name';

ADOQuery1. Active: = true;

 // ----------------------------------отчет--------------------------

N2. Enabled: =true;

Form3. QRLabel2. Caption: ='Организации';

Form3. QRLabel4. Caption: ='Продукция';

Form3. QRLabel5. Caption: ='МАХ';

Form3. QRLabel6. Caption: ='';

Form3. QRLabel7. Caption: ='';

end;

8:

begin

Form2. Visible: =true; // создать запрос

end;

end;

end;

procedure TForm1. N6Click (Sender: TObject);

begin

Form2. Visible: =true; // вызов окна создания запросов

end;

procedure TForm1. DataBase1Click (Sender: TObject);

begin

winhelp (Form1. Handle,'Справка. hlp',HELP_Context,1);

end;

procedure TForm1. N2Click (Sender: TObject);

begin

Form3. QuickRep1. Preview; // вызов отчета

end;

end.

Unit 2.

 // -----------------------------------создание запросов-------------------------------

procedure TForm2. Button1Click (Sender: TObject);

var

name, sel, from, where: string;

having, group, order: string;

num: integer;

begin

if (Edit1. Text='') or (Edit2. Text='') or (Edit3. Text='') then

ShowMessage ('Заполните поля, отмеченные звездочкой! ')

else

begin

name: =Edit1. Text;

sel: =Edit2. Text;

from: =Edit3. Text;

where: =Edit4. Text;

group: =Edit5. Text;

order: =Edit6. Text;

having: =Edit7. Text;

Form1. ADOQuery1. Active: = false;

if (where='') and (group='') and (order='') then

Form1. ADOQuery1. SQL. Text: = 'select '+sel+' from '+from

else

if (group='') and (order='') then

begin

Form1. ADOQuery1. SQL. Text: = 'select '+sel+' from '+from+' where '+where;

end

else

if (having='') and (order='') then

begin

Form1. ADOQuery1. SQL. Text: = 'select '+sel+' from '+from+' where '+where+

' group by '+group;

end

else

if order='' then

begin

Form1. ADOQuery1. SQL. Text: = 'select '+sel+' from '+from+' where '+where+

' group by '+group+' having '+having;

end

else

begin

Form1. ADOQuery1. SQL. Text: = 'select '+sel+' from '+from+' where '+where+

' group by '+group+' having '+having+' order by '+order;

end;

Form1. ADOQuery1. Active: = true;

Form2. Visible: =false;

end;

end;

 // ---------------------------------------------------------------------

procedure TForm2. Edit5Change (Sender: TObject);

begin

Memo1. Lines [8]: =' Group by '+Edit5. Text;

if Edit5. Text<>'' then

begin

Label7. Enabled: =true;

Edit7. Enabled: =true;

end

else

begin

Label7. Enabled: =false;

Edit7. Enabled: =false;

end;

end;

procedure TForm2. Edit2Change (Sender: TObject); // управление Мемо

begin

Memo1. Lines [2]: =' Select '+Edit2. Text;

end;

procedure TForm2. Edit3Change (Sender: TObject);

begin

Memo1. Lines [4]: =' From '+Edit3. Text;

end;

procedure TForm2. Edit4Change (Sender: TObject);

begin

Memo1. Lines [6]: =' Where '+Edit4. Text;

end;

procedure TForm2. Edit7Change (Sender: TObject);

begin

Memo1. Lines [10]: =' Having '+Edit7. Text;

end;

procedure TForm2. Edit6Change (Sender: TObject);

begin

Memo1. Lines [12]: =' Order by '+Edit6. Text;

end;

procedure TForm2. Button2Click (Sender: TObject);

begin

Form2. Visible: =false;

end;

procedure TForm2. Edit1Change (Sender: TObject);

begin

Memo1. Lines [0]: ='Запрос - '+Edit1. Text;

end;

end.