Реферат по предмету "Программирование, Базы данных"


Разработка базы данных

Министерство образования
Российской Федерации
Хабаровский Государственный Технический Университет

Кафедра программного обеспечения вычислительной
техники и автоматизированных систем









пояснительная записка
к курсовой работе
ПО ДИСЦИПЛИНЕ «БАЗЫ ДАННЫХ»








Выполнил:
  студент гр. ПО-02
    Самойленко Павел
Проверил:
  к.т.н., доцент
     Саринков А. А.





Хабаровск 2002г.
Задание
Разработка клиент – серверного приложения.
Введение в технологию клиент-сервер
База данных представляетсобой набор файлов на сетевом сервере. Характерная особенность архитектурыклиент-сервер является перенос вычислительной нагрузки на сервер БД(SQLсервер), атакже максимальная разгрузка клиента от вычислительной работы и существенноеукрепление данных. Взаимодействие сервера и клиента реализуется с помощью SQLзапросов, которые формирует и отсылает серверу клиент. Сервер, приняв запрос,выполняет его и возвращает результат клиенту. В клиентском приложении восновном осуществляется интерпретация полученных от сервера данных, реализацияпользовательского интерфейса, а также реализация части бизнес — правил.
Преимущества архитектурыклиент – сервер:
o  Большинствовычислительных процессов происходит на сервере, что снижает требования квычислительной мощности клиента.
o  Снижаетсясетевой трафик, так как пересылаются не все данные, а только запрошенные.
o  БДна сервере представляет единый файл, в котором содержатся таблицы, ограниченияцелостности и другие компоненты БД. Взломать, похитить или испортить такую БДзначительно труднее; существенно увеличивается защищенность БД от вводанеправильных значений. Кроме того для каждого пользователя устанавливаются своиуровни доступа.
o  Серверреализует управление транзакциями и предотвращает  попытки одновременного изменения одних и техже данных.
Сервер базыданных
При выборе сервера базыданных я остановился на промышленном сервере InterBase. InterBase – «родной» сервер для Delphi. Для доступа к нему не нужно устанавливать дополнительныхдрайверов. Все данные хранятся на сервере в файле baze.gdb.
Предметная область
Программапредназначена для учета медицинских аппаратов, имеющихся в воинских частях.Основная задача — учет драгоценных металлов, содержащихся в этих аппаратах, возможностьподсчета списанных, не списанных и общего числа аппаратов в отдельно взятойчасти и сумма драг. металлов, в них содержащихся.
Создание базы данных
Структура таблиц и связеймежду ними:



Рис. 1

Форматы полей в таблицах:
CREATE TABLE CHASTT (
  KOD INTEGER NOT NULL,
  VCH VARCHAR(20) NOT NULL
)
CREATE TABLE MODELL (
  KOD3 INTEGER NOT NULL,
  MODEL VARCHAR(160) NOT NULL,
  K2 INTEGER
)
CREATE TABLE NAIMM (
  KOD2 INTEGER NOT NULL,
  NAIM VARCHAR(160) NOT NULL,
  K1 INTEGER
)
CREATE TABLE RAZDELL (
  KOD1 INTEGER NOT NULL,
  RAZDELVARCHAR(160) NOT NULL
)
CREATE TABLE SVODKA (
  KOD5 INTEGER NOT NULL,
  SERNO VARCHAR(20),
  K4 INTEGER NOT NULL,
  SER FLOAT,
  ZOL FLOAT,
  PT FLOAT,
  PG FLOAT,
  DVIP CHAR(4),
  DVVOD CHAR(4),
  DSPIS CHAR(4),
  SROK SMALLINT,
  KATEGOR SMALLINT,
  CENA FLOAT,
  PRIMECH CHAR(200),
  K3 INTEGER
)
Между полями в таблицахустановлена ссылочная целостность согласно рисунку 1.
В InterBase отсутствует аппаратавтоинкрементных столбцов. Вместо этого для установки уникальных значенийстолбцов я использовал аппарат генераторов. Перед запоминанием для каждойтаблицы генерируется уникальное значение с помощью функции Gen_id.Например, для сводной таблицы
CREATE TRIGGER NOVOE FOR RAZDELL BEFORE INSERTPOSITION 0 AS
BEGIN
  new.kod1 =gen_id(gen1,1);
