Министерство образования и науки Российской Федерации

КНИТУ – КАИ имени

---

Кафедра ПМИ

КУРСОВАЯ РАБОТА

по дисциплине

«Базы данных»

Выполнил: ст. гр. 4310

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

Оценка_________________

Подпись________________

“___” ________________2012г.

КАЗАНЬ 2012

Оглавление:

Оглавление: 2

Инфологическая модель предметной области. 3

Составление перечня атрибутов предметной области. 3

Определение сущностей. 4

Агрегация атрибутов в сущности. 4

Определение первичных ключей. 5

Графическое представление сущностей. 5

Определение связей. 5

Графическое изображение инфологической модели предметной области. 6

Проектирование концептуальной модели предметной области. 7

Преобразование сущностей в отношения. 7

Установление свойств атрибутов. 8

Графическое изображение концептуальной модели предметной области. 10

Пример запросов к бд: 10

Руководство пользователя. 11

Листинг программы: 14

Список литературы.. 38

Инфологическая модель предметной области

Составление перечня атрибутов предметной области

На основании системного анализа предметной области представим атрибуты в следующей таблице 1.

Таблица 1.

Обознач.

атрибута

Имя атрибута

Примечание

x1

Паспорт - Фамилия

x2

Паспорт - Имя

x3

Паспорт - Отчество

x4

Номер паспорта

x5

Номер фото

x6

Номер полиса

x7

Номер визы

x8

Номер приглашения

x9

Код визы

x10

Код паспорта

x11

Код фото

x12

Код загранпаспорта

x13

Код приглашения

x14

Код полиса

х15

Полис - дата начала действия

Х16

Полис – дата конца действия

Х17

Виза – дата начала действия

Х19

Виза – номер паспорта

х20

Виза - категория

Х24

Приглашение – цель визита

Х25

Номер загранпаспорта

Х26

Загранпаспорт - дата начала действия

Х27

Загранпаспорт - дата конца действия

Определение сущностей

Агрегация атрибутов в сущности

Выявляем типы соответствия атрибутов из полученного перечня:

НЕ нашли? Не то? Что вы ищете?

Y1={x7, x10, x11, x12, x13, x14, x17, x18, x20} – сущность «Виза»

Y2={x5} – сущность «Фото»

Y3={х1, х2, х3, х4} – сущность «Паспорт»

Y4={х6, х15, х16} – сущность «Полис»

Y5={х8, х24} – сущность «Приглашение»

Y6={х25, х26, х27} – сущность «Загранпаспорт»

Результат агрегации атрибутов в сущности представим в таблице 2.:

Таблица 2.

Обозначение сущности

Имя сущности

Список атрибутов

Y1

виза

x7, x10, x11, x12, x13, x14, x17, x18, x20

Y2

Фото

Х5

Y3

Паспорт

х1, х2, х3, х4

Y4

Полис

х6, х15, х16

Y5

Приглашение

х8, х24

Y6

Загранпаспорт

х25, х26, х27

Определение первичных ключей

Первичные ключи полученных сущностей приведены в таблице 3.:

Таблица 3.

Сущности

Первичные ключи

виза

Х9 – код визы

фото

Х11 – код фото

паспорт

Х10 – код паспорта

полис

Х14 – код полиса

приглашение

Х15 – код приглашения

загранпаспорт

Х12 – код загранпаспорта

Графическое представление сущностей

Определение связей

Внесем информацию о связях в таблицу 4.:

Таблица 4.

Сущность 1

Сущность 2

Тип связи

Обязательность

виза

фото

1:1

1-1

виза

паспорт

1:1

1-1

виза

полис

1:1

1-1

виза

приглашение

1:1

1-1

виза

загранпаспорт

1:1

1-1

Графическое изображение инфологической модели предметной области

Проектирование концептуальной модели предметной области

Преобразование сущностей в отношения

1.  Преобразование сущности ФОТО в отношение PHOTO:

2.  Преобразование сущности ПРИГЛАШЕНИЕ в отношение INVITATION:

3.  Преобразование сущности ПАСПОРТв отношение PASPORT:

4.  Преобразование сущности ВИЗА в отношение VISA:

Преобразование сущности ПОЛИС в отношение POLICY:

5.  Преобразование сущности ЗАГРАНПАСПОРТ в отношение INT_PASPORT

Установление свойств атрибутов

1.  Свойства атрибутов отношения PHOTO:

Атрибут

Тип

