Построение таблиц базы данных
На предыдущем этапе мы построили схему базы данных, воспользовавшись общими правилами перехода к реляционной модели данных. Она является корректной, поскольку в ней отсутствуют нежелательные отношения. Ставится вопрос, а какую же СУБД использовать? Выбор остановим на реляционной СУБД 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 (Конструктор).
Рисунок 6/1 – Таблица tb_worker
Рисунок 6/2 – Таблица tb_uchastok
Рисунок 6/3 – Таблица tb_podrazdeleniye
Рисунок 6/4 – Таблица tb_dvizeniye
Рисунок 6/5 – Таблица tb_occupation
Рисунок 6/6 – Таблица tb_pas_department
Рисунок 6/7 – Таблица tb_passport
Рисунок 6/8 – Таблица tb_prikaz
Итак, мы привели основные таблицы с приведением типов полей. Ключевые поля имеют тип int, и в параметрах имеют свойство IdentitySpecification=’Yes’, что позволяет СУБД, автоматически, по мере добавления записей в таблицу, наращивать идентификатор.
Заполнение таблиц
Работники:
Рисунок 7/1 – Заполнение таблицы tb_worker
Таблица, в которой содержится список паспортных столов:
Рисунок 7/2 – Заполнение таблицы tb_pas_department
Паспортные данные работников:
Рисунок 7/3 – Заполнение таблицы tb_passport
Страны, области, города, районы:
Рисунок 7/4 – Заполнение таблиц:
«tb_country, tb_region, tb_city, tb_district»
Список подразделений и участков:
Рисунок 7/5 – Заполнение таблицы «tb_podrazdeleniye»
Рисунок 7/6 – Заполнение таблицы «tb_uchastok»
Согласно Законодательной базе Украины, указание национальности в анкете работники не является обязательным условием, но, тем не менее, была создана таблица, в которой хранится список национальностей, на случай модификации законов:
Рисунок 7/7 – Заполнение таблиц: «tb_nationality, tb_gender»
Список профессий:
Рисунок 7/7 – Заполнение таблицы «tb_occupation»
Признаки карьерного движения:
Рисунок 7/8 – Заполнение таблицы «tb_priznak»
Журнал карьерного движения:
Рисунок 7/9 – Заполнение таблицы «tb_dvizeniye»
Список приказов, которые сопровождают любое карьерное движение работника:
Рисунок 7/10 – Заполнение таблицы «tb_prikaz»
Создание запросов
Для создания и тестирования запросов, была выбрана среда разработки MS WebMatrix, которая позволяет создавать веб-приложения с помощью технологии ASP.NET, которая является составной частью платформы Microsoft .NET.
.NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. .NET Framework поддерживает создание программ, написанных на разных языках программирования.
Рассмотрим примеры с комбинацией языков C# и HTML.
Запрос №1.Выведем на экран список профессий, с названием подразделения к которому они относятся, и ставкой/должностным окладом на том или ином участке. Код приведен в Листинге 1. Результатом будет таблица вида:
Запрос №2. Выведем на экран основные данные о работниках предприятия. Код представлен в Листинге 2. Результатом работы запроса будет:
Запрос №3. В данном запросе выведем полную информацию о работнике «Пронякин Дмитрий Богданович», нам известен его табельный номер «8508». Нас интересует базовая информация, указанная в анкете, должность, карьерные движения:
Заключение
Итак, в данной курсовой работе, мы получили базу данных учета работников угледобывающего предприятия. В ней содержится следующая информация:
· Основные данные о работнике (ТН, ФИО, место прописки и т.д.);
· Список подразделений на предприятии;
· Список участков по каждому подразделению на предприятии;
· Журнал карьерных движений работников.
Следующими этапами на пути развития данной информационной системы будут:
· доработка схемы базы данных;
· создание приложения клиент/сервер;
· разработка графического интерфейса;
· разработка системы автоматического учета работников.
Основной задачей системы автоматического учета (САУР – комплекс считывающих устройств) будет, отслеживание спуска/подъема работников в шахту, учета ламп. Эти параметры позволят: рассчитать время проведенное работником на рабочем месте, а затем и заработную плату с учетом почасовой ставки, либо должностного оклада, составить табель выходов.
Приложение клиент/сервер, опираясь на информацию, получаемую от САУР, свяжет различные отделы поверхностной группы предприятия, с целью автоматического расчета заработной платы работников.
Список использованной литературы
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>