Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Описание полей таблиц базы данных




Белгородский государственный технологический университет

Им. В.Г.Шухова

 

 

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

и автоматизированных систем.

 

Курсовой проект

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

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

Разработка программного комплекса для работы с базой данных «Больница».

 

 

Автор работы______________ Леонов А.И.

(подпись) гр. ПВ-32

 

Руководитель проекта ____________ Гарибов. А.И.

(подпись)

 

г. Белгород 2012г.

Содержание

Введение…………………………………………...…………………….3

Постановка задачи………………………………………….…………….5

Выбор инструментов………………………………………………….….6

Структура БД……………………………………….…………………...12

Описание полей таблиц базы данных………………………………………….13

Запросы…………………………………………….…………………...14

Импорт и экспорт данных в файлы формата XML…………………......16

Заключение……………………………………………………………..17

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

Приложение………………………………………….………………….19

Скриншоты программы………………………….….……………..19

SQL – запросы для создания базы данных……………….…………21

Текст программы………………………..………………………...23

 

Введение

 

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

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

Разрабатываемое ПО должно обрабатывать все эти записи, создавать новые, удалять или изменять старые. В приложении будет реализован поиск и сортировка по отдельным полям. Еще одной особенностью является использование технологий NHibernate.

NHibernate — это ORM-технология для платформы Microsoft.NET, основанная на двух вещах:
1) использование классов бизнес-логики, написанных разработчиком в качестве сущностей (POCO). POCO = Plain old CLR objects, эти классы, состоят чаще всего из свойств, их назначение — хранение данных.
2) использование XML-файлов для конфигурирования и описания мэппинга. Мэппинг - это отражение тех самых классов, написанных нами в объекты (таблицы, отношения) реляционной базы данных.

 

 

В разделах «Постановка задачи» и «Выбор инструментов» приведено описание поставленной задачи с точки зрения реализации на языке программирования высокого уровня.

 

В разделах «Cтруктура БД» и «Запросы» описана физическая структура БД и реализация поставленной задачи на языке высокого уровня. Так же в этих разделах описаны структура базы данных и подробно рассмотрено использовании технологии ORM (Object-Relational Mapping) на примере Fluent NHIbernate для отображения объектов на реляционную базу данных.

 

 


 

Постановка задачи

Необходимо спроектировать базу данных для больницы, в которой должны быть учтены все требования заказчика.

Требования были следующими:

1. База данных должна отражать всю информацию о больнице, в частности о сотрудниках и о пациентах;

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

3. Должна быть возможность вносить изменения в данные и пополнения новыми данными.

4. Удобный интуитивно понятный интерфейс.

5. Скрывать данные, которые конечному пользователю не нужны, а также осуществлять проверку корректности введенных пользователя данных.

6. Поддерживать импорт и экспорт таблиц базы данных в файлы формата XML.

 

 


 

Выбор инструментов

 

В качестве СУБД была выбрана MySQL. Она соответствует всем требованиям, предъявляемым поставленной задачей.

MySQL — свободная система управления базами данных (СУБД). MySQL является собственностью компании Oracle Corporation, получившей её вместе с поглощённой Sun Microsystems, осуществляющей разработку и поддержку приложения. Распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор.

В качестве языка программирования был выбран С# и среда разработки Microsoft Visual Studio 2010. Так же используются технологии ORM (Object-Relational Mapping). Благодаря ей, мы можем отображать объекты С# на реляционную базу данных. Т.е., например, описать класс и отобразить его на таблицу в MySQL и ORM сама разберется, какие запросы надо отправлять для выборки, сохранения, обновления и удаления с сохранением связей.

В нашем приложении будет 5 вспомогательных классов, которые

Описывают сущности, находящиеся в БД, и ещё 5 классов для отображения связей с таблицами БД.