END
Удаленными процедурами непользовался – хватило возможностей sql запросов для реализациивсех потребностей.
Задал индексы по полям: Modell.model, naimm.naim, chastt.vch, razdell.razdelдля увеличенияскорости выполнения запросов.
Проектирование приложения в среде Delphi
Используемые средства
Приложение было написано всреде Delphi 7 на компьютере Athlon 1600+XP, чтоочень плохо, потому что приложение написано для компьютера, намного уступающегопо мощности моему. Платформа БД – InterBase 6.0.
Формы

Первая форма типа DataModule– “DM”, на которой располагаются не визуальные компонента доступа кданным. Вид формы на этапе проектирования:
Для доступа к данным яиспользовал компоненты со вкладки InterBase, характерной особенностьюкоторых является то, что они не обращаются к BDE и являются более компактнымии быстрыми.
Назначение компонентов:
o  IBDataBase1 – создает соединение с БД InterBase.Есть свойство DataBaseName, которое указывает имя физической БД, с которойсвязан компонент. При связи с удаленной БД по протоколу TCP/IPимя записываетсяв формате :; по протоколу NetBios– в формате \; по протоколу SPX – в формате @. При запуске приложения расположение БД берется из файла del.ini:
  Inii := TIniFile.Create(getcurrentdir+'del.ini');
  try
  str:=Inii.ReadString( 'Baza', 'Put', '');
  ibdatabase1.databaseName:=str;
  IBDatabase1.Connected:=true;
  IBTransaction1.Active:=true;
  IBTable1.Active:=true;
  IBTable2.Active:=true;
  IBTable3.Active:=true;
   IBTable4.Active:=true;
  IBTable5.Active:=true;
   IBTable44.Active:=true;
Текст файла del.ini,если БД на локальном компьютере в папке D:interBase:
[Baza]
Put=D:interBasebase.gdb
Следущее использованноесвойство – Params, которое содержит список параметров, которые передаются серверув момент соединения:
USER_NAME=SYSDBA
PASSWORD=masterkey
lc_ctype=WIN1251
Тут задается имяпользователя и пароль – окно с запросом пароля при подключении не появляется.
o  IBTranzaction1 – транзакция
o  IBTable~ — аналог TTable.Отличается тем, что работает быстрее и грузит данные по надобности.
o  IBQyery~ — аналог TQuery.
o  OPDial – окно выбора файла – длязагрузки запроса из файла.
При попытке сохранениязаписи в таблицу Svodka запускается процедура:
procedure TDM.IBTable1BeforePost(DataSet: TDataSet);
begin
  ifibtable1.fieldbyname('K4').AsString='' then begin
    MessageDlg('Введите номер воинскойчасти',mterror,[mbok],0);
    ibtable1.fieldbyname('K4').FocusControl;
    abort;
  end;
  ifibtable1.fieldbyname('SerNo').AsString='' then begin
    MessageDlg('Введите серийный номер аппарата!', mterror, [mbok],0);
   ibtable1.fieldbyname('SerNo').FocusControl;
    abort;
  end;
  ifibtable1.fieldbyname('K3').AsString='' then begin
    MessageDlg('Введите модель аппарата!',mterror,[mbok],0);
   ibtable1.fieldbyname('K3').FocusControl;
    abort;
  end;
    if ibtable1.State=dsinsert then IBTable1. FieldByName('KOD5').AsInteger:=-1; (*)
end;
Нужна для предотвращениязанесения null в поля SerNo,K3,K4, по которым можнооднозначно идентифицировать запись в наборе данных svodka (по ним можно построитьключ).
Еще один нюанс – если убратьстроку (*), то при добавлении новой записи будет выдаваться ошибка, что не заполненополе, на которое стоит ограничение not null.Эта ошибка возникает, потому что сервер interBase генерирует уникальноезначение в поле “KOD5” после сохранения, а до сохранения он проверяетзначение в поле “KOD5”, записи, полученной от клиентского приложения напустое значение, то есть до генерации не доходит. Для того, чтобы этогоизбежать мы при добавлении новой записи заносим в поле “KOD5”любое числовое значение, которое все равно потом триггером поменяется науникальное. Аналогичное действие мы проводим для всех таблиц.
FormMain иFormVvod2
FormMain– основная, родительская форма для всех остальных форм. Управление отображениемдочерних окон внутри родительской осуществляется с помощью Apiфункции ShowWindow.
FormVvod2– экранная форма с отображением параметров одного конкретно взятого прибора.Навигация идет по таблице Svodka, с которой связан компонентIBTable1 из формы DM. Воинская часть и модель отображаютсяс помощью связи компонента TLookupKomboBox из компонентов IBTable44и IBTable5 соответственно.




