Построение таблиц базы данных

На предыдущем этапе мы построили схему базы данных, воспользовавшись общими правилами перехода к реляционной модели данных. Она является корректной, поскольку в ней отсутствуют нежелательные отношения. Ставится вопрос, а какую же СУБД использовать? Выбор остановим на реляционной СУБД MS SQL Server.

Microsoft SQL Server – система управления реляционными базами данных, разработанная корпорацией Microsoft, основной используемый язык запросов – Transact-SQL, создан совместно Microsoft и Sybase, который является реализацией стандарта ANSI/ISO (American National Standards Institute/International Organization for Standardization) по структурированному языку запросов SQL с расширениями.

Язык SQL был первоначально разработан компанией IBM, а в настоящее время поддерживается большинством коммерческих СУБД, представленных на рынке, и является официальным стандартом языка для работы с реляционными базами данных. Само, название SQL, является аббревиатурой, образованной от Structured Query Language (язык структурированных запросов).

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

Далее представлены все таблицы, в режиме Design (Конструктор).

Построение таблиц базы данных - student2.ru

Рисунок 6/1 – Таблица tb_worker

Построение таблиц базы данных - student2.ru

Рисунок 6/2 – Таблица tb_uchastok

Построение таблиц базы данных - student2.ru

Рисунок 6/3 – Таблица tb_podrazdeleniye

Построение таблиц базы данных - student2.ru

Рисунок 6/4 – Таблица tb_dvizeniye

Построение таблиц базы данных - student2.ru

Рисунок 6/5 – Таблица tb_occupation

Построение таблиц базы данных - student2.ru

Рисунок 6/6 – Таблица tb_pas_department

Построение таблиц базы данных - student2.ru

Рисунок 6/7 – Таблица tb_passport

Построение таблиц базы данных - student2.ru

Рисунок 6/8 – Таблица tb_prikaz

Итак, мы привели основные таблицы с приведением типов полей. Ключевые поля имеют тип int, и в параметрах имеют свойство IdentitySpecification=’Yes’, что позволяет СУБД, автоматически, по мере добавления записей в таблицу, наращивать идентификатор.

Заполнение таблиц

Работники:

Построение таблиц базы данных - student2.ru

Рисунок 7/1 – Заполнение таблицы tb_worker

Таблица, в которой содержится список паспортных столов:

Построение таблиц базы данных - student2.ru

Рисунок 7/2 – Заполнение таблицы tb_pas_department

Паспортные данные работников:

Построение таблиц базы данных - student2.ru

Рисунок 7/3 – Заполнение таблицы tb_passport




Страны, области, города, районы:

Построение таблиц базы данных - student2.ru Построение таблиц базы данных - student2.ru

Построение таблиц базы данных - student2.ru Построение таблиц базы данных - student2.ru

Рисунок 7/4 – Заполнение таблиц:
«tb_country, tb_region, tb_city, tb_district»

Список подразделений и участков:

Построение таблиц базы данных - student2.ru

Рисунок 7/5 – Заполнение таблицы «tb_podrazdeleniye»

Построение таблиц базы данных - student2.ru

Рисунок 7/6 – Заполнение таблицы «tb_uchastok»

Согласно Законодательной базе Украины, указание национальности в анкете работники не является обязательным условием, но, тем не менее, была создана таблица, в которой хранится список национальностей, на случай модификации законов:

Построение таблиц базы данных - student2.ru Построение таблиц базы данных - student2.ru

Рисунок 7/7 – Заполнение таблиц: «tb_nationality, tb_gender»

Список профессий:

Построение таблиц базы данных - student2.ru

Рисунок 7/7 – Заполнение таблицы «tb_occupation»

Признаки карьерного движения:

Построение таблиц базы данных - student2.ru

Рисунок 7/8 – Заполнение таблицы «tb_priznak»

Журнал карьерного движения:

Построение таблиц базы данных - student2.ru

Рисунок 7/9 – Заполнение таблицы «tb_dvizeniye»

Список приказов, которые сопровождают любое карьерное движение работника:

Построение таблиц базы данных - student2.ru

Рисунок 7/10 – Заполнение таблицы «tb_prikaz»

Создание запросов