В качестве ORM технологии был выбран Fluent NHibernate - это надстройка над NHibernate. Fluent NHibernate предоставляет альтернативу стандартным XML-файлам конфигурации меппинга NHibernate. Вместо написания XML документов (.hbm.xml), Fluent NHibernate позволяет нам писать маппинг в строго типизированной форме, на языке C#. Это обеспечивает легкость рефакторинга, улучшает читабельность и лаконичность кода, экономит кучу времени. Позволяет не задумываться о том, как должны выглядеть XML файлы. Контроль типов, автоматическое подключение классов к маппингу, возможность удобной настройки соединения с базой данных и т.д. и т.п.

 

Для того чтобы мы могли использовать в своем проекте Fluent NHibernate, нам надо добавить ссылки на библиотеки NHibernate.dll, FluentNHibernate.Mapping, FluentNHibernate.Cfg, FluentNHibernate.Cfg.Db.

Остальные библиотеки тоже должны лежать в одном каталоге с приложением.

Чтобы подключить к нашему приложению Fluent NHibernate, достаточно описать конфигурацию подключения:

 

var config = Fluently.Configure()

.Database(MySQLConfiguration.Standard

.ConnectionString(x => x.Database(DataBase)

.Server(Host)

.Username(User)

.Password(Password)))

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<DepartMap>())

.BuildConfiguration();

MySession = config.BuildSessionFactory();

 

Правила отображения для каждого класса хранятся в отдельном файле. Обычно его называют «имя_сущностиMap.cs»

 

Departament

 

Класс:

public class Departament

{

public virtual int Id { get; protected set; }

public virtual string Name { get; set; }

public virtual IList<Personnel> Personnels { get; set; }

 

public Departament ()

{

Personnels = new List<Personnel>();

}

public virtual void AddPersonnel(Personnel personel)

{

personel.Departament = this;

Personnels.Add(personel);

}

}

 

Отображение:

public class DepartMap: ClassMap<Departament>

{

public DepartMap()

{

Id(x => x.Id).Not.Nullable();

Map(x => x.Name).Not.Nullable();

HasMany(x => x.Personnels)

.Inverse()

.KeyColumn("Departament_id")

.Cascade.SaveUpdate();

}

}

 

Diagnosis

 

Класс:

public class Diagnosis

{

public virtual int Id { get; set; }//idDiagnosis

public virtual string Name { get; set; }

public virtual Departament Departament { get; set; }

public virtual Personnel Personnel { get; set; }

public virtual String Description { get; set; }

public virtual IList<Medication> Medications { get; set; }

 

public Diagnosis ()

{

Medications = new List<Medication>();

Description = "";

}

//Добавление лекарства к этому диагнозу

public virtual void AddMediacation (Medication med)

{

med.Diagnosis.Add(this);

Medications.Add(med);

}

}

 

Отображение:

 

public class DiagnosisMap: ClassMap<Diagnosis>

{

public DiagnosisMap()

{

Table("diagnosis");

Id(x => x.Id).Column("idDiagnosis").Not.Nullable();

Map(x => x.Name).Not.Nullable();

Map(x => x.Description);

HasManyToMany(x => x.Medications)

.Table("diagnosis_has_medications")

.ParentKeyColumn("idDiagnosis")

.ChildKeyColumn("idMedications");

References(x => x.Departament)

.Column("Departament_id")

.Cascade.SaveUpdate();

References(x => x.Personnel)

.Column("Personnel_id")

.Cascade.SaveUpdate();

}

}

 

Medication

 

Класс:

 

public class Medication

{

public virtual int Id { get; set; }

public virtual string Name { get; set; }

public virtual int Numb_per_day { get; set; }

public virtual int Duration { get; set; }

public virtual decimal Price { get; set; }

public virtual string Description { get; set; }

public virtual IList<Diagnosis> Diagnosis { get; set; }

 

public Medication()

{

Diagnosis = new List<Diagnosis>();

Description = "";

}

//Добавление диагноза к лекарству

public virtual void AddDiagnosis (Diagnosis diagnosis)

{

Diagnosis.Add(diagnosis);

diagnosis.Medications.Add(this);

}

}

 

