Смекни!
smekni.com

Создание базы данных (стр. 2 из 4)

Таблицу можно создать, воспользовавшись входящей в состав Delphi утилитой Borland Database Desktop или организовав SQL-запрос к серверу базы данных.

SQL (англ. Structured Query Language — язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Вопреки существующим заблуждениям, SQL является информационно-логическим языком, а не языком программирования.SQL основывается на реляционной алгебре.

Язык SQL делится на три части:

1) операторы определения данных (англ. Data Definition Language, DDL)

2) операторы манипуляции данными (англ. Data Manipulation Language, DML)

3) операторы определения доступа к данным (англ. Data Control Language, DCL)

Преимущества:

1) Независимость от конкретной СУБД

Несмотря на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. Существуют системы, разработчики которых изначально закладывались на применение по меньшей мере нескольких СУБД (например: система электронного документооборота Documentum может работать как с Oracle, так и с Microsoft SQL Server и IBM DB2). Естественно, что при применении некоторых специфичных для реализации возможностей такой переносимости добиться уже очень трудно.

2) Наличие стандартов

Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка. Правда, стоит обратить внимание, что сам по себе стандарт местами чересчур формализован и раздут в размерах, например, Core-часть стандарта SQL:2003 представляет собой более 1300 страниц текста.

3) Декларативность

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

Недостатки:

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

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

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

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

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

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

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

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

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

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

2) Сложность

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

4) Отступления от стандартов

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

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

Ранее 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['Примечания']]);