Для создания и тестирования запросов, была выбрана среда разработки MS WebMatrix, которая позволяет создавать веб-приложения с помощью технологии ASP.NET, которая является составной частью платформы Microsoft .NET.

.NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. .NET Framework поддерживает создание программ, написанных на разных языках программирования.

Рассмотрим примеры с комбинацией языков C# и HTML.

Запрос №1.Выведем на экран список профессий, с названием подразделения к которому они относятся, и ставкой/должностным окладом на том или ином участке. Код приведен в Листинге 1. Результатом будет таблица вида:

Построение таблиц базы данных - student2.ru

Запрос №2. Выведем на экран основные данные о работниках предприятия. Код представлен в Листинге 2. Результатом работы запроса будет:

Построение таблиц базы данных - student2.ru

Запрос №3. В данном запросе выведем полную информацию о работнике «Пронякин Дмитрий Богданович», нам известен его табельный номер «8508». Нас интересует базовая информация, указанная в анкете, должность, карьерные движения:

Построение таблиц базы данных - student2.ru

Заключение

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

· Основные данные о работнике (ТН, ФИО, место прописки и т.д.);

· Список подразделений на предприятии;

· Список участков по каждому подразделению на предприятии;

· Журнал карьерных движений работников.

Следующими этапами на пути развития данной информационной системы будут:

· доработка схемы базы данных;

· создание приложения клиент/сервер;

· разработка графического интерфейса;

· разработка системы автоматического учета работников.

Основной задачей системы автоматического учета (САУР – комплекс считывающих устройств) будет, отслеживание спуска/подъема работников в шахту, учета ламп. Эти параметры позволят: рассчитать время проведенное работником на рабочем месте, а затем и заработную плату с учетом почасовой ставки, либо должностного оклада, составить табель выходов.

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

Список использованной литературы

1. Браун С. Visual Basic 6: Учебный курс. – СПб.: «Питер», 2002. – 576 с.

2. Голицина О.Л. Базы данных: Учебное пособие. – М.: «ФОРУМ: ИНФРА-М», 2003. – 352 с.

3. Дейт К. Дж. Введение в системы баз данных. – СПб.: Издательский дом «Вильямс», 2000. – 848 с.

4. Карпова Т.С. Базы данных: модели, разработка, реализация. – СПб.: «Питер», 2002. – 304 с.

5. Хомоненко А.Д. Базы данных: Учебник для вузов. – М.: «Корона», 2000. – 421 с.

6. Кузнецов С. Д. Основы баз данных. — 2-е изд. — М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2007. — 484 с. — ISBN 978-5-94774-736-2

7. Туманов В.Е. Основы проектирования реляционных баз данных. – М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2011 г. – 424с.

8. Грабер М. SQL. Справочное руководство. – London: Лори, 2006 г. – 368с. - ISBN 5-85582-117-X, 0-7821-2538-7

9. Ризаев И.С., Яхина З.Т. Базы данных. Учебное пособие. Казань.: КГТУ. 2002.

10. Ризаев И.С., Яхина З.Т. Базы данных. Лабораторный практикум. – Казань, КГТУ, 2002.

11. Захарова З.Х., Ризаев И.С., Яхина З.Т. Методические указания к курсовой работе по дисциплине «Базы данных». – Казань, КГТУ, 2006.

12. Карпова Т.С. Базы данных: Модели, разработка, реализация. Учебник. – СПб: Питер, 2001.

13. Бен – Ган И. Microsoft SQL Server 2012. Высокопроизводительный код T-SQL. Оконные функции. – СПб.: Русская редакция, 2013г. – 256 с. - ISBN 978-5-7502-0416-8, 978-5-9775-0901-5

14. Петкович Д. Microsoft SQL Server 2008. Руководство для начинающих. – СПб.: БХВ-Петербург, 2009 г. – 752 с. - ISBN 978-0-07-154638-6, 978-5-9775-0149-1

15. Moroney L. Introducing Microsoft WebMatrix. Microsoft, 2011 г. – 320 с. – ISBN 978-0-73-5649705

Приложение А

Листинг 1

