Changes between Version 6 and Version 7 of RelationalDesign


Ignore:
Timestamp:
12/14/23 18:21:00 (10 months ago)
Author:
090810
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • RelationalDesign

    v6 v7  
    9696
    9797== DDL скрипта за бришење на табелите и креирање на табелите
     98
     99
     100set search_path = project;
     101
     102DROP TABLE if exists obrok;
     103DROP TABLE if exists hrana;
     104DROP TABLE if exists zapis_hrana;
     105DROP TABLE if exists zapis_so_izmeren_sekjer;
     106DROP TABLE if exists zapis_insulin_doziran_insulin;
     107DROP TABLE if exists zapis_insulin;
     108DROP TABLE if exists zapis;
     109DROP TABLE if exists inventar;
     110DROP TABLE if exists insulin;
     111DROP TABLE if exists lenti_merenje_shekjer;
     112DROP TABLE if exists medikament;
     113DROP TABLE if exists zdrastven_rezultal;
     114DROP TABLE if exists faksimil;
     115DROP TABLE if exists datoteka_metapodatoci;
     116DROP TABLE if exists dijabeticar;
     117DROP TABLE if exists doktor;
     118DROP TABLE if exists covek;
     119DROP TABLE if exists nacin_prigotvuvanje_hrana;
     120DROP TABLE if exists tip_insulin;
     121DROP TABLE if exists tip_dijabetes;
     122
     123
     124
     125-- отстранување на шемата
     126
     127drop schema if exists project;
     128 
     129
     130
     131-- креирање на шемата
     132
     133create schema project;
     134
     135-- се поставува патека односно шема во која ќе се извршуваат командите
     136
     137set search_path = project;
     138
     139
     140
     141
     142
     143-- tip_dijabetes definition
     144
     145-- Drop table
     146
     147
     148
     149CREATE TABLE tip_dijabetes (
     150        id serial4 NOT NULL,
     151        ime varchar(256) NOT NULL,
     152        CONSTRAINT "PK_tip_dijabetes_id" PRIMARY KEY (id),
     153        CONSTRAINT "UNQ_Tip_dijabetes_ime" UNIQUE (ime)
     154);
     155
     156-- tip_insulin definition
     157
     158-- Drop table
     159
     160
     161
     162CREATE TABLE tip_insulin (
     163        id serial4 NOT NULL,
     164        ime varchar(256) NOT NULL,
     165        CONSTRAINT "PK_Tip_insulin_id" PRIMARY KEY (id),
     166        CONSTRAINT "UNQ_Tip_insulin_ime" UNIQUE (ime)
     167);
     168
     169-- nacin_prigotvuvanje_hrana definition
     170
     171-- Drop table
     172
     173
     174
     175CREATE TABLE nacin_prigotvuvanje_hrana (
     176        id serial4 NOT NULL,
     177        ime varchar(256) NOT NULL,
     178        CONSTRAINT "PK_Nacin_prigotvuvanje_hrana_id" PRIMARY KEY (id),
     179        CONSTRAINT "UNQ_Nacin_prigotvuvanje_hrana_ime" UNIQUE (ime)
     180);
     181
     182
     183-- Drop table
     184
     185
     186
     187CREATE TABLE covek (
     188        id serial4 NOT NULL,
     189        embg char(13) NOT NULL,
     190        ime varchar(256) NOT NULL,
     191        prezime varchar(256) NOT NULL,
     192        pol bpchar(1) NOT NULL,
     193        datum_na_ragjanje date NOT NULL,
     194       
     195        CONSTRAINT "PK_covek_id" PRIMARY KEY (id),
     196        CONSTRAINT "UNQ_covek_embg" unique(embg),
     197        CONSTRAINT "CHK_covek_pol" CHECK ((pol = ANY (ARRAY['M'::bpchar, 'Z'::bpchar])))
     198);
     199
     200-- doktor definition
     201
     202-- Drop table
     203
     204
     205
     206CREATE TABLE doktor (
     207        id int4 NOT NULL,
     208        CONSTRAINT "PK_doktor_id" PRIMARY KEY (id),
     209        CONSTRAINT "FK_doktor_id" FOREIGN KEY (id) REFERENCES covek(id)
     210);
     211
     212-- dijabeticar definition
     213
     214-- Drop table
     215
     216
     217
     218CREATE TABLE dijabeticar (
     219        id int4 NOT NULL,
     220        data_na_otkrivanje date NOT NULL,
     221        tip_dijabetes_id int4 NOT NULL,
     222        CONSTRAINT "PK_dijabeticar_id" PRIMARY KEY (id),
     223        CONSTRAINT "FK_dijabeticar_id" FOREIGN KEY (id) REFERENCES covek(id),
     224        CONSTRAINT "FK_dijabeticar_tip_dijabetes_id" FOREIGN KEY (tip_dijabetes_id) REFERENCES tip_dijabetes(id)
     225);
     226
     227
     228
     229
     230-- datoteka_metapodatoci definition
     231
     232-- Drop table
     233
     234
     235
     236CREATE TABLE datoteka_metapodatoci (
     237        id serial4 NOT NULL,
     238        ime varchar(400) NOT NULL,
     239        hash varchar(400) NOT NULL,
     240        opis varchar(1000) NOT null default '',
     241        mime varchar(300) NOT NULL,
     242        tip_datoteka bpchar(1) NOT NULL,
     243       
     244        CONSTRAINT "PK_datoteka_metapodatoci_id" PRIMARY KEY (id),
     245        CONSTRAINT "UNQ_datoteka_metapodatoci_hash" UNIQUE (hash),
     246        CONSTRAINT "CHK_datoteka_metapodatoci_tip_datoteka" CHECK ((tip_datoteka = ANY (ARRAY['F'::bpchar, 'Z'::bpchar])))
     247);
     248
     249-- faksimil definition
     250
     251-- Drop table
     252
     253
     254
     255CREATE TABLE faksimil (
     256        id int4 NOT NULL,
     257        doktor_id int4 NOT NULL,
     258        dijabeticar_id int4 NOT NULL,
     259        CONSTRAINT "PK_faksimil_id" PRIMARY KEY (id),
     260        CONSTRAINT "FK_dijabeticar_id" FOREIGN KEY (dijabeticar_id) REFERENCES dijabeticar(id),
     261        CONSTRAINT "FK_doktor_id" FOREIGN KEY (doktor_id) REFERENCES doktor(id),
     262        CONSTRAINT "FK_faksimil_id" FOREIGN KEY (id) REFERENCES datoteka_metapodatoci(id)
     263);
     264
     265-- zdrastven_rezultal definition
     266
     267-- Drop table
     268
     269
     270
     271CREATE TABLE zdrastven_rezultat (
     272        id int4 NOT NULL,
     273        dijabeticar_id int4 NOT NULL,
     274        CONSTRAINT "PK_zdrastven_rezultat_id" PRIMARY KEY (id),
     275        CONSTRAINT "FK_zdrastven_rezultat_dijabeticar_id" FOREIGN KEY (dijabeticar_id) REFERENCES dijabeticar(id),
     276        CONSTRAINT "FK_zdrastven_rezultat_id" FOREIGN KEY (id) REFERENCES datoteka_metapodatoci(id)
     277);
     278
     279-- medikament definition
     280
     281-- Drop table
     282
     283
     284
     285CREATE TABLE medikament (
     286        id serial4 NOT NULL,
     287        ime varchar(256) NOT NULL,
     288        proizvoditel varchar(256) NOT NULL,
     289        tip_medikament bpchar(1) NOT NULL,
     290        CONSTRAINT "CHK_Medikament_tip_medikament" CHECK ((tip_medikament = ANY (ARRAY['L'::bpchar, 'I'::bpchar]))),
     291        CONSTRAINT "PK_Medikament_id" PRIMARY KEY (id),
     292        constraint "UNQ_medikament_ime" unique(ime)
     293);
     294
     295-- lenti_merenje_shekjer definition
     296
     297-- Drop table
     298
     299
     300
     301CREATE TABLE lenti_merenje_shekjer (
     302        id int4 NOT NULL,
     303        CONSTRAINT "PK_Lenti_merenje_shekjer_id" PRIMARY KEY (id),
     304        CONSTRAINT "FK_Lenti_merenje_shekjer_id_Medikament_id" FOREIGN KEY (id) REFERENCES medikament(id)
     305);
     306
     307
     308-- insulin definition
     309
     310-- Drop table
     311
     312
     313
     314CREATE TABLE insulin (
     315        id int4 NOT NULL,
     316        tip_insulin_id int4 NULL,
     317        CONSTRAINT "PK_Insulin_id" PRIMARY KEY (id),
     318        CONSTRAINT "FK_Insulin_id_Medikament_id" FOREIGN KEY (id) REFERENCES medikament(id),
     319        CONSTRAINT "FK_Insulin_tip_insulin_id_Tip_insulin_id" FOREIGN KEY (tip_insulin_id) REFERENCES tip_insulin(id)
     320);
     321
     322-- inventar definition
     323
     324-- Drop table
     325
     326
     327
     328CREATE TABLE inventar (
     329        dijabeticar_id int4 NOT NULL,
     330        medikament_id int4 NOT NULL,
     331        rok_na_traenje date NOT NULL,
     332        kolicina int4 NOT NULL,
     333        CONSTRAINT "PK_inventar_id" PRIMARY KEY (dijabeticar_id, medikament_id, rok_na_traenje),
     334        CONSTRAINT "FK_dijabeticar_id" FOREIGN KEY (dijabeticar_id) REFERENCES dijabeticar(id),
     335        CONSTRAINT "FK_medikament_id" FOREIGN KEY (medikament_id) REFERENCES medikament(id)
     336);
     337
     338-- zapis definition
     339
     340-- Drop table
     341
     342
     343
     344CREATE TABLE zapis (
     345        dijabeticar_id int4 NOT NULL,
     346        "data" date NOT NULL,
     347        CONSTRAINT "PK_zapis_id" PRIMARY KEY (dijabeticar_id, data),
     348        CONSTRAINT "FK_zapis_id" FOREIGN KEY (dijabeticar_id) REFERENCES dijabeticar(id)
     349);
     350
     351-- zapis_insulin definition
     352
     353-- Drop table
     354
     355
     356
     357CREATE TABLE zapis_insulin (
     358        dijabeticar_id int4 NOT NULL,
     359        "data" date NOT NULL,
     360        CONSTRAINT "PK_zapis_insulin_id" PRIMARY KEY (dijabeticar_id, data),
     361        CONSTRAINT "FK_zapis_insulin_id" FOREIGN KEY (dijabeticar_id,"data") REFERENCES zapis(dijabeticar_id,"data")
     362);
     363
     364-- zapis_insulin_doziran_insulin definition
     365
     366-- Drop table
     367
     368
     369
     370CREATE TABLE zapis_insulin_doziran_insulin (
     371        dijabeticar_id int4 NOT NULL,
     372        "data" date NOT NULL,
     373        insulin_id int4 NOT NULL,
     374        kolicina int4 NOT NULL,
     375        CONSTRAINT "PK_zapis_insulin_doziran_insulin" PRIMARY KEY (dijabeticar_id, data, insulin_id),
     376        CONSTRAINT "FK_zapis_insulin_doziran_insulin" FOREIGN KEY (dijabeticar_id,"data") REFERENCES zapis_insulin(dijabeticar_id,"data"),
     377        CONSTRAINT "FK_zapis_insulin_doziran_insulin_id" FOREIGN KEY (insulin_id) REFERENCES insulin(id)
     378);
     379
     380-- zapis_so_izmeren_sekjer definition
     381
     382-- Drop table
     383
     384
     385
     386CREATE TABLE zapis_so_izmeren_sekjer (
     387        dijabeticar_id int not null,
     388        data date not null,
     389        vrednost decimal(4,1) not null,
     390       
     391        constraint "PK_zapis_so_izmeren_sekjer_id" primary key(dijabeticar_id, data),
     392        constraint "FK_zapis_so_izmeren_sekjer_id" foreign key(dijabeticar_id, data) references zapis(dijabeticar_id, data)
     393);
     394
     395
     396-- zapis_hrana definition
     397
     398-- Drop table
     399
     400
     401
     402CREATE TABLE zapis_hrana (
     403        dijabeticar_id int not null,
     404        data date not null,
     405       
     406        constraint "PK_zapis_hrana_id" primary key(dijabeticar_id, data),
     407        constraint "FK_zapis_hrana_id" foreign key(dijabeticar_id, data) references zapis(dijabeticar_id, data)
     408);
     409-- hrana definition
     410
     411-- Drop table
     412
     413
     414
     415
     416
     417CREATE TABLE hrana (
     418        id serial not null,
     419        ime varchar(500) not null,
     420        proizvoditel varchar(1000) not null default '',
     421        glikemiski_indeks int not null check (glikemiski_indeks>=0 and glikemiski_indeks<=100),
     422        proteini decimal(3,1) not null check (proteini>=0 and proteini<=100),
     423        shekjeri decimal(3,1) not null check (shekjeri>=0 and shekjeri<=100),
     424        masti decimal(3,1) not null check (masti>=0 and masti<=100),
     425        jaglehidrati decimal(3,1) not null check (jaglehidrati>=0 and jaglehidrati<=100),
     426        kalorii int not null check (kalorii>=0),
     427        nacin_prigotvuvanje_hrana_id int not null,
     428       
     429        constraint "PK_hrana_id" primary key(id),
     430        constraint "FK_hrana_nacin_prigotvuvanje_hrana_id" foreign key(nacin_prigotvuvanje_hrana_id) references nacin_prigotvuvanje_hrana(id),
     431        constraint "CHK_hrana_shekejeri" check (shekjeri <= jaglehidrati),
     432        CONSTRAINT "CHK_hrana_proteini_jaglehidrati_masti" check(proteini+jaglehidrati+masti > 0 AND proteini+jaglehidrati+masti <= 100)
     433);
     434
     435
     436-- obrok definition
     437
     438-- Drop table
     439
     440
     441
     442CREATE TABLE obrok (
     443        dijabeticar_id int not null,
     444        data date not null,
     445        hrana_id int not null,
     446        kolicina int not null check (kolicina>0),
     447       
     448        constraint "PK_obrok_id" primary key(dijabeticar_id, data, hrana_id),
     449        constraint "FK_obrok_dijabeticar" foreign key(dijabeticar_id, data) references zapis_hrana(dijabeticar_id, data),
     450        constraint "FK_obrok_hrana_id" foreign key(hrana_id) references hrana(id)
     451);
     452
     453-- DISJOINT CHECK CONSTRAINT ZA DATOTEKA_METAPODATOCI
     454
     455create function fn_validiraj_medikament_disjoint(
     456        p_id int,
     457        p_tip_medikament char
     458)
     459returns boolean
     460language sql
     461        returns null on null input
     462        as
     463        $$
     464        select coalesce ((select 1 from medikament m where m.id = p_id and tip_medikament  = p_tip_medikament), 0) = 1;
     465        $$;
     466
     467alter table lenti_merenje_shekjer add constraint "CHK_Validiraj_kreiran_prethoden_zapis_vo_medikament_lenti_merenje_shekjer"
     468check (fn_validiraj_medikament_disjoint(lenti_merenje_shekjer.id, 'L'));
     469
     470alter table insulin add constraint "CHK_Validiraj_kreiran_prethoden_zapis_vo_medikament_insulin"
     471check (fn_validiraj_medikament_disjoint(insulin.id, 'I'));
     472
     473
     474-- DISJOINT CHECK CONSTRAINT ZA DATOTEKA_METAPODATOCI
     475
     476create function fn_Validiraj_datoteka_metapodatoci_disjoint(
     477        p_faksimil_id int
     478        , p_tip_datoteka char
     479)
     480returns int
     481as
     482$$
     483        select coalesce (
     484                (select 1
     485                from datoteka_metapodatoci
     486                where id = p_faksimil_id and tip_datoteka = p_tip_datoteka
     487                ), 0
     488        )
     489$$
     490language sql
     491RETURNS NULL ON NULL INPUT;
     492
     493alter table faksimil add constraint "CHK_Validiraj_kreiran_prethoden_zapis_vo_datoteka_metapodatoci_faksimil" check(fn_Validiraj_datoteka_metapodatoci_disjoint(id, 'F')=1);
     494alter table zdrastven_rezultat add constraint "CHK_Validiraj_kreiran_prethoden_zapis_vo_datoteka_metapodatoci_za_zdravstven_rezultat" check(fn_Validiraj_datoteka_metapodatoci_disjoint(id, 'Z')=1);
     495
     496
     497
     498
     499
    98500== DML скрипта за полнење на табелите со податоци
     501
     502insert into tip_dijabetes(ime)
     503values
     504('tip 1')
     505, ('tip 2');
     506
     507insert into tip_insulin(ime)
     508values
     509('RAPID')
     510, ('BASAL');
     511
     512insert into nacin_prigotvuvanje_hrana (ime)
     513values
     514('svezho')
     515, ('zamrznato')
     516, ('pecheno')
     517, ('vareno')
     518, ('dinstano')
     519, ('przheno')
     520, ('konzenvirano');
     521
     522insert into covek(embg, ime, prezime, pol, datum_na_ragjanje)
     523values
     524('0101994000000', 'Kristijan', 'Ristovski', 'M', '1994-01-01')
     525, ('0911996123456', 'Nikola', 'Torbovski', 'M', '1996-11-09')
     526, ('1809004111111', 'Marija', 'Trajkovska', 'Z', '2004-04-18')
     527, ('110200299999', 'Luka', 'Markovski', 'M', '2002-02-11')
     528, ('0606999546872', 'Marionka', 'Japonka', 'Z', '1999-06-06')
     529, ('1708021333333', 'Nina', 'Jadrovska', 'Z', '2021-08-17');
     530
     531insert into dijabeticar (id, data_na_otkrivanje, tip_dijabetes_id)
     532values
     533(2, '1996-11-09', 1)
     534, (3, '2010-01-15', 2)
     535, (6, '2022-09-01', 1);
     536
     537insert into doktor (id)
     538values(1)
     539, (4)
     540, (5);
     541
     542insert into datoteka_metapodatoci (ime, hash, opis, mime, tip_datoteka)
     543values
     544('zdravstven_rezultat_01_02_2023.pdf', '30e9b774c4691c38f0e3251545d1e238', '', 'application/pdf', 'Z')
     545, ('faksimil_09_08_2021.pdf', 'f75be9d5c7ee578aeec5fef7005f78a3', '', 'application/pdf', 'F')
     546, ('faksimil_19_09_2020.pdf', 'a96ef978bcd93a0813000886b09d99b5', 'Faksimil izdaden na 19-09-2020', 'application/pdf', 'F')
     547, ('zdravstven_rezultat_08_07_2022.pdf', '86e014467d5d5a21645bc17fb4bf328a', 'Opis za zdravstven rezultat...', 'application/pdf', 'Z')
     548, ('faksimil_07_12_2005.pdf', '0ef75e84f52a9793326dbf3f36fec367', '', 'application/pdf', 'F')
     549, ('zdravstven_rez_07_01_2001.pdf', '3e7a11c3f47cf8cc55fcf5e7f5bce614', ':)', 'application/pdf', 'Z');
     550
     551insert into zdrastven_rezultat (id, dijabeticar_id)
     552values
     553(1, 2)
     554, (4, 3)
     555, (6, 6);
     556
     557insert into faksimil  (id, doktor_id, dijabeticar_id)
     558values
     559(2, 4, 2)
     560, (3, 4, 2)
     561, (5, 5, 6);
     562
     563insert into medikament (ime, proizvoditel, tip_medikament)
     564values
     565('Lantus', 'Sanofi Aventis', 'I')
     566, ('Apidra', 'Sanofi Aventis', 'I')
     567, ('Novo Rapid', 'Novo Nordisk', 'I')
     568, ('Tyson Bio AC200', 'Tyson Bioresearch', 'L')
     569, ('Accu-Chek Active', 'Roche Diabetes Care', 'L')
     570, ('OneTouch Ultra', 'Lifescan Medical Devices', 'L');
     571
     572
     573insert into lenti_merenje_shekjer (id)
     574values
     575(4)
     576, (5)
     577, (6);
     578
     579insert into insulin (id, tip_insulin_id)
     580values
     581(1, 2)
     582, (2, 1)
     583, (3, 1);
     584
     585
     586insert into inventar (dijabeticar_id, medikament_id, rok_na_traenje, kolicina)
     587values
     588(2, 1, '2023-05-18', 5)
     589, (2, 1, '2025-09-17', 4)
     590, (2, 3, '2022-10-18', 1)
     591, (3, 5, '2024-12-12', 7)
     592, (6, 6, '2023-01-19', 13)
     593, (6, 6, '2023-05-06', 3);
     594
     595insert into hrana (ime, proizvoditel, glikemiski_indeks, proteini, jaglehidrati, shekjeri, masti, kalorii, nacin_prigotvuvanje_hrana_id)
     596values
     597('leb na zar', 'stara furna', 20, 8, 60, 1.3, 1, 300, 3)
     598, ('leb', 'furna dime', 20, 9, 40, 1, 2, 312, 3)
     599, ('oriz', 'kamko', 13, 10, 55, 7, 8, 201, 4)
     600, ('makaroni', 'divela', 7, 11, 51, 8, 3, 135, 3)
     601, ('tuna', 'blue sea', 1, 22, 13, 2, 18, 400, 7)
     602, ('kulen', 'zlatibor', 9, 21, 15, 3, 31, 350, 1);
     603
     604-- 2 3 6
     605-- '1996-11-09' '2010-01-15' '2022-09-01'
     606
     607insert into zapis (dijabeticar_id, "data")
     608values
     609(2, '1999-02-08')
     610, (2, '2000-01-01')
     611, (2, '2001-08-09')
     612, (3, '2010-05-09')
     613, (3, '2010-09-09')
     614, (3, '2012-10-10')
     615, (6, '2022-10-01')
     616, (6, '2022-11-10')
     617, (6, '2022-12-30');
     618
     619insert into zapis_so_izmeren_sekjer (dijabeticar_id, "data", vrednost)
     620values
     621(2, '1999-02-08', 11.5)
     622,(2, '2000-01-01', 9.8)
     623, (2, '2001-08-09', 3.1)
     624, (3, '2010-09-09', 8.1)
     625, (3, '2012-10-10', 2.3)
     626, (6, '2022-11-10', 7.9);
     627
     628insert into zapis_insulin (dijabeticar_id, "data")
     629values
     630(2, '1999-02-08')
     631, (2, '2000-01-01')
     632, (2, '2001-08-09')
     633, (3, '2010-09-09')
     634, (6, '2022-10-01')
     635, (6, '2022-12-30');
     636
     637insert into zapis_insulin_doziran_insulin (dijabeticar_id, "data", insulin_id, kolicina)
     638values
     639(2, '1999-02-08', 1, 15)
     640, (2, '2000-01-01', 1, 7)
     641, (2, '2001-08-09', 2, 1)
     642, (3, '2010-09-09', 3, 10)
     643, (6, '2022-10-01', 2, 9)
     644, (6, '2022-12-30', 2, 6);
     645
     646insert into zapis_hrana (dijabeticar_id, "data")
     647values
     648(2, '1999-02-08')
     649, (2, '2001-08-09')
     650, (3, '2010-09-09')
     651, (6, '2022-10-01')
     652, (6, '2022-12-30');
     653
     654insert into obrok (dijabeticar_id, "data", hrana_id, kolicina)
     655values
     656(2, '1999-02-08', 1, 100)
     657, (2, '1999-02-08', 6, 20)
     658, (2, '1999-02-08', 2, 16)
     659, (2, '2001-08-09', 2, 35)
     660, (3, '2010-09-09', 4, 125)
     661, (3, '2010-09-09', 5, 111)
     662, (6, '2022-10-01', 1, 37)
     663, (6, '2022-10-01', 5, 86)
     664, (6, '2022-12-30', 5, 97)
     665, (6, '2022-12-30', 1, 172);
     666
     667
     668
    99669== Релациски дијаграм изваден од DBeaver
    100670[[Image(schema.png)]]