Вид форм при работепрограммы:

FormVvod

Вид формы при работепрограммы:

В форме отображаются записи таблицы svodka,с которой связан компонент IBTable1. Добавил поля Lookup в компонент IBTable и в таблице появились полявыбора воинской части и модели аппарата.
Vch
В форме – список всехвоинских частей.
Вид:



Svazka

Вид формы:
С помощью галочки «Связанныйнабор» можно устанавливать или убирать связь между таблицами “Раздел”, “Наименование”и “Модель”. Тип связей: “Наименование” подчиненная для “Раздела”, а “Модель” –подчиненная для “Наименования”. Процедура клика на CheckBox:
procedure TSvazka.CheckClick(Sender: TObject);
begin
  if check.Checkedthen begin
    svazka.Caption:='Редактированиесвязанных таблиц: Раздел->Наименование->Модель';
    dm.IBTable3.active:=false;
   dm.IBTable4.active:=false;
   dm.IBTable3.IndexFieldNames:='K1';
   dm.IBTable3.MasterSource:=dm.DataSource2;
    dm.IBTable4.IndexFieldNames:='K2';
   dm.IBTable4.MasterSource:=dm.DataSource3;
   dm.IBTable3.active:=true;
   dm.IBTable4.active:=true;
  end
  else begin
    svazka.Caption:='Редактирование несвязанных таблиц';
    dm.IBTable3.MasterSource:=nil;
    dm.IBTable3.IndexFieldNames:='NAIM';
   dm.IBTable4.MasterSource:=nil;
   dm.IBTable4.IndexFieldNames:='MODEL';
  end;
end;

Из текста процедуры видно,что мы меняем свойства MasterSource, которое содержит ссылку наглавную таблицу и выставляем индекс – для сортировки по алфавиту при отсутствиисвязей между таблицами. Но эта форма используется еще и для задания параметровзапросу, который будет рассмотрен ниже.
Avtи Opr
О авторе и о программе.
ZaprVibr

Вид формы:
Форма нужна для выбора типазапроса(а по запросу формируем отчет).
Запросы
Поиск не списанного илисписанного аппарата

Данные запросы почтиполностью одинаковы, рассмотрим поиск не списанного аппарата.
Вид формы:

DbGridсвязана с Zapr1 черезDZapr.
Текст запроса:
select kod5,vch,model,serno,dvip,cena
from SVODKA,CHASTT,MODELL
where  K4 in
   (select KOD
    from CHASTT
    whereUPPER(VCH) like upper(:pvch)
    )    and (UPPER(serno) like upper(:pserno)) 
              and (dspis is null)
                      and  K3 in
                       (select KOD3
                       from Modell
                       where UPPER(Model) like upper(:pmodel)
                       )
and svodka.k4=chastt.kod and svodka.k3=modell.kod3
orderby vch
Тут используются вложенныезапросы. Параметры берутся из полей edit. Для независимости отрегистра используем процедуру UPPER. Процедура нажатия накнопку «Выполнить»:
  with dm do begin
  Zapr1.Active:=false;
  if ch1.Checkedthen zapr1.ParamByName('pvch').Value:= '%'+edit1.Text+'%'
    elsezapr1.ParamByName('pvch').Value:='%%';
  if ch2.Checkedthen zapr1.ParamByName('pserno').Value:= '%'+edit2.Text+'%'
    elsezapr1.ParamByName('pserno').Value:='%%';
  if ch3.Checkedthen zapr1.ParamByName('pmodel').Value: ='%'+edit3.Text+'%'
    elsezapr1.ParamByName('pmodel').Value:='%%';
 Zapr1.Active:=true;
 label2.Caption:=inttostr(zapr1.RecordCount);
  end;
