50131 (Создание базы данных), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Создание базы данных", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "50131"

Текст 2 страницы из документа "50131"

Недостатки:

1) Несоответствие реляционной модели данных

Создатель реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности они указывают на следующие проблемы SQL[3]:

А) Повторяющиеся строки

Б) Неопределённые значения (nulls)

В) Явное указание порядка колонок слева направо

Г) Колонки без имени и дублирующиеся имена колонок

Д) Отсутствие поддержки свойства «=»

Е) Использование указателей

Ж) Высокая избыточность

В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем Манифесте они излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.

2) Сложность

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

  1. Отступления от стандартов

Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

  1. Сложность работы с иерархическими структурами

Ранее SQL не предлагал стандартного способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения. Например, Oracle использует выражение CONNECT BY. В настоящее время в качестве стандарта принята рекурсивная конструкция WITH.

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

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

  2. управление данными в оперативной памяти с использованием дискового кэша;

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

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

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

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

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

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

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

2. Конструкторская часть

2.1 Структура БД

БД состоит из 7 таблиц: 5 по 5 факультетам, содержащие список групп, относящихся к конкретному факультету(КМК.db, МТК.db, СЭК.db, ФНК.db, ЭИУК.db), одна содержащая список 5 факультетов(Facultets.db), и еще одна – главная, содержащая подробные сведения о каждом студенте, обучающемся в КФ МГТУ(Students.db). Программа, созданная для управления БД, будет брать и отображать сведения, как правило, лишь из последней таблицы, к остальным же будет обращаться при сортировке, нумерации, редактировании данных в БД и прочих процедурах. Таблица Facultets неизменна.

Таблица Students содержит следующие поля: Номер, ФИО, Факультет, Курс, Группа, Поощрения, Сумма, Дата выдачи, Примечание, Поездки, Примечания.

2.2 Разработка конвертера таблицы Excel в БД

Одна из первых проблем, появившихся при формировании БД, - это перенос существующих данных из простой таблицы в Excel в файл с расширением *.db. Перенести данные ручным набором не представлялось возможным из-за большого количества записей (около 3500). Поэтому помимо основного проекта DataBase был создан проект Converter. Суть его работы заключается в переносе содержимого из файла с расширением *.csv (файл такого формата представляет из себя набор ячеек таблицы Excel, разделенных между собой точкой с запятой), в таблицу Students. Тонкость работы этой программы в том, что работать она будет только для конкретного csv-файла (отформатированного конкретным образом). На выходе мы должны будем получить таблицу Students, в состав которой уже входят все студенты КФ МГТУ, т.е. с заполненными полями Номер, ФИО, Факультет, Курс, Группа. Помимо того, в каждую из 5 баз данных (КМК, МТК, СЭК, ФНК, ЭИУК) запишется список всех групп данного факультета.

2.3 Разработка интерфейса главной формы СУБД

Главная форма для отображения БД использует компонент DBGrid, а для управления БД – главное меню, имеющее следующие пункты: Файл(Функции поиска в БД), Правка (Редактирование информации в БД), Дополнительно (Процедура перевода всех записей в БД на один семестр вперед) и Справка (Открытие файла ReadMe, см. Инструкцию пользователя).

2.4 Разработка модуля отображения БД

При запуске программы мы должны получить наибольшее возможное рабочее пространство занятое компонентом DBGrid, заполненным следующим образом: сортировка осуществляется по полям Факультет, Курс, Группа, и уже в каждой группе происходит отдельная сортировка по фамилии и затем нумерация внутри группы. Для этого используется один компонент Table (отображение всей таблицы Students) и 3 компонента Query, с помощью которых мы будем осуществлять SQL-запросы для различных операций с БД (в том числе – сортировка и нумерация). Для приведения компонента DBGrid к нужному нам виду используется следующая процедура:

procedure Vid_DBGrid;

begin

With Form1.DBGrid1 do begin

//Выравниваем ширину столбцов

Columns[0].Width:=20;

Columns[1].Width:=250;

Columns[3].Width:=30;

Columns[5].Width:=100;

Columns[6].Width:=55;

Columns[7].Width:=90;

Columns[8].Width:=250;

Columns[9].Width:=100;

Columns[10].Width:=230;

//Делаем столбец поощрения всплывающим списком

With Columns[5].PickList do begin

Add('Мат. помощь');

Add('Соц. стипендия');

Add('Соц. выплаты');

Add('Другие поощрения');

end;

//Делаем столбец поездки всплывающим списком

With Columns[9].PickList do begin

Add('Москва');

Add('Снакт-Петербург');

Add('Юг');

end;

end;

end;

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

//Открываем БД

Table1.Active:=true;

//Открываем БД с факультетами

With Query3 do begin

Close;

SQL.Clear;

SQL.Add('SELECT *');

SQL.Add('FROM Facultets.db');

