Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:start [2010/06/10 16:01]
ztb2010 utworzono
pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:start [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis aplikacji ====== ====== Opis aplikacji ======
  
-**Aplikacja będzie miała za zadanie katalogować i zarządzać szkoleniami BHP, a ponadto móc generować raporty z bieżącego szkolenia jak i ze szkoleń w historii. Docelowym użytkownikiem aplikacji będzie pojedynczy, zewnętrzny szkoleniowiecprowadzący szkolenia w pewnych zakładach pracy i mający pod opieką pewną grupę pracowników ​ dla których konieczne są szkolenia, zarówno jednorazowe jak i okresowe.**+**Aplikacja będzie miała za zadanie katalogować i zarządzać szkoleniami BHP, a ponadto móc generować raporty z bieżącego szkolenia jak i ze szkoleń w historii. Docelowym użytkownikiem aplikacji będzie pojedynczy, zewnętrzny szkoleniowiec prowadzący szkolenia w pewnych zakładach pracy i mający pod opieką pewną grupę pracowników ​ dla których konieczne są szkolenia, zarówno jednorazowe jak i okresowe.**
  
 ===== Opis funkcjonalny ===== ===== Opis funkcjonalny =====
Linia 69: Linia 69:
   * Użycie funkcji CLR (implementowanych przy użyciu C# i .NET Framework) wewnątrz bazy danych. Funkcje mogłyby zapewnić integralność informacji o plikach, przechowywanych w bazie z ich fizyczną reprezentacją na dysku na poziomie mechanizmów samej bazy.   * Użycie funkcji CLR (implementowanych przy użyciu C# i .NET Framework) wewnątrz bazy danych. Funkcje mogłyby zapewnić integralność informacji o plikach, przechowywanych w bazie z ich fizyczną reprezentacją na dysku na poziomie mechanizmów samej bazy.
   * Użycie biblioteki Open XML SDK 2.0 dającej możliwość manipulacją plikami formatu OpenXML ​ w celu generowania elastycznych raportów na podstawie wcześniej przygotowywanych,​ standardowych i łatwych w tworzeniu dokumentów pakietu MS Office 2007 lub OpenOffice.   * Użycie biblioteki Open XML SDK 2.0 dającej możliwość manipulacją plikami formatu OpenXML ​ w celu generowania elastycznych raportów na podstawie wcześniej przygotowywanych,​ standardowych i łatwych w tworzeniu dokumentów pakietu MS Office 2007 lub OpenOffice.
- +\\
 ====== Projekt bazy danych ====== ====== Projekt bazy danych ======
  
 Baza danych będzie implementowana jako darmowa baza SQLExpress, która jest oparta na komercyjnym SZBD MS SQL Server 2008 R2. Baza danych będzie implementowana jako darmowa baza SQLExpress, która jest oparta na komercyjnym SZBD MS SQL Server 2008 R2.
  
-===== Diagram ​=====+===== Tabele ​=====
  
 {{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​database_diagram.gif|}} {{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​database_diagram.gif|}}
  
 +\\
  
 +===== Wyzwalacze =====
 +Implementacja dodatkowych wyzwalaczy była konieczna ze względu na to, że MS SQL Server nie dopuszcza definiowania kluczy obcych, które tworzyły by w bazie zapętlone wywołania //ON DELETE ACTION// lub //ON UPDATE ACTION//​. ​
  
 +==== Wyzwalacze dla tabeli Template ====
 + 
 +Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku usuwania danych.
 +<​code>​
 +CREATE TRIGGER [dbo].[ForDeleteTemplateTrigger]
 +ON [dbo].[Template]
 +FOR DELETE
 +AS
 + -- aktualizacja tabeli Training
 +
 + UPDATE dbo.Training
 + SET ProtocolTemplateId = NULL
 + WHERE ProtocolTemplateId IN (SELECT Id FROM deleted)
 +
 + UPDATE dbo.Training
 + SET CertificateTemplateId = NULL
 + WHERE CertificateTemplateId IN (SELECT Id FROM deleted)
 +
 + -- aktualizacja tabeli TrainingCategory
 +
 + UPDATE dbo.TrainingCategory
 + SET ProtocolTemplateId = NULL
 + WHERE ProtocolTemplateId IN (SELECT Id FROM deleted)
 +
 + UPDATE dbo.TrainingCategory
 + SET CertificateTemplateId = NULL
 + WHERE CertificateTemplateId IN (SELECT Id FROM deleted)
 +
 +GO
 +</​code>​
 +\\
 +Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku modyfikowania klucza głównego.
 +<​code>​
 +-- Utrzymuje więzy integralności innych tabel z tabelą Template w przypadku modyfikowania klucza głównego.
 +CREATE TRIGGER [dbo].[ForUpdateTemplateTrigger]
 +ON [dbo].[Template]
 +FOR UPDATE
 +AS
 + -- aktualizacja tabel TrainingCategory i Training
 +
 + IF UPDATE(Id)
 + BEGIN
 + DECLARE @insertedId uniqueidentifier,​ @deletedId uniqueidentifier
 +
 + DECLARE ForUpdateInsertedRowsCursor CURSOR FOR
 + SELECT Id FROM inserted
 + DECLARE ForUpdateDeletedRowsCursor CURSOR FOR
 + SELECT Id FROM deleted
 +
 + OPEN ForUpdateInsertedRowsCursor
 + OPEN ForUpdateDeletedRowsCursor
 +
 + FETCH NEXT FROM ForUpdateInsertedRowsCursor
 + INTO @insertedId
 + FETCH NEXT FROM ForUpdateDeletedRowsCursor
 + INTO @deletedId
 + WHILE @@FETCH_STATUS = 0
 + BEGIN
 +
 + -- aktualizacja tabeli TrainingCategory
 +
 + UPDATE dbo.TrainingCategory
 + SET ProtocolTemplateId = @insertedId
 + WHERE ProtocolTemplateId = @deletedId
 +
 + UPDATE dbo.TrainingCategory
 + SET CertificateTemplateId = @insertedId
 + WHERE CertificateTemplateId = @deletedId
 +
 + -- aktualizacja tabeli Training
 +
 + UPDATE dbo.Training
 + SET ProtocolTemplateId = @insertedId
 + WHERE ProtocolTemplateId = @deletedId
 +
 + UPDATE dbo.Training
 + SET CertificateTemplateId = @insertedId
 + WHERE CertificateTemplateId = @deletedId
 +
 + -- wczytanie kolejnego rekordu
 +
 + FETCH NEXT FROM ForUpdateInsertedRowsCursor
 + INTO @insertedId
 + FETCH NEXT FROM ForUpdateDeletedRowsCursor
 + INTO @deletedId
 + END
 +
 + CLOSE ForUpdateInsertedRowsCursor
 + CLOSE ForUpdateDeletedRowsCursor
 + DEALLOCATE ForUpdateInsertedRowsCursor
 + DEALLOCATE ForUpdateDeletedRowsCursor
 + END
 +</​code>​
 +
 +==== Wyzwalacze dla tabeli TrainingCategory ====
 +
 +Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku usuwania danych.
 +<​code>​
 +CREATE TRIGGER [dbo].[DeleteTrainingCategoryTrigger]
 +ON [dbo].[TrainingCategory]
 +FOR DELETE
 +AS
 + -- aktualizacja tabeli Training
 +
 + UPDATE dbo.Training
 + SET TrainingCategoryId = NULL
 + WHERE TrainingCategoryId IN (SELECT Id FROM deleted)
 +GO
 +</​code>​
 +\\
 +Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku modyfikowania klucza głównego.
 +<​code>​
 +CREATE TRIGGER [dbo].[UpdateTrainingCategoryTrigger]
 +ON [dbo].[TrainingCategory]
 +FOR UPDATE
 +AS
 + -- aktualizacja tabeli Training
 +
 + IF UPDATE(Id)
 + BEGIN
 + DECLARE @insertedId uniqueidentifier,​ @deletedId uniqueidentifier
 +
 + DECLARE InsertedRowsCursor CURSOR FOR
 + SELECT Id FROM inserted
 + DECLARE DeletedRowsCursor CURSOR FOR
 + SELECT Id FROM deleted
 +
 + OPEN InsertedRowsCursor
 + OPEN DeletedRowsCursor
 +
 + FETCH NEXT FROM InsertedRowsCursor
 + INTO @insertedId
 + FETCH NEXT FROM DeletedRowsCursor
 + INTO @deletedId
 + WHILE @@FETCH_STATUS = 0
 + BEGIN
 + UPDATE dbo.Training
 + SET TrainingCategoryId = @insertedId
 + WHERE TrainingCategoryId = @deletedId
 +
 + FETCH NEXT FROM InsertedRowsCursor
 + INTO @insertedId
 + FETCH NEXT FROM DeletedRowsCursor
 + INTO @deletedId
 + END
 +
 + CLOSE InsertedRowsCursor
 + CLOSE DeletedRowsCursor
 + DEALLOCATE InsertedRowsCursor
 + DEALLOCATE DeletedRowsCursor
 + END
 +</​code>​
 +
 +===== Widoki =====
 +
 +==== Widok zakładu pracy ====
 +
 +Widok umożliwia wybranie istotnych dla użytkownika informacji dla danego zakładu pracy.
 +
 +=== Diagram ===
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​companymainview.gif|}}
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE VIEW [dbo].[TrainingCategoryView]
 +AS
 +SELECT ​       dbo.TrainingCategory.Id,​ dbo.TrainingCategory.Name,​ dbo.TrainingCategory.ExpiryTime,​ dbo.TrainingCategory.Description,​ dbo.TrainingCategory.LastNumber, ​
 +                         ​ProtocolTemplate.Name AS ProtocolName,​ CertificateTemplate.Name AS CertificateName,​ ProtocolTemplate.Id AS ProtocolId, ​
 +                         ​CertificateTemplate.Id AS CertificateId
 +FROM            dbo.Template AS CertificateTemplate RIGHT OUTER JOIN
 +                         ​dbo.TrainingCategory ON CertificateTemplate.Id = dbo.TrainingCategory.CertificateTemplateId LEFT OUTER JOIN
 +                         ​dbo.Template AS ProtocolTemplate ON dbo.TrainingCategory.ProtocolTemplateId = ProtocolTemplate.Id
 +</​code>​
 +
 +==== Widok pracownika ====
 +
 +Widok grupuje informacje na temat pracownika, jego zakładu pracy oraz aktualnie ważnego szkolenia.
 +
 +=== Diagram ===
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​employeemainview.gif|}}
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE VIEW [dbo].[EmployeeDetailsView]
 +AS
 +SELECT ​       dbo.Employee.Surname,​ dbo.Employee.Forename,​ dbo.Employee.Street,​ dbo.Employee.BuildingNumber,​ dbo.Employee.FlatNumber,​ dbo.Employee.City, ​
 +                         ​dbo.Employee.PostalCode,​ dbo.Employee.Post,​ dbo.Employee.Phone,​ dbo.Employee.Email,​ dbo.Employee.BirthDate,​ dbo.Employee.BirthPlace, ​
 +                         ​dbo.Employee.Position,​ dbo.Employee.CheckupExpiryDate,​ dbo.Employee.Id,​ dbo.Company.Name,​ dbo.Employee.CompanyId,​ dbo.Training.Number, ​
 +                         ​dbo.Training.TrainingDate,​ dbo.Training.ExpiryDate,​ dbo.TrainingCategory.Name AS CategoryName
 +FROM            dbo.TrainingCategory RIGHT OUTER JOIN
 +                         ​dbo.Training ON dbo.TrainingCategory.Id = dbo.Training.TrainingCategoryId RIGHT OUTER JOIN
 +                         ​dbo.Company INNER JOIN
 +                         ​dbo.Employee ON dbo.Company.Id = dbo.Employee.CompanyId ON dbo.Training.Id = dbo.Employee.CurrentTrainingId
 +</​code>​
 +
 +==== Widok kategorii szkoleń ====
 +
 +Widok grupuje informacje na temat szkoleń i przypisanych raportów.
 +
 +=== Diagram ===
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​trainingcategoryview.gif|}}
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE VIEW [dbo].[TrainingCategoryView]
 +AS
 +SELECT ​       dbo.TrainingCategory.Id,​ dbo.TrainingCategory.Name,​ dbo.TrainingCategory.ExpiryTime,​ dbo.TrainingCategory.Description,​ dbo.TrainingCategory.LastNumber, ​
 +                         ​ProtocolTemplate.Name AS ProtocolName,​ CertificateTemplate.Name AS CertificateName,​ ProtocolTemplate.Id AS ProtocolId, ​
 +                         ​CertificateTemplate.Id AS CertificateId
 +FROM            dbo.Template AS CertificateTemplate RIGHT OUTER JOIN
 +                         ​dbo.TrainingCategory ON CertificateTemplate.Id = dbo.TrainingCategory.CertificateTemplateId LEFT OUTER JOIN
 +                         ​dbo.Template AS ProtocolTemplate ON dbo.TrainingCategory.ProtocolTemplateId = ProtocolTemplate.Id
 +</​code>​
 +
 +
 +==== Widok historii szkoleń ====
 +
 +Widok grupuje informacje na temat szkoleń, ich kategorii oraz przypisanych raportów.
 +
 +=== Diagram ===
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​traininghistoryview.gif|}}
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE VIEW [dbo].[TrainingHistoryView]
 +AS
 +SELECT ​       dbo.Training.Id,​ dbo.Training.Number,​ dbo.Training.TrainingDate,​ dbo.Training.ExpiryDate,​ dbo.Training.Description,​ dbo.TrainingCategory.Name AS CategoryName, ​
 +                         ​ProtocolTemplate.Name AS ProtocolName,​ CertificateTemplate.Name AS CertificateName,​ ProtocolTemplate.Id AS ProtocolId, CertificateTemplate.Id AS CertificateId, ​
 +                         ​ProtocolTemplate.FileName AS ProtocolFileName,​ CertificateTemplate.FileName AS CertificateFileName
 +FROM            dbo.Template AS ProtocolTemplate RIGHT OUTER JOIN
 +                         ​dbo.Training ON ProtocolTemplate.Id = dbo.Training.ProtocolTemplateId LEFT OUTER JOIN
 +                         ​dbo.TrainingCategory ON dbo.Training.TrainingCategoryId = dbo.TrainingCategory.Id LEFT OUTER JOIN
 +                         ​dbo.Template AS CertificateTemplate ON dbo.Training.CertificateTemplateId = CertificateTemplate.Id
 +</​code>​
 +
 +\\
 +===== Funkcje =====
 +
 +==== IsTemplateUsing ​ ====
 +
 +Funkcja sprawdza czy dany plik szablonu jest gdziekolwiek wykorzystywany w bazie. Funkcja umożliwi wielokrotne wykorzystywanie tego samego pliku i jednocześnie automatyczne jego usuwanie, jeżeli nie będzie już potrzebny.
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE FUNCTION [dbo].[IsTempleteUsing]
 + (
 + @templateIdParam uniqueidentifier
 + )
 +RETURNS BIT
 +AS
 + BEGIN
 + IF EXISTS (SELECT Id FROM TrainingCategory WHERE ProtocolTemplateId = @templateIdParam)
 + RETURN 1
 +
 + IF EXISTS (SELECT Id FROM TrainingCategory WHERE CertificateTemplateId = @templateIdParam)
 + RETURN 1
 +
 + IF EXISTS (SELECT Id FROM Training WHERE ProtocolTemplateId = @templateIdParam)
 + RETURN 1
 +
 + IF EXISTS (SELECT Id FROM Training WHERE CertificateTemplateId = @templateIdParam)
 + RETURN 1
 +
 + RETURN 0
 + END
 +</​code>​
 +
 +\\
 +===== Procedury =====
 +
 +==== SelectTrainingsByEmployeeId ​ ====
 +
 +Procedura umożliwia wybranie rekordów wszystkich szkoleń w których uczestniczył zadany pracownik.
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE PROCEDURE [dbo].[SelectTrainingsByEmployeeId]
 + @employeeIdParam uniqueidentifier
 +AS
 + SET NOCOUNT ON;
 + SELECT ​       *
 + FROM            dbo.TrainingHistoryView
 + WHERE ​       (Id IN (SELECT TrainingId FROM dbo.EmployeeTraining WHERE (EmployeeId = @employeeIdParam)));​
 + RETURN
 +</​code>​
 +
 +==== SelectEmployeesByTrainingId ​ ====
 +
 +Procedura umożliwia wybranie wszystkich rekordów pracowników,​ którzy uczestniczyli w zadanym szkoleniu.
 +
 +=== Skrypt ===
 +
 +<​code>​
 +CREATE PROCEDURE [dbo].[SelectEmployeesByTrainingId]
 + @trainingIdParam uniqueidentifier
 +AS
 + SET NOCOUNT ON;
 + SELECT ​       EmployeeDetailsView.Surname,​ EmployeeDetailsView.Forename,​ EmployeeDetailsView.Street,​ EmployeeDetailsView.BuildingNumber, ​
 +                          ​EmployeeDetailsView.FlatNumber,​ EmployeeDetailsView.City,​ EmployeeDetailsView.PostalCode,​ EmployeeDetailsView.Post,​ EmployeeDetailsView.Phone, ​
 +                          ​EmployeeDetailsView.Email,​ EmployeeDetailsView.BirthDate,​ EmployeeDetailsView.BirthPlace,​ EmployeeDetailsView.Position, ​
 +                          ​EmployeeDetailsView.CheckupExpiryDate,​ EmployeeDetailsView.Id,​ EmployeeDetailsView.Name,​ EmployeeDetailsView.CompanyId,​ EmployeeDetailsView.Number, ​
 +                          ​EmployeeDetailsView.TrainingDate,​ EmployeeDetailsView.ExpiryDate,​ EmployeeDetailsView.CategoryName
 + FROM            EmployeeTraining INNER JOIN
 +                          ​EmployeeDetailsView ON EmployeeTraining.EmployeeId = EmployeeDetailsView.Id
 + WHERE ​       (EmployeeTraining.TrainingId = @trainingIdParam)
 + RETURN
 +</​code>​
 +\\
 +====== Diagram przypadków użycia ======
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​przypadki_uzycia.gif|}}
 +
 +
 +\\
 +====== Diagram klas ======
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​classdiagram.gif|}}
 +
 +\\
 +====== Diagramy sekwencji ======
 +\\
 +===== Przeprowadzenie szkolenia =====
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​menadzer_szkolen:​diagram_sekwencji.gif|}}
  
pl/dydaktyka/ztb/2010/projekty/menadzer_szkolen/start.1276178462.txt.gz · ostatnio zmienione: 2019/06/27 15:56 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0