При нажатии на кнопку простозадаются параметры sql запросу. В SQLиспользуетсяоператор Like – для поиска по части строки символы %, стоящие в начале и вконце параметра означают, что вместо них могут стоять любые другие.
Работает запрос так: ищутсятакие записи в svodka, у которых K4 и K3 находятся из вложенныхзапросов как коды записей с частичным совпадением не ключевых полей с заданнымипараметрами “pvch” и “pmodel”, и серийный номер частично совпадает с “pserno”.
Аппарат является несписанным, если в поле “DSpis” (Дата списания) содержитсязначение null. Если нам надо найти списанный аппарат, то запрос будет почтитакой же, только DSpis is notnull. Поэтому поиск списанного аппарата я рассматривать не буду.
Отобранные записисортируются по номеру воинской части (Order byvch).
Кнопка «Перейти» нужна дляперехода в таблице IBTable1  каппарату, который является текущим в таблице отобранных с помощью запросааппаратов. Процедура нажатия на кнопку «Перейти»:
procedure TZ1.SpeedButton1Click(Sender: TObject);
begin
dm.IBTable1.Locate('KOD5',vararrayof([dm.zapr1.FieldByName('kod5').Value]),[]);
 ShowWindow(formvvod2.Handle, SW_SHOW);
  formvvod2.Show;
end;
Переход нужен для просмотра параметров, которые не выводятсязапросом или же для изменения значений полей.

Поиск аппарата по группам

После выбора данноговида поиска на экране появляется форма “Svazka”, дополненная несколькимиэлементами. Ее вид:


Добавились 3 CheckBox– для выбора по какому критерию мы будем отбирать аппараты. Одновременно большеодного критерия быть выбрано не может. Процедура нажатия на кнопку «Выполнить»:
procedure TSvazka.SpeedButton2Click(Sender: TObject);
begin
  with dm do begin
    Zapr3.Active:=false;
    zapr3.SQL.Clear;
    zapr3.SQL.Add('select *');
    zapr3.SQL.Add('from naimm,modell,chastt,svodka');
    if c3.Checked then begin
      zapr3.SQL.Add('wheresvodka.k3= '+dm.ibtable4.fieldbyname('KOD3').AsString);
      zapr3.SQL.Add('and modell.kod3='+dm.ibtable4.fieldbyname('KOD3').AsString);
      zapr3.SQL.Add('and modell.k2=naimm.kod2');
      zapr3.SQL.Add('andsvodka.k4=chastt.kod');
    end
    else if c2.Checked then begin
      zapr3.SQL.Add('wheresvodka.k3=modell.kod3');
      zapr3.SQL.Add('andnaimm.kod2= '+dm.ibtable3.fieldbyname('KOD2').AsString);
      zapr3.SQL.Add('and modell.k2='+dm.ibtable3.fieldbyname('KOD2').AsString);
      zapr3.SQL.Add('andsvodka.k4=chastt.kod');
    end
    else if c1.Checked then begin
      zapr3.SQL.Add('wheresvodka.k3=modell.kod3');
      zapr3.SQL.Add('andmodell.k2=naimm.kod2');
      zapr3.SQL.Add('and naimm.k1='+dm.ibtable2.fieldbyname('KOD1').AsString);
      zapr3.SQL.Add('andsvodka.k4=chastt.kod');
    end;
    zapr3.SQL.Add('and  svodka.k4=chastt.kod');
    zapr3.SQL.Add('order by vch');
    if c1.Checked or c2.Checked orc3.Checked then Zapr3.Active:=true
    elsemessagedlg('Надо выделить хоть одну категорию!',mtinformation,[mbok],0);
    z3.label2.Caption:=inttostr(zapr3.RecordCount);
  end;
    ShowWindow(z3.Handle,SW_SHOW);
    z3.Show;
end;

Процедура заполняет sqlзапроскомпонента zapr3 и выводит на экран форму “Z3” с результатом:

В этой форме таблицасвязанна с zapr3, а кнопка «Перейти» работает также как кнопка, описанная выше.Количество отобранных записей выводится с помощью метода recordcount.
Загрузка запроса из файла.
Текст запроса загружается спомощью метода loadfromfile. Возможность загрузкизапроса из файла очень удобна, так как запрос очень легко можно перенести и ненадо перекомпилировать программу.
Пример:
Текст запроса в файле «Всеиз сводки.sql»:
select*
fromsvodka
/* грузит все из таблицы сводки */

