Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой БД .docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
549 Кб
Скачать
☆

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

В качестве СУБД была выбрана 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();

}

}