PHOTO_CODE

Int Not Null

PHOTO_NUM

Int Not Null

2.  Свойства атрибутов отношения INVITATION:

Атрибут

Тип

INV_CODE

Int Not Null

INV_NUM

Int Not Null

INV_PURP_OF_VISIT

Varchar(40) Not Null

3.  Свойства атрибутов отношения PASPORT:

Атрибут

Тип

PASPORT_CODE

Int Not Null

PASPORT_SURNAME

Varchar(30) Not Null

PASPORT_NAME

Varchar(30) Not Null

PASPORT_MIDDLE

Varchar(30) Not Null

PASPORT_NUM

Int Not Null

4.  Свойства атрибутов отношения VISA:

Атрибут

Тип

VISA_CODE

Int not Null

VISA_NUM

Int not Null

PASPORT_CODE

Int not Null

PHOTO_CODE

Int not Null

INT_PASPORT_CODE

Int not Null

INV_CODE

Int not Null

POLICY_CODE

Int not Null

VISA_BEGINS

Date Not Null

VISA_ENDS

Date Not Null

VISA_CATEGORY

Varchar(1) Not Null

5.  Свойства атрибутов отношения POLICY:

Атрибут

Тип

POLICY_CODE

Int Not Null

POLICY_NUM

Int Not Null

POLICY_BEGINS

Date Not Null

POLICY_ENDS

Date Not Null

6.  Свойства атрибутов отношения INT_PASPORT

Атрибут

Тип

INT_PASPORT_CODE

Int Not Null

INT_PASPORT_NUM

Int Not Null

INT_PASPORT_BEGINS

Date Not Null

INT_PASPORT_ENDS

Date Not Null

Графическое изображение концептуальной модели предметной области

Пример запросов к бд:

Вставка строки в таблицу PHOTO

INSERT INTO photo (photo. photo_code, photo. photo_num) VALUES

(1, 54);

Обновление записи в таблице PHOTO

UPDATE photo SET photo. photo_num = 63

WHERE photo. photo_code = 1;

Удаление записи из таблицы PHOTO

DELETE FROM photo

WHERE photo_num = 63

Руководство пользователя

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

Активная таблица выбирается из выпадающего меню.

Для добавления записи в таблицу необходимо указать значения полей и нажать на кнопку «Добавить».

Новая запись добавлена в таблицу.

Для удаления записей из таблицы необходимо указать значения полей удаляемых записей и нажать на кнопку «Удалить».Некоторые поля могут быть опущены.

Для поиска записей из таблицы необходимо указать значения полей искомых записей и нажать на кнопку «Поиск».Некоторые поля могут быть опущены.

Листинг программы:

Form1.cs

using System;

using System. Collections. Generic;

using ponentModel;

using System. Data;

using System. Drawing;

using System. Text;

using System. Windows. Forms;

namespace kai