Open;

end;

//счетчик записей

n:=0;

//от 1 до количества факультетов

for i:=1 to Query3.RecordCount do begin

//Открываем БД, название которой соответсвует полю факультет текущей записи в БД Факультеты

With Query2 do begin

Close;

SQL.Clear;

SQL.Add('SELECT *');

SQL.Add('FROM '+Query3['Факультет']+'.db');

Open;

end;

//От 1 до количества групп на факультете

for j:=1 to Query2.RecordCount do begin

//Открываем БД студенты и считываем только те записи, в которых поле группа соответствует полю группа в текущей записи БД Факультет

With Query1 do begin

Close;

SQL.Clear;

SQL.Add('SELECT *');

SQL.Add('FROM Students.db');

SQL.Add('WHERE Группа LIKE "'+Query2['Группа']+'"');

SQL.Add('ORDER BY ФИО');

Open;

end;

//От 1 до количества студентов в группе

for k:=1 to Query1.RecordCount do begin

//Добавляем в конец БД студенты запись с порядковым номером студента внутри группы

Table1.AppendRecord([k,Query1['ФИО'], Query1['Факультет'], Query1['Курс'], Query1['Группа'], Query1['Поощрения'], Query1['Сумма'], Query1['Дата выдачи'], Query1['Примечание'], Query1['Поездки'], Query1['Примечания']]);

Query1.Next;

n:=n+1;

end;

//Переходим на следующую группу

Query2.Next;

end;

//Переходим на следующий факультет

Query3.Next;

end;

//Возвращаемся к началу БД студенты

Table1.First;

//Удаляем все записи, кроме недавно добавленных

for i:=1 to n do

Table1.Delete;

2.5 Разработка средств редактирования БД

Также в курсовом проекте предусмотрено добавление и удаление студентов, а также добавление и удаление групп.

Добавление студентов осуществляется в новом окне, а сама процедура добавления заключается в нижеприведенном коде:

//Добавляем запись, поля которой соответствуют текущим значениям 3-х списков и полю Edit1 в конец БД

Form1.Table1.AppendRecord([1,Edit1.Text,ComboBox1.Items[ComboBox1.ItemIndex],ComboBox2.Items[ComboBox2.ItemIndex],ComboBox3.Items[ComboBox3.ItemIndex]]);

Form1.Table1.First;

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

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

2.6 Разработка системы поиска информации в БД

В курсовой работе представлено 2 варианта поиска: простой и расширенный. Простой поиск выводит в DBGrid одну запись, поле ФИО которой равно введенному в строке поиска тексту или же начинается с тех же символов.

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

DataSource2.DataSet:=Table1;

Vid_DBGrid;

Table1.First;

//Находим в БД студенты удаляемую запись

for i:=1 to Table1.RecordCount do begin

if Table1['ФИО']=Query1['ФИО'] then begin

Query1.Close;

s:=Table1['Группа'];

Table1.Delete;

break;

end;

Table1.Next;

end;

//Для всех записей за ней из той же группы уменьшаем порядковый номер на 1

b:=true;

While b=true do

if Table1['Группа']=s then begin

Table1.Edit;

Table1['Номер']:=Table1['Номер']-1;

Table1.Post;

Table1.Next;

end else

b:=false;

Вторая кнопка отображает в DBGrid вновь все записи, при этом осуществляя Refresh всех записей. Третья кнопка вызывает окно добавления информации (см. рис.1), предназначенное для добавления информации к тем студентам, которые получают более одного поощрения или ездили более, чем в одну поездку. Примечательность работы этого окна заключается том, что в поле Сумма будет выводиться общая сумма, полученная студентом с момента выдачи первого поощрения.

рис.1 Окно добавления информации

2.7 Разработка функции перехода в следующий семестр

Один раз в семестр одно из полей нашей БД (Группа) должно меняться, раз в год меняется еще одно поле (Курс), а те записи, значение поля Группа которых заканчивается буквой “Д” (ЭВМ-1Д), должны удаляться из БД, но сохраняться в еще каком-нибудь месте.

Реализовано это в пункте меню Доплонительно Перейти в след. Семестр. Выпускники при выполнении этой операции удаляются из БД и записываются в файл с расширением *.csv.

procedure TForm1.N14Click(Sender: TObject);

var

i,j,k:integer;

s,st,str:string;

f:textfile;

begin

if MessageDlg('Вы уверены, что хотите перевести всех студентов в следующий семестр?',mtConfirmation,[mbOK, mbCancel],0)=mrOK then begin

assignfile(f,'Выпускники'+DateToStr(Now)+'.csv');

rewrite(f);

for i:=1 to Table1.RecordCount do begin

s:=Table1['Группа'];

j:=0;

str:='';

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4100
Авторов
на СтудИзбе
670
Средний доход
с одного платного файла
Обучение Подробнее