Таблицу можно создать, воспользовавшись входящей в состав 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['Примечания']]);