Проектирование баз данных

Автор работы: Пользователь скрыл имя, 13 Октября 2013 в 19:59, курсовая работа

Краткое описание

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

Содержание

Введение 2
1. Постановка цели 2
2. Проектирование БД 4
Сущности 4
Связи 5
Атрибуты 8
ER-диаграмма 10
Ключи 11
3. Перенос логической модели данных в среду СУБД 12
4. Разработка программной оболочки 14
Среда разработки 14
Интерфейс программы 14
Формы добавления/редактирования 16
Отображение данных 18
Отчеты 21
Примеры кода 23
5. Запросы, используемые в программе 25
Литература 28

Прикрепленные файлы: 1 файл

Содержание.DOC

— 1.13 Мб (Скачать документ)

 

Целью выполнения этих этапов является получение гарантий того, что каждое из отношений, созданных  на основании логической модели данных, отвечает, по крайней мере, требованиям  НФБК. Если будут найдены отношения, не отвечающие требованиям НФБК, это может указывать на то, что часть логической модели данных неверна либо преобразование логической модели в набор отношений выполнено некорректно. При необходимости требуется перестроить модель данных и убедиться, что она правильно отображает моделируемую часть информационной структуры предприятия.

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

Печатный отчёт

Используемые  таблицы

Остатки товаров

Товар

Вид

Фирмы

Поставки

Товар

Вид

Фирмы

Поставщик

Продажи

Товар

Вид

Фирмы

Служащие


 

3. Перенос логической модели данных в среду реляционной СУБД

 

Средой реализации спроектированной базы данных «Арт-Склад» я выбрал MS SQL Server 2005 Enterprise. Эта реляционная СУБД распространяется фирмой Microsoft бесплатно и имеет весь набор необходимых мне для данного проекта функций. При переносе я руководствовался общепринятыми правилами:

  • если между сущностями связь «один к одному» и классы принадлежности обеих сущностей являются обязательными, то для реализации требуется только одна таблица. Её первичным ключом может быть ключ одной из сущностей;
  • если между сущностями связь «один к одному» и класс принадлежности одной из сущностей является обязательным, а другой – нет, то необходимо построение двух таблиц, т.е. под каждую сущность надо выделить по одной таблице. При этом первичный ключ сущности должен служить первичным ключом для соответствующей таблицы. Кроме того, ключ сущности с необязательным классом принадлежности добавляется в качестве атрибута в таблицу, выделенную для сущности с обязательным классом принадлежности;
  • если между сущностями связь «один к одному» и классы принадлежности обеих сущностей являются необязательными, то необходимо создать три таблицы: по одной для каждой сущности, ключи которых служат первичными ключами для соответствующих таблиц, и одну таблицу для связи. Среди своих атрибутов таблица, выделяемая для связи, должна иметь по одному ключу от каждой сущности;
  • если между сущностями связь «один ко многим» и класс принадлежности n-связанной сущности является обязательным, то достаточно использовать две таблицы (по одной на каждую сущность) при условии, что ключ односвязной сущности должен быть добавлен как атрибут в таблицу, выделенную для n-связанной сущности;
  • если между сущностями связь «один ко многим» и класс принадлежности n-связанной сущности является необязательным, то для реализации данной ER-диаграммы необходимо создать три таблицы: по одной для каждой сущности, при этом первичные ключи сущностей являются ключами для соответствующих таблиц, и одну таблицу для связи, которая должна иметь среди своих атрибутов ключи для двух других таблиц;
  • если между сущностями связь «многие ко многим», то,  независимо от их классов принадлежности, необходимо выделить три таблицы: по одной для каждой сущности, первичные ключи которых являются ключами соответствующих таблиц, и одну таблицу для связи, в которую входят первичные ключи двух таблиц.

 

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

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

Для полей были использованы такие  виды ограничений:

  • тип и формат поля автоматически допускают ввод только данных определенного типа. Данная функциональность реализована в самой СУБД и программными средствами разработанной мною оболочки (Regular Expressions)
  • недопустимость пустого поля также воплощена в СУБД и использована мной на этапе переноса для отсутствия записей, не несущих смысловой нагрузки;
  • проверка на уникальность значения полей. Позволяет избежать ненужных повторов в записях.