{

public partial class Form1 : Form

{

private string[] table = new string[3] ;

public Form1()

{

InitializeComponent();

refresh_data(true);

toolStripComboBox1.SelectedIndex = 0;

//refresh_data();

// пол

//comboBox2.SelectedIndex = 0;

// дата рождения

/* dateTimePicker1.Value = DateTime. Today;

dateTimePicker1.Value = DateTime. Today. AddMonths(-1);*/

}

private void refresh_data(bool force)

{

dbwork db = new dbwork();

DataTable dt;

if (groupBox2.Visible || force)

{

// dataGridView1.DataSource = dt;

dt = db. getData("pasport");

comboBox2.DataSource = dt;

comboBox2.ValueMember = "pasport_code";

}

if (groupBox3.Visible || force)

{

dt = db. getData("photo");

comboBox3.DataSource = dt;

comboBox3.ValueMember = "photo_code";

}

if (groupBox4.Visible || force)

{

dt = db. getData("int_pasport");

comboBox4.DataSource = dt;

comboBox4.ValueMember = "INT_PASPORT_CODE";

}

if (groupBox5.Visible || force)

{

dt = db. getData("INVITATION");

comboBox5.DataSource = dt;

comboBox5.ValueMember = "INV_CODE";

}

if (groupBox6.Visible || force)

{

dt = db. getData("POLICY");

comboBox6.DataSource = dt;

comboBox6.ValueMember = "POLICY_CODE";

}

if (table[0] != null)

{

dt = db. getData(table[0]);

dataGridView1.DataSource = dt;

}

}

public int getmaxcode(string tabl)

{

dbwork db = new dbwork();

DataTable dt;

dt = db. getData(tabl); int max = 0,y;

for (int i = 0; i <dt. Rows. Count; i++)

{

y = (int)dt. Rows[i].ItemArray[0];

if (y > max)

{

max = y;

}

}

return (max);

}

private string[] getparams()

{

string[] data = new string[17];

if (groupBox1.Visible)

{

data[1] += comboBox1.Text. Trim(); ;

}

if (groupBox2.Visible)

{

data[2] += comboBox2.Text. Trim(); ;

}

if (groupBox3.Visible)

{

data[3] += comboBox3.Text. Trim(); ;

}

if (groupBox4.Visible)

{

data[4] += comboBox4.Text. Trim(); ;

}

if (groupBox5.Visible)

{

data[5] += comboBox5.Text. Trim(); ;

}

if (groupBox6.Visible)

{

data[6] += comboBox6.Text. Trim(); ;

}

if (groupBox7.Visible)

{

data[7] += comboBox7.Text. Trim(); ;

}

if (groupBox8.Visible)

{

data[8] += comboBox8.Text. Trim(); ;

}

if (groupBox11.Visible)

{

data[9] += comboBox9.Text. Trim(); ;

}

if (groupBox12.Visible)

{

data[10] += comboBox10.Text. Trim(); ;

}

if (groupBox13.Visible)

{

data[11] += comboBox11.Text. Trim(); ;

}

if (groupBox14.Visible)

{

data[12] += comboBox12.Text. Trim(); ;

}

if (groupBox15.Visible)

{

data[13] += comboBox13.Text. Trim(); ;

}

if (groupBox16.Visible)

{

data[14] += comboBox14.Text. Trim(); ;

}

if (groupBox17.Visible)

{

data[15] += comboBox15.Text. Trim(); ;

}

if (groupBox18.Visible)

{

data[16] += comboBox16.Text. Trim(); ;

}

return data;

}

private void toolStripButton1_Click(object sender, EventArgs e)

{

string[] data;

DateTime from = new DateTime(1, 1, 1);

DateTime to = new DateTime(1, 1, 1);

if (groupBox9.Visible )

{

from = dateTimePicker1.Value;

}

if (groupBox10.Visible )

{

to = dateTimePicker2.Value;

}

data = getparams();

dbwork db = new dbwork();

db. add(data, table, from, to);

refresh_data(false);

table[2] = getmaxcode(table[0]).ToString();

/*gridCitizen. AutoGenerateColumns = false;

gridCitizen. DataSource = dt;

refresh_data(false);*/

}

private void toolStripButton2_Click(object sender, EventArgs e)

{

string[] data;

DateTime from = new DateTime(1, 1, 1);

DateTime to = new DateTime(1, 1, 1);

if (groupBox9.Visible)

{

from = dateTimePicker1.Value;

}

if (groupBox10.Visible)

{

to = dateTimePicker2.Value;

}

data = getparams();

dbwork db = new dbwork();

db. del(data, table, from, to);

refresh_data(false);

table[2] = getmaxcode(table[0]).ToString();

}

private void toolStripButton3_Click(object sender, EventArgs e)

{

string[] data;

DateTime from = new DateTime(1, 1, 1);

DateTime to = new DateTime(1, 1, 1);

if (groupBox9.Visible)

{

from = dateTimePicker1.Value;

}

if (groupBox10.Visible)

{

to = dateTimePicker2.Value;

}

data = getparams();

dbwork db = new dbwork();

DataTable dt = db. search(data, table, from, to);

dataGridView1.DataSource = dt;

}

private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

switch (toolStripComboBox1.Text)

{

case("виза"):

{

groupBox1.Visible = true; groupBox2.Visible = true; groupBox3.Visible = true; groupBox4.Visible = true;

groupBox5.Visible = true; groupBox6.Visible = true; groupBox7.Visible = false; groupBox8.Visible = true;

groupBox9.Visible = true; groupBox10.Visible = true; groupBox11.Visible = false; groupBox12.Visible = false;

groupBox13.Visible = false; groupBox14.Visible = false;groupBox15.Visible = false; groupBox16.Visible = false;

groupBox17.Visible = false; groupBox18.Visible = false;

table[0] = "VISA"; table[1] = "VISA_CODE";

table[2] = getmaxcode(table[0]).ToString();

break;

}

case ("паспорт"):

{

groupBox1.Visible = false; groupBox2.Visible = false; groupBox3.Visible = false; groupBox4.Visible = false;

groupBox5.Visible = false; groupBox6.Visible = false; groupBox7.Visible = true; groupBox8.Visible = false;

groupBox9.Visible = false; groupBox10.Visible = false; groupBox11.Visible = false; groupBox12.Visible = true;

groupBox13.Visible = true; groupBox14.Visible = true; groupBox15.Visible = false; groupBox16.Visible = false;

groupBox17.Visible = false; groupBox18.Visible = false;

table[0] = "PASPORT"; table[1] = "PASPORT_CODE";

table[2] = getmaxcode(table[0]).ToString();

break;

}

case ("фото"):

{

groupBox1.Visible = false; groupBox2.Visible = false; groupBox3.Visible = false; groupBox4.Visible = false;

groupBox5.Visible = false; groupBox6.Visible = false; groupBox7.Visible = false; groupBox8.Visible = false;

groupBox9.Visible = false; groupBox10.Visible = false; groupBox11.Visible = false; groupBox12.Visible = false;

groupBox13.Visible = false; groupBox14.Visible = false; groupBox15.Visible = true; groupBox16.Visible = false;

groupBox17.Visible = false; groupBox18.Visible = false;

table[0] = "PHOTO"; table[1] = "PHOTO_CODE"; int max = 0;

table[2] = getmaxcode(table[0]).ToString();

break;

}

case ("загранпаспорт"):

{

groupBox1.Visible = false; groupBox2.Visible = false; groupBox3.Visible = false; groupBox4.Visible = false;

groupBox5.Visible = false; groupBox6.Visible = false; groupBox7.Visible = false; groupBox8.Visible = false;

groupBox9.Visible = true; groupBox10.Visible = true; groupBox11.Visible = false; groupBox12.Visible = false;

groupBox13.Visible = false; groupBox14.Visible = false; groupBox15.Visible = false; groupBox16.Visible = true;

groupBox17.Visible = false; groupBox18.Visible = false;

table[0] = "INT_PASPORT"; table[1] = "INT_PASPORT_CODE"; int max = 0;

table[2] = getmaxcode(table[0]).ToString();

break;

}

case ("приглашение"):

{

groupBox1.Visible = false; groupBox2.Visible = false; groupBox3.Visible = false; groupBox4.Visible = false;

groupBox5.Visible = false; groupBox6.Visible = false; groupBox7.Visible = false; groupBox8.Visible = false;

groupBox9.Visible = false; groupBox10.Visible = false; groupBox11.Visible = true; groupBox12.Visible = false;

groupBox13.Visible = false; groupBox14.Visible = false; groupBox15.Visible = false; groupBox16.Visible = false;

groupBox17.Visible = true; groupBox18.Visible = false;

table[0] = "INVITATION"; table[1] = "INV_CODE"; int max = 0;

table[2] = getmaxcode(table[0]).ToString();

break;

}

case ("полис"):

{

groupBox1.Visible = false; groupBox2.Visible = false; groupBox3.Visible = false; groupBox4.Visible = false;

groupBox5.Visible = false; groupBox6.Visible = false; groupBox7.Visible = false; groupBox8.Visible = false;

groupBox9.Visible = true; groupBox10.Visible = true; groupBox11.Visible = false; groupBox12.Visible = false;

groupBox13.Visible = false; groupBox14.Visible = false; groupBox15.Visible = false; groupBox16.Visible = false;

groupBox17.Visible = false; groupBox18.Visible = true;

table[0] = "POLICY"; table[1] = "POLICY_CODE"; int max = 0;

table[2] = getmaxcode(table[0]).ToString();

break;

}

}

refresh_data(false);

}

}

}

