----------------------------------- /* Tworzenie bazy */ ----------------------------------- USE [master]; GO IF EXISTS (SELECT * FROM sys.databases WHERE name = 'HealthcareBI') BEGIN DROP DATABASE HealthcareBI; END; CREATE DATABASE HealthcareBI; GO USE HealthcareBI GO ----------------------------------------------- /* Tworzenie schematów na bazie */ ----------------------------------------------- IF EXISTS (SELECT name FROM sys.schemas WHERE name = N'Integration' ) BEGIN DROP SCHEMA Integration END GO CREATE SCHEMA Integration GO IF EXISTS (SELECT name FROM sys.schemas WHERE name = N'Dimension' ) BEGIN DROP SCHEMA Dimension END GO CREATE SCHEMA Dimension GO IF EXISTS (SELECT name FROM sys.schemas WHERE name = N'Fact' ) BEGIN DROP SCHEMA Fact END GO CREATE SCHEMA Fact GO --------------------------------------------------- /* --Sprawdzenie czy utworzyły się schematy */ --------------------------------------------------- --SELECT -- s.name AS schema_name, -- u.name AS schema_owner --FROM -- sys.schemas s --INNER JOIN sys.sysusers u ON u.uid = s.principal_id --ORDER BY -- s.name; ----------------------------------------------- /* Tworzenie tabeli schematu INTEGRATION */ ----------------------------------------------- CREATE TABLE Integration.TrybWypisuStaging ( IDStaging smallint identity (1,1) CONSTRAINT PK_TrybWypisuStaging PRIMARY KEY, KSGL_TRYN varchar(2), TRYB varchar(100), TRYB_GRUPA varchar(30), DataImportu SMALLDATETIME NOT NULL DEFAULT GETDATE() ); GO CREATE TABLE Integration.HospitalizacjaStaging ( IDStaging int identity(1,1) CONSTRAINT PK_HospitalizacjaStaging PRIMARY KEY, DataImportu SMALLDATETIME NOT NULL DEFAULT GETDATE(), LP varchar(10), KSGL_DATP varchar(50), KSGL_DATW varchar(50), KSGL_RDKS varchar(2), KSGL_ROKM varchar(4), KSGL_TRYW varchar(2), KSGL_TRYN varchar(2), KSOD_DPZW varchar(50), KSOD_TRYW varchar(2), KSOD_DATP varchar(50), KSOD_DATW varchar(50), INSTA_PACJ_ID varchar(15), HASH_PESL varchar(50), PACJ_PLEC varchar(1) , JNIP_NAZW varchar(100), NZMI varchar(200), PCRZ_ICDR varchar(10), PCRZ_OPIS varchar(255), PCRZ_STAN varchar(10), PCRZ_TYPT varchar(3), ROZP_ICDR varchar(10), ROZP_NAZW varchar(20), OSOBODNI varchar(5), SUMA_ICD9 varchar(5), ODDZIAL varchar(100), ADRES_PODMIOTU varchar(100) ); GO CREATE TABLE Integration.AnkietaDBStaging ( IDStaging int identity(1,1) CONSTRAINT PK_AnkietaDBStaging PRIMARY KEY, DataImportu SMALLDATETIME NOT NULL DEFAULT GETDATE(), [Godzina rozpoczecia] varchar(30), [Godzina ukonczenia] varchar(30), [Adres e-mail] varchar(30), [Jakiego miesiaca dotycza sprawozdawane dane] varchar(30), [Jakiego roku dotycza sprawozdawane dane] varchar(4), [Wybierz rodzaj placowki] varchar(50), [Wybierz szpital wieloprofilowy] varchar(100), [Wybierz monoklinike] varchar(200), [Czy_zebrano_ankiety] varchar(3), [Uzasadnij dlaczego nie udało się zebrać ani jednej ankiety?] ntext, [Ile_pacjentow_mezczyzn] varchar(5), [Ile_pacjentow_kobiet] varchar(5), [Ile_pacjentow_wiek18-29] varchar(5), [Ile_pacjentow_wiek30-39] varchar(5), [Ile_pacjentow_wiek40-49] varchar(5), [Ile_pacjentow_wiek50-69] varchar(5), [Ile_pacjentow_wiek_powyzej70] varchar(5), [Ile_pacjentow_wyksztalcenie_podstawowe] varchar(5), [Ile_pacjentow_wyksztalcenie_srednie] varchar(5), [Ile_pacjentow_wyksztalcenie_wyzsze] varchar(5), [Czas oczekiwania związanego z przyjęciem do Szpitala (szybkość załatwienia formalności)_ZD] varchar(5), [Czas oczekiwania związanego z przyjęciem do Szpitala (szybkość załatwienia formalności)_RD] varchar(5), [Czas oczekiwania związanego z przyjęciem do Szpitala (szybkość załatwienia formalności)_RZ] varchar(5), [Czas oczekiwania związanego z przyjęciem do Szpitala (szybkość załatwienia formalności)_ZZ] varchar(5), [Czas oczekiwania związanego z przyjęciem do Szpitala (szybkość załatwienia formalności)_ND] varchar(5), [Organizacja sposobu przyjęcia do Szpitala_ZD] varchar(5), [Organizacja sposobu przyjęcia do Szpitala_RD] varchar(5), [Organizacja sposobu przyjęcia do Szpitala_RZ] varchar(5), [Organizacja sposobu przyjęcia do Szpitala_ZZ] varchar(5), [Organizacja sposobu przyjęcia do Szpitala_ND] varchar(5), [Czy polecił/łaby Pan/Pani nasz Szpital swojej rodzinie, przyjaciołom lub znajomym?_ZT] varchar(5), [Czy polecił/łaby Pan/Pani nasz Szpital swojej rodzinie, przyjaciołom lub znajomym?_RT] varchar(5), [Czy polecił/łaby Pan/Pani nasz Szpital swojej rodzinie, przyjaciołom lub znajomym?_RN] varchar(5), [Czy polecił/łaby Pan/Pani nasz Szpital swojej rodzinie, przyjaciołom lub znajomym?_ZN] varchar(5), ); GO --------------------------------------------------- /* Tworzenie tabeli schematu DIMENSION i relacji */ --------------------------------------------------- BEGIN DECLARE @StartDate date = '20160101'; DECLARE @CutoffDate date = DATEADD(DAY, -1, DATEADD(YEAR, 20, @StartDate)); ;WITH seq(n) AS ( SELECT 0 UNION ALL SELECT n + 1 FROM seq WHERE n < DATEDIFF(DAY, @StartDate, @CutoffDate) ), d(d) AS ( SELECT DATEADD(DAY, n, @StartDate) FROM seq ), src AS ( SELECT IDData = CONVERT(date, d), DzienNr = DATEPART(DAY, d), DzienNazwa = DATENAME(WEEKDAY, d), TydzienRoku = DATEPART(WEEK, d), TydzienRokuISO = DATEPART(ISO_WEEK, d), DzienTygodnia = DATEPART(WEEKDAY, d), MiesiacNr = DATEPART(MONTH, d), MiesiacNazwa = DATENAME(MONTH, d), Kwartal = DATEPART(Quarter, d), Rok = DATEPART(YEAR, d), PierwszyDzienMiesiaca = DATEFROMPARTS(YEAR(d), MONTH(d), 1), OstatniDzienMiesiaca = DATEADD(DAY,-1,(DATEADD(MONTH,+1,DATEFROMPARTS(YEAR(d), MONTH(d), 1)))), OstatniDzienRoku = DATEFROMPARTS(YEAR(d), 12, 31), DzienRoku = DATEPART(DAYOFYEAR, d) FROM d ) SELECT * INTO Dimension.Kalendarz FROM src ORDER BY IDData OPTION (MAXRECURSION 0); END; GO BEGIN ALTER TABLE Dimension.Kalendarz ALTER COLUMN IDData date not null END GO BEGIN ALTER TABLE Dimension.Kalendarz ADD CONSTRAINT PK_Kalendarz PRIMARY KEY (IDData) END; GO CREATE TABLE Dimension.RodzajPlacowki ( IDRodzajPlacowki tinyint identity(1,1) CONSTRAINT PK_RodzajPlacowki PRIMARY KEY, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), Nazwa varchar(50) not null ); GO CREATE TABLE Dimension.Placowka ( IDPlacowki int identity(1,1) CONSTRAINT PK_Placowka PRIMARY KEY, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), IDRodzajPlacowki tinyint not null, NazwaPlacowkiPelna varchar(200) not null, Nazwa varchar(50) not null, NazwaSkrt varchar(50) not null, AdresPelny varchar(255) not null, PodmiotNazwa varchar(100) not null, Wojewodztwo varchar(50) not null, Miasto varchar(200) not null, Ulica varchar(100) not null, NrDomu varchar(10), NrMieszkania varchar(10), SzerokoscGeo decimal(10,6), DlugoscGeo decimal(10,6), CONSTRAINT FK_RodzajPlacowki FOREIGN KEY (IDRodzajPlacowki) REFERENCES Dimension.RodzajPlacowki(IDRodzajPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE ); GO CREATE TABLE Dimension.DaneDokumentu ( IDDokumentu tinyint identity(1,1) CONSTRAINT PK_DaneDokumentu PRIMARY KEY, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), IDAnkietaDB int not null, DataUtworzenia date not null, GodzinaUtworzenia smalldatetime not null, [Czy zebrano ankiety] bit not null, WypelniajacyEmail varchar(150) not null, WypelniajacyImie varchar(100) not null, WypelniajacyNazwisko varchar(200) not null CONSTRAINT FK_DaneDokumentu FOREIGN KEY (DataUtworzenia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE CASCADE ); GO CREATE TABLE Dimension.TrybWypisu ( TrybKod varchar(2) CONSTRAINT PK_TrybWypisu PRIMARY KEY, TrybNazwa varchar(100), TrybGrupa varchar(30), DataImportu SMALLDATETIME NOT NULL DEFAULT GETDATE() ); GO ------------------------------------------------- /* Tworzenie tabeli schematu Fact oraz relacji*/ ------------------------------------------------- CREATE TABLE Fact.AnkietaWiek ( IDPlacowki int not null, IDDokumentu tinyint not null, DataWypelnienia date not null, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), [WiekPacjentow18-29] smallint, [WiekPacjentow30-39] smallint, [WiekPacjentow40-49] smallint, [WiekPacjentow50-69] smallint, [WiekPacjentowPowyzej70] smallint, CONSTRAINT FK_AnkietaWiekDataWypelnienia FOREIGN KEY (DataWypelnienia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_AnkietaWiekIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_AnkietaWiekIDDokumentu FOREIGN KEY (IDDokumentu) REFERENCES Dimension.DaneDokumentu(IDDokumentu) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT PK_AnkietaWiek primary key (IDPlacowki, IDDokumentu, DataWypelnienia) ); GO CREATE TABLE Fact.AnkietaPlec ( IDPlacowki int not null, IDDokumentu tinyint not null, DataWypelnienia date not null, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), [MezczyznaPacjent] smallint, [KobietaPacjent] smallint, CONSTRAINT FK_AnkietaPlecDataWypelnienia FOREIGN KEY (DataWypelnienia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_AnkietaPlecIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_AnkietaPlecIDDokumentu FOREIGN KEY (IDDokumentu) REFERENCES Dimension.DaneDokumentu(IDDokumentu) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT PK_AnkietaPlec primary key (IDPlacowki, IDDokumentu, DataWypelnienia) ); GO CREATE TABLE Fact.AnkietaWyksztalcenie ( IDPlacowki int not null, IDDokumentu tinyint not null, DataWypelnienia date not null, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), [WyksztalceniePodstawowe] smallint, [WyksztalcenieSrednie] smallint, [WyksztalcenieWyzsze] smallint, [WiekPacjentowPowyzej70] smallint, CONSTRAINT FK_AnkietaWyksztalcenieDataWypelnienia FOREIGN KEY (DataWypelnienia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_AnkietaWyksztalcenieIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_AnkietaWyksztalcenieIDDokumentu FOREIGN KEY (IDDokumentu) REFERENCES Dimension.DaneDokumentu(IDDokumentu) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT PK_AnkietaWyksztalcenie primary key (IDPlacowki, IDDokumentu, DataWypelnienia) ); GO CREATE TABLE Fact.AnkietaPrzyjecieCzasOczekiwania ( IDPlacowki int not null, IDDokumentu tinyint not null, DataWypelnienia date not null, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), PrzyjecieCzasOczekiwaniaZD smallint, PrzyjecieCzasOczekiwaniaRD smallint, PrzyjecieCzasOczekiwaniaRZ smallint, PrzyjecieCzasOczekiwaniaZZ smallint, PrzyjecieCzasOczekiwaniaND smallint, CONSTRAINT FK_AnkietaPrzyjecieCzasOczekiwaniaDataWypelnienia FOREIGN KEY (DataWypelnienia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_AnkietaPrzyjecieCzasOczekiwaniaIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_AnkietaPrzyjecieCzasOczekiwaniaIDDokumentu FOREIGN KEY (IDDokumentu) REFERENCES Dimension.DaneDokumentu(IDDokumentu) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT PK_AnkietPrzyjecieCzasOczekiwania primary key (IDPlacowki, IDDokumentu, DataWypelnienia) ); GO CREATE TABLE Fact.AnkietaPrzyjecieSposobOrganizacji ( IDPlacowki int not null, IDDokumentu tinyint not null, DataWypelnienia date not null, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), PrzyjecieSposobOrganizacjiZD smallint, PrzyjecieSposobOrganizacjiRD smallint, PrzyjecieSposobOrganizacjiRZ smallint, PrzyjecieSposobOrganizacjiZZ smallint, PrzyjecieSposobOrganizacjiND smallint, CONSTRAINT FK_AnkietaPrzyjecieSposobOrganizacjiDataWypelnienia FOREIGN KEY (DataWypelnienia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_AnkietaPrzyjecieSposobOrganizacjiIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_AnkietPrzyjecieSposobOrganizacjiIDDokumentu FOREIGN KEY (IDDokumentu) REFERENCES Dimension.DaneDokumentu(IDDokumentu) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT PK_AnkietPrzyjecieSposobOrganizacji primary key (IDPlacowki, IDDokumentu, DataWypelnienia) ); GO CREATE TABLE Fact.AnkietaPolecenieSzpitala ( IDPlacowki int not null, IDDokumentu tinyint not null, DataWypelnienia date not null, DataImportu SMALLDATETIME not null DEFAULT GETDATE(), PolecenieSzpitalaZT smallint, PolecenieSzpitalaRT smallint, PolecenieSzpitalaRN smallint, PolecenieSzpitalaZN smallint, CONSTRAINT FK_AnkietaPolecenieSzpitalaDataWypelnienia FOREIGN KEY (DataWypelnienia) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_AnkietaPolecenieSzpitalaIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_AnkietaPolecenieSzpitalaIDDokumentu FOREIGN KEY (IDDokumentu) REFERENCES Dimension.DaneDokumentu(IDDokumentu) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT PK_AnkietaPolecenieSzpitala primary key (IDPlacowki, IDDokumentu, DataWypelnienia) ); GO CREATE TABLE Fact.Hospitalizacja ( IDHospitalizacja int identity(1,1) CONSTRAINT PK_Hospitalizacja PRIMARY KEY, DataImportu SMALLDATETIME NOT NULL DEFAULT GETDATE(), InstancjaPacjentId varchar(15) not null, IDPlacowki int not null, KSGLDataP date not null, KSGLDataW date not null, KSGLRodzajKsiegi tinyint not null, KSGLRok varchar(4) not null, KSGLTrybPrzjeciaKod varchar(2) not null, KSGLTrybWypisuKod varchar(2) not null, KSODGdzieWypisano varchar(50), KSODNumerPacjenta varchar(8) not null, KSODTrybWypisuKod varchar(2) not null, KSODDataP date not null, KSODDataW date not null, PacjentPlecKod varchar(1), RozpoznanieICD10Kod varchar(10), RozpoznanieICD10Nazwa ntext, OSOBODNI int, ODDZIAL varchar(200) not null, CONSTRAINT FK_HospitalizacjaKSGLDataP FOREIGN KEY (KSGLDataP) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_HospitalizacjaKSGLDataW FOREIGN KEY (KSGLDataW) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_HospitalizacjaKSODDataP FOREIGN KEY (KSODDataP) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_HospitalizacjaKSODDataW FOREIGN KEY (KSODDataW) REFERENCES Dimension.Kalendarz(IDData) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT FK_HospitalizacjaIDPlacowki FOREIGN KEY (IDPlacowki) REFERENCES Dimension.Placowka(IDPlacowki) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT FK_HospitalizacjaKSGLTrybWypisuKod FOREIGN KEY (KSGLTrybWypisuKod) REFERENCES Dimension.TrybWypisu(TrybKod) ON DELETE NO ACTION ON UPDATE CASCADE ); GO