Отображение:

 

public class MedicationMap: ClassMap<Medication>

{

public MedicationMap()

{

Table("medications");

Id(x => x.Id).Column("idMedications").Not.Nullable();

Map(x => x.Name).Not.Nullable();

Map(x => x.Numb_per_day);

Map(x => x.Duration);

Map(x => x.Price);

Map(x => x.Description);

HasManyToMany(x => x.Diagnosis)

.Table("diagnosis_has_medications")

.ParentKeyColumn("idMedications")

.ChildKeyColumn("idDiagnosis")

.Inverse();

}

}

 

Pacient

Класс:

 

public class Pacient

{

public virtual int Id { get; set; }

public virtual string Name{ get; set; }

public virtual string Address{ get; set; }

public virtual DateTime Birthday { get; set; }

public virtual DateTime Data_arrival { get; set; }

public virtual DateTime Data_depart { get; set; }

public virtual Departament Departament { get; set; }

public virtual Diagnosis Diagnosis { get; set;}

 

public override bool Equals(object obj)

{

if (obj is Pacient)

{

Pacient p = (obj as Pacient);

bool b = true;

if (Name!= p.Name) b = false;

if (Address!= p.Address) b = false;

if (Birthday!= p.Birthday) b = false;

if (Data_arrival!= p.Data_arrival) b = false;

if (Data_depart!= p.Data_depart) b = false;

if (Diagnosis.Departament!= p.Diagnosis.Departament) b = false;

if (Diagnosis.Name!= p.Diagnosis.Name) b = false;

if (Diagnosis.Personnel!= p.Diagnosis.Personnel) b = false;

if (Diagnosis.Description!= p.Diagnosis.Description) b = false;

if (Departament!= p.Departament) b = false;

return b;

}

else return false;

}

}

 

Отображение:

public class PatientMap: ClassMap<Pacient>

{

public PatientMap()

{

Table("pacienty");

Id(x => x.Id).Not.Nullable();

Map(x => x.Name).Not.Nullable();

Map(x => x.Address);

Map(x => x.Birthday);

Map(x => x.Data_arrival);

Map(x => x.Data_depart);

References(x => x.Departament, "Departament_id");

References(x => x.Diagnosis, "Diagnosis_id");

}

}

 

Personnel

Класс:

public class Personnel

{

public virtual int Id { get; set; }

public virtual string Name { get; set; }

public virtual string Address { get; set; }

public virtual DateTime Birthday { get; set; }

public virtual string Phone { get; set; }

public virtual string Post { get; set; }

public virtual decimal Salary{ get; set; }

public virtual Departament Departament{ get; set; }

 

public override bool Equals(object obj)

{

if (obj is Personnel)

{

Personnel p = (obj as Personnel);

bool b = true;

if (Name!= p.Name) b = false;

if (Address!= p.Address) b = false;

if (Birthday!= p.Birthday) b = false;

if (Phone!= p.Phone) b = false;

if (Post!= p.Post) b = false;

if (Salary!= p.Salary) b = false;

if (Departament!= p.Departament) b = false;

return b;

}

else return false;

}

}

Отображение:

public class PersonnelMap: ClassMap<Personnel>

{

public PersonnelMap()

{

Table("personnel");

Id(x => x.Id).Column("idPersonnel");

Map(x => x.Name);

Map(x => x.Address);

Map(x => x.Birthday);

Map(x => x.Phone);

Map(x => x.Post);

Map(x => x.Salary);

References(x => x.Departament)

.Column("Departament_id")

.Cascade.SaveUpdate();

 

}

}


Структура БД

Структуру базы данных можно представить диаграммой «сущность-связь»

Свойства, которыми обладают сущности:

1. Персонал: отделение, ФИО, адрес, дата рождения, телефон, должность, оклад.

2. Пациент: отделение, диагноз, ФИО, адрес, дата рождения, дата прибытия, дата выписывания.