@{

var db = Database.Open("Worker");

var selectQueryString = "SELECT" +

" id_profession ID, tb_podrazdeleniye.Name PODR,tb_uchastok.Name NAMEU,tb_occupation.Name NAMEPROF,kategori,stavka," +

" Status" +

" FROM [Worker].[dbo].[tb_occupation]" +

" JOIN tb_uchastok ON tb_occupation.id_uchastok = tb_uchastok.id_uchastok" +

" JOIN tb_podrazdeleniye ON tb_uchastok.id_podrazdeleniye = tb_podrazdeleniye.id_podrazdeleniye";

var data = db.Query(selectQueryString);

var grid = new WebGrid(source: data, defaultSort: "ID", rowsPerPage: 14);

}

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

<title>Отображение данных при помощи WebGrid</title>

<style type="text/css">

.grid { margin: 4px; border-collapse: collapse; width: auto;}

.head {background-color: #E8E8E8; font-weight: bold; color: #FFF;}

.grid th,.grid td { border: 1px solid #C0C0C0; padding: 5px;}

.alt { background-color: #E8E8E8; color: #000;}

.product { width: auto; font-weight:bold;text-align: center; }

.stav { width: auto;text-align: right; }

</style>

</head>

<body>

<h1>GridOccupation List</h1>

<div id="grid">

@grid.GetHtml(

tableStyle: "grid",

headerStyle: "head",

alternatingRowStyle: "alt",

columns: grid.Columns(

grid.Column("ID","№", style:"product"),

grid.Column("PODR","Подразделение",format:@<text>@item.PODR</text>),

grid.Column("NAMEU","Участок",format:@<text>@item.NAMEU</text>),

grid.Column("NAMEPROF","Должность",format:@<text>@item.NAMEPROF</text>),

grid.Column("kategori","Разряд",style:"product"),

grid.Column("stavka","Ставка",format:@<text>₴@item.stavka</text>,style:"stav"),

grid.Column("Status","Статус",format:@<text>@item.Status</text>)

)

)

</div>

</body>

</html>

Листинг 2

@{ var db = Database.Open("Worker"); var selectQueryString = "SELECT id_worker ID, tableNumber TN, FirstName FN, MiddleName MN," + " LastName LN, convert(char(10),date_of_birth,102) as date, tb_gender.value GN,series, pasnumber,INN, INNsafe, phoneNumber" + " FROM tb_worker LEFT JOIN tb_passport ON tb_worker.id_passport=tb_passport.id_passport" + " JOIN tb_gender ON tb_passport.id_gender=tb_gender.id_gender";} <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Worker List</title> <style> table, th, td { border: solid 1px #bbbbbb; border-collapse: collapse; padding: 2px; } </style> </head> <body> <h1>Worker List</h1> <h2>tb_worker</h2> <table><thead><tr> <th>Id</th> <th>TN</th> <th>Фамилия</th> <th>Имя</th> <th>Отчество</th> <th>Пол</th> <th>Дата рождения</th> <th>Серия</th> <th>Номер</th> <th>ИНН</th> <th>Код соц. страхования</th> <th>Телефонный номер</th></tr></thead> <tbody>@foreach(var row in db.Query(selectQueryString)) {<tr> <td>@row.ID</td> <td>@row.TN</td> <td>@row.FN</td> <td>@row.MN</td> <td>@row.LN</td> <td>@row.GN</td> <td>@row.date</td> <td>@row.series</td> <td>@row.pasnumber</td> <td>@row.INN</td> <td>@row.INNsafe</td> <td>@row.phoneNumber</td></tr>} </tbody> </table> </body></html>

Листинг 3

@{ var db = Database.Open("Worker"); string tn="8508"; var selectQueryString = "SELECT id_worker, tableNumber, FirstName, MiddleName, LastName," + " tb_worker.id_passport IDPAS,series,pasnumber,CONVERT(char(10),date_of_birth,102) as date1,tb_gender.value GV,TBPD.Name IDPD, tb_country.value IDCN," + " tb_region.value IDRN, tb_city.value IDCCN, CONVERT(char(10),date,102) as date2 FROM tb_worker " + " JOIN tb_passport ON tb_worker.id_passport=tb_passport.id_passport" + " JOIN tb_pas_department AS TBPD ON tb_passport.id_pas_department=TBPD.id_pas_department" + " JOIN tb_country ON tb_country.id_country=TBPD.id_country" + " JOIN tb_region ON tb_region.id_region=TBPD.id_region" + " JOIN tb_city ON tb_city.id_city=TBPD.id_city" + " JOIN tb_gender ON tb_passport.id_gender=tb_gender.id_gender" + " WHERE tableNumber=" + tn; var selectQueryString2 = "SELECT phoneNumber,tb_country.value TBCV,tb_region.value TBRV, tb_city.value TBCCV," + " tb_district.value TBDV, zipCode, street, house_number, flat_number FROM tb_worker" + " JOIN tb_passport ON tb_worker.id_passport=tb_passport.id_passport" + " JOIN tb_country ON tb_country.id_country=tb_passport.id_country" + " JOIN tb_region ON tb_region.id_region=tb_passport.id_region" + " JOIN tb_city ON tb_city.id_city=tb_passport.id_city" + " JOIN tb_district ON tb_district.id_district=tb_passport.id_district" + " WHERE tableNumber=" + tn; var selectQueryString3 = "SELECT tableNumber, tb_priznak.Value TBV,"+ " tb_occupation.Name TOPO, CONVERT(char(10),date_dvizeniya,102) as date,"+ " tb_uchastok.Name NU,tb_podrazdeleniye.Name NP FROM tb_worker" + " RIGHT JOIN tb_dvizeniye ON tb_dvizeniye.id_worker=tb_worker.id_worker" + " JOIN tb_priznak ON tb_priznak.id_priznak=tb_dvizeniye.id_priznak" + " JOIN tb_occupation ON tb_occupation.id_profession=tb_dvizeniye.id_profession" + " JOIN tb_uchastok ON tb_uchastok.id_uchastok=tb_occupation.id_uchastok" + " JOIN tb_podrazdeleniye ON tb_podrazdeleniye.id_podrazdeleniye=tb_uchastok.id_podrazdeleniye" + " WHERE tableNumber=" + tn; } <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Worker info</title> <style> table, th, td { border: solid 1px #bbbbbb; border-collapse: collapse; padding: 2px; } </style> </head> <body> <h1>Worker info</h1> <h2>Работник</h2> <table> <thead> <tr> <th>ID</th> <th>TN</th> <th>Фамилия</th> <th>Имя</th> <th>Отчество</th> <th>Дата рождения</th> <th>Пол</th> </tr> </thead> <tbody> @foreach(var row in db.Query(selectQueryString)) { <tr> <td>@row.id_worker</td> <td>@row.tableNumber</td> <td>@row.FirstName</td> <td>@row.MiddleName</td> <td>@row.LastName</td> <td>@row.date1</td> <td>@row.GV</td> </tr> } </tbody> </table> <h3>Пасспортные данные</h3> <table> <thead> <tr> <th>Серия</th> <th>Номер</th> <th colspan="4">Место получения</th> <th>Дата получения</th> </tr> </thead> <tbody> @foreach(var row in db.Query(selectQueryString)) { <tr> <td>@row.series</td> <td>@row.pasnumber</td> <td>@row.IDCN</td> <td>@row.IDRN</td> <td>@row.IDCCN</td> <td>@row.IDPD</td> <td>@row.date2</td> </tr> } </tbody> </table> <h3>Данные о прописке</h3> <table> <thead> <tr> <th colspan="8">Место прописки</th> <th>Телефон</th> </tr> </thead> <tbody> @foreach(var row in db.Query(selectQueryString2)) { <tr> <td>@row.TBCV</td> <td>@row.TBRV</td> <td>@row.TBCCV</td> <td>@row.TBDV</td> <td>@row.zipCode</td> <td>@row.street</td> <td>@row.house_number</td> <td>@row.flat_number</td> <td>@row.phoneNumber</td> </tr> } </tbody> </table> <h3>Движения</h3> <table> <thead> <tr> <th>TN</th> <th>Признак</th> <th>Подразделение</th> <th>Участок</th> <th>Должность</th> <th>Дата движения</th> </tr> </thead> <tbody> @foreach(var row in db.Query(selectQueryString3)) { <tr> <td>@row.tableNumber</td> <td>@row.TBV</td> <td>@row.NP</td> <td>@row.NU</td> <td>@row.TOPO</td> <td>@row.date</td> </tr> } </tbody> </table> </body></html>

Наши рекомендации