Целостность сущностей

 

Все таблицы в БД имеют  первичный ключ с идентификатором ID.

 

Ссылочная целостность

 

Реализована на основании  вышеприведенных ограничений, используемых при построении БД возможностях MSSQL, а так же ограничениями программного кода.

 

4. Разработка программной оболочки

 

Среда разработки

 

Для создания программной  оболочки взаимодействия с БД «АртПолигон» я выбрал один из наиболее современных языков программирования C#, который сочетает в себе мощность и гибкость. Этот язык полностью построен по концепции ООП и включает в себя новейшие технологии, используемые в написании программ.

Интерфейс программы

 

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

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


Внешний вид окна:

 

При запуске программы DataGridView заполняется выборкой данных из таблиц Товар, Вид и Фирмы (запрос 1 в разделе 4 «Запросы, используемые в программе»), результатом которой  является вывод списка занесенных в  реестр товаров и их наявного количества на складе.

Меню «Транзакции» содержит в себе операции добавления новых  записей в базу данных:

- Добавить поставщика;

- Добавить товар;

- Добавить вид товаров;

- Добавить производителя;

- Добавить служащего.

Меню «Данные» содержит команды вывода содержимого таблиц для редактирования или удаления записей:

- Товар;

- Архив поставок;

- Архив продаж;

- Поставщики;


- Производители;

- Служащие.

Меню «Отчеты» содержит команды отображения печатных отчетов:

- Остатки товаров;

- Поставки;

- Продажи.

 

Формы добавления/редактирования

 

На нижеследующих формах осуществляется ввод данных для добавления или редактирования поставщиков.

1. Добавление поставщика:

 

2. Добавление товара:


3. Добавление вида  товаров:

 

4. Добавление производителя:

 

5. Добавление служащего: 

 

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

 

 

 


Отображение данных

 

1. Остатки товаров:

Сначала выводится форма  обеспечения конкретизации выбора, облегчающая поиск в БД:

 

Результат:

 

2. Архив поставок:

Первой отображается форма выбора временного промежутка поставок:


Результат: 

 

3. Архив продаж:

 

4. Поставщики:


5. Производители:

 

6. Служащие:

 

7. Виды товаров:

 

 


Поставка и  продажа

Кнопки, несущие эти  функции, находятся на главной форме  и активируются при выборе строки с необходимым товаром на DataGridView.

 

1. Поставка:

 

2. Продажа:

 

Отчеты

 

Данный раздел содержит в себе окна вывода печатных отчетов, реализованных на основе Microsoft Reporting Server, обеспечивающего наглядную  подачу материала с неплохой функциональностью. Функции, обеспечиваемые им: поддержка  многостраничных отчетов, печать, сохранение в различных форматах, полнотекстовый поиск, масштабирование…

 

 


  1. Остатки товаров:

 

 

 

  1. Поставки:

 

 

 

 

 


3. Продажи:

 

Примеры кода

Вот несколько типичных примеров программного кода, используемых мной в программе.

 

1. Процедура заполнения DataGridView данными об наличии товаров (прим.: код запроса хранится в самой БД):

private void ReFill(string ReqStr, int TypeN, int ProdN)

         {

            if (ReqStr == "")

                ReqStr = "dbo.FillProducts";

            using (SqlConnection MyConn = DBWork.GetDBConnection())

            {

                SqlCommand request = new SqlCommand(ReqStr, MyConn);

                request.CommandType = CommandType.StoredProcedure;

 

                if (TypeN != 0)

                {

                    if (ProdN != 0)

                    {

                        request.Parameters.Add("@Фирма", SqlDbType.Int).Value = ProdN;

                        request.Parameters.Add("@Вид", SqlDbType.Int).Value = TypeN;

                    }

                    else

                        request.Parameters.Add("@Вид1", SqlDbType.Int).Value = TypeN;

                }

                else

                {

                    if (ProdN != 0)

                        request.Parameters.Add("@Фирма1", SqlDbType.Int).Value = ProdN;

                }

 

                SqlDataAdapter adapter = new SqlDataAdapter(request);

                DataSet dataSet = new DataSet();

               

                adapter.Fill(dataSet, "[Товар]");

                dataGridView1.DataSource = dataSet.Tables[0];

                dataGridView1.Update();

                lbl_Head.Text = "Товары:";

             }

        }


 

 