Форма с результатами:

Список аппаратов вопределенной части
Для этого запроса меняпросили сделать отчет. Запрос показывает все аппараты в заданной воинской частисо всеми их характеристиками.
Поиск идет по неполномусовпадению (Like). Но если нужен отчет, то надо задать номер воинской частиполностью (чтоб по нескольким воинским частям выборки не произошло).


Вид формы:

Текст sql запроса:
selectvch,razdel,naim,model,serno,dspis,dvvod,cena,ser,zol,pt,pg,kod5
from chastt,razdell,naimm,modell,svodka
where
chastt.vch like :par   
and        svodka.k4=chastt.kod
and        svodka.k3=modell.kod3
and        naimm.kod2=modell.k2
and         razdell.kod1=naimm.k1
order by vch,razdel,naim,model,dspis

Этот запрос я сделал безподзапросов (не знаю что быстрее, наверное быстрее без подзапросов, зато сподзапросами нагляднее).
Формирование отчета.
В Delphi 7 отчеты делаются уже не спомощью компонентов QReport, а с помощью Rave Report.Вкладки QReport больше не существует. Так как система Delphi 7 вышла недавно, топришлось разбираться по справке. В общем то принципы остались те же – разбитиедокумента на несколько полос и т. д. Для работы с отчетами на форме расположенодва не визуальных компонента — RvProject1, с помощью которого идет связь сфайлом проекта и RvDataSetConnection1 – связь с набором данных. Файл проектастроится с помощью утилиты Rave Designer. Отчет при проектированиивыглядит так:





Я сформировал отчет,выровнял и сохранил как otch4.rav.

Вид отчета при работеприложения:

Отчет вызывается по нажатиина кнопку «Отчет» через метод execute компонента rvproject1.
Заключение
Самый сложный этап –формирование таблиц, связей между ними, ссылочной целостности. Типы данных в InterBaseкакие-то «корявые». Float – точность 7 знаков. Если вносишь десятичную дробь,целая часть у которой равна нулю, то в дробной части гарантируется точность до7 знаков после запятой. Например, если внести 0.123, а потом сохранить запись,то в этом поле будет число 0.1230000004233858, что конечно же не наглядно иприбавляет программисту лишней головной боли. Тип varchar – доставляет пробелов додлины строки – опять неудобства – если максимальная длина строки – 120символов, а там допустим слово из 5 букв, то будет сохранено слово+115 пробеловперед ним, теперь смотрим в поле – видим пусто (если поле длиной меньше 120символов). При попытке переформировать таблицу данные исчезают. Возможно этонеудобство InterBase, но есть системы и лучше – MS SQLServer,Oracl. После соединения с сетевой базой данных работа с ней мало чемотличается от работы с локальной базой данных.
Я получил приложение,которое осуществляет все виды операций с удаленной базой данных, такие, каквставка, удаление, выборка данных. Подключение идет через стандартные сетевыепротоколы к серверу баз данных InterBase. Если сравнивать локальныеи сетевые базы данных, то, на мой взгляд, будущее за сетевыми базами данных, алокальные базы будут уходить в прошлое. Причина – широкое распространениелокальных сетей и сети Internet. Проще подключиться к сети,сформировать запрос и тут же получить нужные данные, чем хранить все на своемкомпьютере. Как видно из моей работы, с помощью объектно-ориентированного программированиястроить сложное приложение становится все проще и проще, растут мощности компьютеров,объемы ОЗУ и ПЗУ и приложения работают с базами данных все быстрее и быстрее.

Список используемой литературы:
1. «Microsoft®Access 2000», И.А. Харитонова, В.Д. Михеева, издательство «БХВ — Петербург»,1999
2. «Базыданных: Учебный курс», С.В. Глушаков, Д.В. Ломотько, ООО «Издательство АСТ»,2000
3. «Delphi5 Руководство разработчика баз данных», В.В. Фаронов, П.В. Шумаков,издательство «Нолидж», 2001
4. «Работас базами данных в Delphi», В.Э. Гофман, А.Д. Хомоненк


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.