- •Содержание
- •1 Описание предметной области
- •1.1 Исходные данные
- •1.2 Постановка задачи
- •2 Описание логической модели базы данных
- •3 Анализ на нормальные формы отношений
- •4 Выбор средства реализации базы данных
- •4.1 Общие сведения о субд
- •4.2 Обоснование выбора субд
- •5 Описание физической модели базы данных
- •6 Описание программного обеспечения системы
- •6.1 Описание пользовательского интерфейса
- •6.2 Реализация ограничений целостности и контроль ввода данных
- •6.3 Схемы основных алгоритмов
- •6.4 Описание основных программных модулей
6.3 Схемы основных алгоритмов
Наиболее важными действиями при работе с базой данных является добавление данных, их выборка и составление отчетов.
При добавлении данных стоит учитывать корректность введенных данных и в зависимости от этого выполнять добавление в базу данных или нет. Алгоритм подобного действия приведен на рисунке 17.
Ввод данных в поле
нет
да
Добавление в базу
данных
Рисунок 17 – Схема выполнения добавления данных в базу данных
Не менее важным этапом при работе с программой является выбор данных для отображения. Чтобы вывести данные из базы данных необходимо составить sql запрос, который правильно отработает и вернет запрашиваемые строки. Затем следует получить эти данные и отобразить в программе (рисунок 18).
Выборка данных из базы данных участвует в формировании отчетов. При формировании отчета прослеживается подобный алгоритм. Запрашиваются данные из базы данных, составляется sql запрос, а результат запроса отображается в особом виде. Данные должны быть наглядными, чтобы их легко можно было понять. Необходимо также сделать возможность просмотра с масштабированием и вывода на печать для осуществления дальнейших действий вне программы.
Выбор пользователем
запроса, который нужно выполнить
Выбор хранимой
функции с хранящимся в ней sql
запросом
Выполнение функции
и получение результата
Обработка
результатов и вывод на экран
Рисунок 18 – Схема выполнения запросов на получение данных из базы данных
6.4 Описание основных программных модулей
Основными модулями программы являются запросы и отчеты. Все запросы к базе данных реализованы при помощи процедур. В программе реализуется только вызов процедур и функций из базы данных, а сама логика запросов написана и хранится в базе данных.
Для формирования запроса по получению данных о всех учебных заведениях по введенной спеиальности используется следующий кусок кода:
public PtuEntity[] GetPtuDetails(long pSpecId)
{
var list = new List<PtuEntity>();
var command = new SqlCommand("SELECT * FROM dbo.f_GetPtuDetails(@pSpecId)", _sqlConnectionBaser);
command.Parameters.Add("@pSpecId", pSpecId);
var reader = command.ExecuteReader();
while (reader.Read())
{
if (reader.HasRows)
{
list.Add(new PtuEntity(
reader.GetInt64(0),
reader.GetString(1),
reader.GetString(2),
reader.GetInt32(3),
reader.GetString(4),
reader.GetString(5),
(double)reader.GetDecimal(6),
reader.GetString(7)
));
}
}
reader.Close();
return list.ToArray();
}
Код процедуры f_GetPtuDetails:
ALTER FUNCTION [dbo].[f_GetPtuDetails] (@pSpecId BIGINT)
RETURNS TABLE
AS
RETURN
(
SELECT ptu.RegNumber, ptu.[Name], ptu.[Address],
ptu.Telephone, a.[Name], b.[Name],
[Square], p.[Name]
FROM tblPtu ptu JOIN tblPtuSpec ps ON ps.Ptu_RegNumber = ptu.RegNumber JOIN tblSpecialization s
ON s.Id = ps.Spec_Id JOIN tblAgency a ON a.Id = ptu.Agency_Id JOIN tblBuilding b ON ptu.Building_Id = b.Id
JOIN tblProfitability p ON ptu.Profitability_Id = p.Id
WHERE s.Id = @pSpecId
)
Для формирования отчетов используются виды, которые собирают все необходимые данные из разных таблиц. Данные раскидываются по форме для красивого и наглядного отображения и затем при формировании отчета выводятся на экран в соответствующем виде.
Кусок кода, отвечающий за формирование отчета в MSSQL, приведен ниже.
CREATE VIEW [dbo].[CommonPtuView]
AS
SELECT p.RegNumber, p.Name, b.Name AS BuildingName, p.[Square], ISNULL(s.Name,'Занимаемых площадей нет') AS AddSquareName,
ent.EntCount,
spec.SpecSum,
trans.TransCount,
spec.SpecCount,
ISNULL(ps.[Square],0) AS AddSquare,
(SELECT COUNT(*) FROM tblPtu) AS PtuCount
FROM tblPtu p JOIN tblBuilding b ON b.Id = p.Building_Id
LEFT JOIN tblPtuSquare ps ON ps.Ptu_RegName = p.RegNumber
LEFT JOIN tblSquare s ON s.Id = ps.Square_Id
LEFT JOIN (SELECT COUNT(ps1.Spec_Id) AS SpecCount, ISNULL(SUM(ps1.Groups_Count),0) AS SpecSum,
p1.RegNumber AS RegNumber
FROM tblPtu p1 LEFT JOIN tblPtuSpec ps1 ON ps1.Ptu_RegNumber = p1.RegNumber
GROUP BY p1.RegNumber) spec ON spec.RegNumber = p.RegNumber
LEFT JOIN (SELECT ISNULL(SUM(pt2.Amount),0) AS TransCount, p2.RegNumber AS RegNumber
FROM tblPtu p2 LEFT JOIN tblPtuTransport pt2 ON pt2.Ptu_RegNumber = p2.RegNumber
GROUP BY p2.RegNumber) trans ON trans.RegNumber = p.RegNumber
LEFT JOIN (SELECT COUNT(pes3.EnterpriseStructure_Id) AS EntCount, p3.RegNumber AS RegNumber
FROM tblPtu p3 LEFT JOIN tblPtuEnterpriseStructure pes3 ON pes3.Ptu_RegNumber = p3.RegNumber
GROUP BY p3.RegNumber) ent ON ent.RegNumber = p.RegNumber