2. Процедура обновления  данных о товаре с небольшим  конструктором:

     public static int Prod_upd(int id, int typeID, int vendor, string mdl, string descr, int count, float prc)

        {

            int succefull = 0;

            string query = "UPDATE [Товар] SET ";

 

            if (typeID != 0)

                query = query + "[ID_вид] = @type, ";

            if (vendor != 0)

                query = query + "[ID_фирма] = @vendor, ";

            if (mdl != "")

                query = query + "[Модель] = @mdl, ";

            if (descr != "")

                query = query + "[Описание] = @descr, ";

            if (prc != 0)

                query = query + "[Розн_цена] = @prc, ";

 

            query = query + "[Количество] = @count WHERE ([ID] = @id) ";

 

            if (query == "UPDATE [Товар] SET ")

                return succefull;

 

 

 

            using (SqlConnection MyConn = GetDBConnection())

            {

                SqlCommand command = new SqlCommand(query, MyConn);

                command.CommandType = CommandType.Text;

 

                command.Parameters.Add("@id", SqlDbType.Int).Value = id;

                command.Parameters.Add("@type", SqlDbType.Int).Value = typeID;

                command.Parameters.Add("@vendor", SqlDbType.Int).Value = vendor;

                command.Parameters.Add("@mdl", SqlDbType.Text).Value = mdl;

                command.Parameters.Add("@descr", SqlDbType.Text).Value = descr;

                command.Parameters.Add("@count", SqlDbType.Int).Value = count;

                command.Parameters.Add("@prc", SqlDbType.Money).Value = prc;

 

                succefull = command.ExecuteNonQuery();

            }

            return succefull;

    }

 

3. Добавление поставщика:

      public static int NewProducer(string Name, string Mnemo, string Addres, string Phone)

        {

            int succefull = 0;

            string query = "INSERT INTO [Поставщик] (Поставщик.Название, Поставщик.Мнемокод, Поставщик.Адрес, Поставщик.Телефон) VALUES (@name, @mnemo, @addres, @phone)";

 

            using (SqlConnection MyConn = GetDBConnection())

            {

                SqlCommand command = new SqlCommand(query, MyConn);

                command.CommandType = CommandType.Text;

 

                command.Parameters.Add("@name", SqlDbType.Text).Value = Name;

                command.Parameters.Add("@mnemo", SqlDbType.Text).Value = Mnemo;

                command.Parameters.Add("@addres", SqlDbType.Text).Value = Addres;

                command.Parameters.Add("@phone", SqlDbType.Text).Value = Phone;

 

                succefull = command.ExecuteNonQuery();

            }

            return succefull;

  }

 

 

 

 

 


4. Удаление строки:

public static int DeleteRow(int id, string tabName)

        {

            int succefull = 0;

            string request = "DELETE FROM " + tabName + " WHERE (ID = @id)";

 

            using (SqlConnection MyConn = GetDBConnection())

            {

                SqlCommand command = new SqlCommand(request, MyConn);

                command.CommandType = CommandType.Text;

 

                command.Parameters.Add("@id", SqlDbType.Int).Value = id;

 

                succefull = command.ExecuteNonQuery();

            }

     return succefull;

  }

 

5. Заполнение ComboBox'ов на формах:

     public static void CB_fill(ComboBox cmb, string table)

        {

            string query = "";

 

            if (table == "Вид")

                query = "SELECT [ID], [Вид] FROM [Вид]";

            if (table == "Фирмы")

                query = "SELECT [ID], [Название] FROM [Фирмы]";

            if (table == "Товар")

                query = "SELECT [ID], [Название] FROM [Товар]";

            if (table == "Поставщик")

                query = "SELECT [ID], [Мнемокод] FROM [Поставщик]";

            if (table == "Служащие")

                query = "SELECT [ID], [ФИО] FROM [Служащие]";

Информация о работе Проектирование баз данных