3. Диагноз: имя, отделение, врач, описание.

4. Отдел: имя.

5. Лекарства: имя, количество в день, раз в день, цена, описание.

 

Физическая модель базы данных:

 

Описание полей таблиц базы данных

Типы данных для таблицы Personnel:

Name: строка – имя работника

Address: строка – адрес проживания

Birthday: дата – дата рождения

Phone: целое – номер телефона

Post: строка – должность

Salary: decimal – оклад

Id_depart: целое – идентификатор отделения

 

Типы данных для таблицы Pacienty:

Id_depart: целое – идентификатор отделения

Id_diagnos: целое – идентификатор диагноза

Name: строка – имя

Address: строка – адрес проживания

Birthday: дата – дата рождения пациента

Data_arrival: дата – дата прибытия пациента в больницу

Data_depart: дата – дата выписки из больницы

 

Типы данных для таблицы Diagnosis:

Id_depart: целое – идентификатор отделения

Id_doctor: целое – идентификатор врача

Name: строка – название диагноза

 

Типы данных для таблицы Medications:

Name: строка – наименование лекарства

Numb_per_day:целое – количество лекарства в день

Duration:целое – количество приёмов в день

Price: decimal – стоимость

 

Типы данных для таблицы Departament:

Id: целое – идентификатор отделения

Name: строка – имя отделения

 


 

Запросы

Рассмотрим по одному примеру для каждого запроса: запросы на выборку, удаления, добавления и изменения записей таблиц, остальные запросы представлены в тексте программы (см. приложение)

Примеры запросов для сущности Departament.

 

Выборка данных

public void Fill()

{

using (var session = parent.MySession.OpenSession())

{

try

{

DepartTable.Rows.Clear();

var deps = session.CreateCriteria(typeof (Departament)).List<Departament>();

foreach (var d in deps)

DepartTable.Rows.Add(d.Name);

}

catch (Exception exception)

{

MessageBox.Show(exception.Message, "Ошибка подключения к БД");

}

finally

{

session.Close();

}

}

}

Функция Fill заполняет таблицу DepartTable в приложении данными из таблицы Departament, находящейся в базе данных.

 

 

Добавление записи:

void Insert(string sName)

{

using (var session = parent.MySession.OpenSession())

using (var transaction = session.BeginTransaction())

{

try

{

session.Save(new Departament {Name = sName});

transaction.Commit();

}

catch (Exception exception)

{

MessageBox.Show(exception.Message, "Ошибка подключения к БД");

transaction.Rollback();

}

finally

{

session.Close();

}

}

}

Функция Insert вставляет новую запись в таблицу Departament. Входные данные – имя отделения.

 

Обновление:

void Update(string sName)

{

using (var session = parent.MySession.OpenSession())

using (var transaction = session.BeginTransaction())

{

try

{

var newdep = GetDepByName(session, DepartTable.CurrentRow.Cells[0].Value.ToString());

newdep.Name = sName;

session.Update(newdep);

transaction.Commit();

}

catch (Exception exception)

{

MessageBox.Show(exception.Message, "Ошибка подключения к БД");

transaction.Rollback();

}

}

}

 

Функция Update обновляет выделенную запись таблицы DepartTable. Входные данные – имя отделения.

 

 

Удаление записи:

public void Delete()

{

using (var session = parent.MySession.OpenSession())

using (var transaction = session.BeginTransaction())

{

try

{

var olddep = GetDepByName(session, DepartTable.CurrentRow.Cells[0].Value.ToString());

session.Delete(olddep);

transaction.Commit();

}

catch (Exception exception)

{

MessageBox.Show(exception.Message, "Ошибка подключения к БД");

transaction.Rollback();

}

 

Функция Delete удаляет выделенную запись таблицы DepartTable из таблицы Departament.





Поделиться с друзьями:


Дата добавления: 2017-01-28; Мы поможем в написании ваших работ!; просмотров: 1336 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2439 - | 2195 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.