dbwork. cs

using System;

using System. Collections. Generic;

using System. Text;

using FirebirdSql. Data. FirebirdClient;

using System. Data;

namespace kai

{

class dbwork

{

private string[] fields = new string[] { "VISA_NUM", "PASPORT_CODE", "PHOTO_CODE", "INT_PASPORT_CODE", "INV_CODE", "POLICY_CODE"

, "PASPORT_NUM", "VISA_CATEGORY", "INV_PURP_OF_VISIT", "PASPORT_NAME", "PASPORT_SURNAME", "PASPORT_MIDDLE"

, "PHOTO_NUM", "INT_PASPORT_NUM", "INV_NUM", "POLICY_NUM"};

private string[] date_fields = new string[] { "VISA_BEGINS", "VISA_ENDS", "POLICY_BEGINS", "POLICY_ENDS", "INT_PASPORT_BEGINS", "INT_PASPORT_ENDS" };

//-----

public string getConnectionString()

{

FbConnectionStringBuilder connectionString = new FbConnectionStringBuilder();

connectionString. DataSource = "localhost";

//@ - отключает управляющие символы типа \n

connectionString. Database = @"D:\dark\program\c#\sql\kurs\kurs. FDB";

connectionString. UserID = "SYSDBA";

connectionString. Password = "masterkey";

connectionString. Dialect = 3;

connectionString. Role = "ADMINISTRATOR";

connectionString. Charset = "WIN1251";

return connectionString. ToString();

}

public DataTable OpenSQL

(

string sqlString,

DataTable existTable,

FbConnection connectionID

)

{

//Если на вход не подали таблицу - создать

if (existTable == null) existTable = new DataTable();

//выполнить запрос

if (sqlString!= "")

{

try

{

FbCommand myCommand = new FbCommand(sqlString, connectionID);

mandTimeout = 180;

using (FbDataReader reader =

myCommand. ExecuteReader(CommandBehavior. SingleResult))

{

existTable. Load(reader, LoadOption. OverwriteChanges);

reader. Close();

return existTable;

}

}

catch (/*Exception ex*/FieldAccessException ex)

{

throw

new Exception("Ошибка выполнения запроса к БД: " + ex. Message +

Environment. NewLine +

"Текст запроса: [" + sqlString + "]");

}

}

else

throw new Exception("Не задан текст запроса");

}

//----

public DataTable getData(string what)

{

//----

// Формирование строки параметров соединения

//----

string cs = this. getConnectionString();

try

{

//----

// Создать соединение с БД

//----

using (FbConnection connectionID = new FbConnection(cs))

{

//----

// Открыть соединение с БД

//----

connectionID. Open();

string sqlString = " select * from "+what. Trim();

DataTable result = new DataTable();

result = this. OpenSQL(sqlString, result, connectionID);

return result;

}

}

catch (Exception e)

{

return new DataTable();

}

}

public void add(string[] param, string[] table, DateTime from, DateTime to)

{

//----

// Формирование строки параметров соединения

//----

string cs = this. getConnectionString();

try

{

//----

// Создать соединение с БД

//----

using (FbConnection connectionID = new FbConnection(cs))

{

//----

// Открыть соединение с БД

//----

connectionID. Open();

DateTime nullDate = new DateTime(1, 1, 1);

// построить sql-запрос

//

string sql=" INSERT INTO "+table[0]+" "+"(";

//List<string> data = new List<string>(table. Split('|'));

//INSERT INTO photo (photo. photo_code, photo. photo_num) VALUES(1, 54);

bool first = true;

for(int i=1;i<17;i++)

{

if(param[i]!=null)

{

if (!first) { sql += ", "; } else { first = false; }

sql+=fields[i-1];

}

}

if (from!= nullDate)

{

switch (table[0])

{

case ("VISA"):

{

sql += ", "+date_fields[0] + ", " + date_fields[1] ;

break;

}

case ("INT_PASPORT"):

{

sql += ", " + date_fields[4] + ", " + date_fields[5] ;

break;

}

case ("POLICY"):

{

sql += ", " + date_fields[2] + ", " + date_fields[3] ;

break;

}

}

}

sql += ", " + table[1];

sql+=") VALUES(";

first = true; string tmp2="";

for (int i = 1; i < 17; i++)

{

if (param[i] != null )

{

if (!first) { sql += ", "; } else { first = false; }

try

{

Convert. ToInt32(param[i]);

tmp2 = param[i].ToString();

}

catch (FormatException e)

{

tmp2 = "'" + param[i] + "'";

}

sql += tmp2;

}

}

if (from!= nullDate)

{

sql+=", '"+from. ToShortDateString()+"', '";

sql += to. ToShortDateString() +"'";

}

int tmp = Convert. ToInt32(table[2]) + 1;

sql += ", "+tmp;

sql += ");";

/* if (born_on_from!= nullDate) sql += " and c. born_on >= '" + born_on_from. ToShortDateString() + "'";

if (born_on_to!= nullDate) sql += " and c. born_on <= '" + born_on_to. ToShortDateString() + "'";

*/

//sql = " INSERT INTO "+table+" " ;

FbCommand myCommand = new FbCommand(sql, connectionID);

mandTimeout = 180;

myCommand. ExecuteNonQuery();

// result = this. OpenSQL(sql, result, connectionID);

return;

}

}

catch (FieldAccessException e)

{

return;

}

//return;

}

private string makeconditions(string[] param, string[] table, DateTime from, DateTime to)

{

string tmp2,sql="";

DateTime nullDate = new DateTime(1, 1, 1);

for (int i = 1; i < 17; i++)

{

if (param[i] != null&&!param[i].Equals(string. Empty))

{

try

{

Convert. ToInt32(param[i]);

tmp2 = param[i].ToString();

}

catch (FormatException e)

{

tmp2 = "'" + param[i] + "'";

}

sql += " and ";

sql += fields[i - 1] + " = " + tmp2;

}

}

if (from!= nullDate)

{

switch (table[0])

{

case ("VISA"):

{

sql += " and " + date_fields[0] + ">= " + "'" + from. ToShortDateString() + "'"

+ " and " + date_fields[1] + "<= " + "'" + to. ToShortDateString() + "'";

break;

}

case ("INT_PASPORT"):

{

sql += " and " + date_fields[4] + ">= " + "'" + from. ToShortDateString() + "'"

+ " and " + date_fields[5] + "<= " + "'" + to. ToShortDateString() + "'";

break;

}

case ("POLICY"):

{

sql += " and " + date_fields[2] + ">= " + "'" + from. ToShortDateString() + "'"

+ " and " + date_fields[3] + "<= " + "'" + to. ToShortDateString() + "'";

break;

}

}

}

return (sql);

}

public void del(string[] param, string[] table, DateTime from, DateTime to)

{

//----

// Формирование строки параметров соединения

//----

string cs = this. getConnectionString();

try

{

//----

// Создать соединение с БД

//----

using (FbConnection connectionID = new FbConnection(cs))

{

//----

// Открыть соединение с БД

//----

connectionID. Open();

// построить sql-запрос

//

string sql=" DELETE FROM "+table[0]+" where 1=1 ";

//DELETE FROM photo WHERE photo_num = 63

sql += makeconditions(param, table, from, to);

sql+=" ;";

DataTable result = new DataTable();

FbCommand myCommand = new FbCommand(sql, connectionID);

mandTimeout = 180;

myCommand. ExecuteNonQuery();

// result = this. OpenSQL(sql, result, connectionID);

return;

}

}

catch (FieldAccessException e)

{

return;

}

}

public DataTable search(string[] param, string[] table, DateTime from, DateTime to)

{

//----

// Формирование строки параметров соединения

//----

string cs = this. getConnectionString();

try

{

//----

// Создать соединение с БД

//----

using (FbConnection connectionID = new FbConnection(cs))

{

//----

// Открыть соединение с БД

//----

connectionID. Open();

// построить sql-запрос

//

string sql = " select * FROM " + table[0] + " where 1=1 ";

//DELETE FROM photo WHERE photo_num = 63

sql += makeconditions(param, table, from, to);

sql += " ;";

DataTable result = new DataTable();

/*FbCommand myCommand = new FbCommand(sql, connectionID);

mandTimeout = 180;

myCommand. ExecuteNonQuery();*/

result = this. OpenSQL(sql, result, connectionID);

return result;

}

}

catch (FieldAccessException e)

{

return new DataTable();

}

}

}

}

Список литературы

1.  , , Новикова язык запросов SQL к базам данных в многопользовательских системах: Учебное пособие: Для студентов факультета технической кибернетики и информатики. – Казань: Изд-во КГТУ, 2002. – 59 с.

2.  , Хомоненко с базами данных в Delphi, 2-е издание. – СПб.: БХВ-Петербург, 2000. – 624 с.

3.  Delphi 5: для пользователя. – К.: Издательская группа BHV, 2000. – 496 с.

4.  Аллен Дж. Тейлор. SQL, 4-е издание. – М.: Издательский дом «Вильямс», 2001. – 368 с.

5.  , Ревунков данных: Учеб. для вузов. – М.: Изд-во МГТУ им. , 2002. – 320 с.

6.  Скляр в InterBase. – М.: Горячая линия-Телеком, 2002. – 517 с.

7.  Мартин Дж. Организация баз данных в вычислительных системах / Пер. с англ. – М.: Мир, 1980. – 664 с.

8.  , Савинков баз данных информационных систем. – М.: Финансы и статистика, 1989. – 351 с.