Dostęp poprzez funkcje bazodanowe
Funcje bazodanowe umożliwiające dostęp do bazy faktów :
bf.add (akategoria varchar, azrodlo varchar, aidx_osoby integer, aidx_pobytu integer, aidx_badania integer, aidx_uslugi integer) RETURNS bigint
Funkcja wstawia nowy fakt (bez atrybutów).
Jeśli podajemy idx_uslugi, lub idx_badania, lub idx_pobytu to nie ptrzeba podawać idx_osoby
Zwraca utworzony idx_faktu
bf.addatr (aidx_faktu bigint, aatrybut varchar [], avalue text []) RETURNS bigint
Funcja zapisuje wartości podanych atrybutów do faktu aidx_faktu.
Jeśli zamast nazwy atrybutu wpiszemy pusty ciąg, wówczas wartośc zostanie zapisana do atrybutu o lp=1.
Zwraca idx_faktu do ktorego dokonano zapisu;
NULL, jeśli nie odnaleziono faktu, lub żadnego ze wskazanych atrybutów
Atrybuty podajemy jako
varchar, ale są one konwertowane do odpowiedniego typu danych określonego w def.
atrybutu.
Datę i timestamp można
podawać zarówno w dormacie yyyy-mm-dd, jak i dd-mm-yyyy (decyduje pozycja
-).
Liczby ułamkowe można
podawać z . jak i , jako separatorem dziesiętnym
"bf"."addrel"
(aidx_faktu bigint, aidx_faktu2 bigint, aid_relacji "pg_catalog"."char", apoziom
integer)
Funkcja dodaje relację pomiędzy faktami.
Jeśli nie podamy rodzaju, to podawany jest PartOf;
Jeśli
nie podamy poziomu, to wpisywany jest 1.
Jeśli ustnieje juz analogiczna relacja podanego rodzaju, to jest nadpisywana
"bf"."getsql" (akategoria varchar, aatrybut varchar [], awarunek varchar []) returns text
Funkcja pomocnicza - buduje część SQLa odpytającego o wartości atrybutów
Jako argumenty przyjmuje kategorię, listę atrybutów i listę warunków do spełnienia przez te atrybuty
"bf"."getpac" (aidx_osoby integer, akategoria varchar, aatrybut varchar [], awarunek varchar []) RETURNS SETOF bigint
Funkcja zwraca wszytskie fakty pacjenta aidx_osoby o podanej kategorii akategoria spełniające podane kryteria awarunek dla podanych atrybutów aatrybut.
Wpisy są sortowane DESCENDENS wg daty utworzenia wpisu w tabeli faktów - stąd jako pierwszy jest zwracany najpóźniejszy wpis
"bf"."getpob" (aidx_pobytu integer, akategoria varchar, aatrybut varchar [], awarunek varchar []) RETURNS SETOF bigint
"bf"."getbad" (aidx_badania integer, akategoria varchar, aatrybut varchar [], awarunek varchar []) RETURNS SETOF bigint
"bf"."getusl" (aidx_uslugi integer, akategoria varchar, aatrybut varchar [], awarunek varchar []) RETURNS SETOF bigint
Powyższe funkcje są analogiczne do "bf"."getpac", dotyczą jednak odpowiednio faktów z pobytu, badania i pojedynczej usługi
Przykładowe wywołania:
Dodaję do pacjenta i idx_osoby = 1 fakt kategorii RR - źródło 'Jakieś'. W wyniku dostaje identyfikator faktu.
select "bf"."add" ('RR', 'Jakieś', 1, null, null, null);
Dodaję do faktu o numerze 1 atrybuty: domyślny (''), 'DIA' i 'Kolor' o warotściach odpowiednio: 234,55 i 5
select "bf"."addatr" (1, Array['','DIA','Kolor'], Array[234,55,5]::varchar[]);
Dodaję do pacjenta i idx_osoby = 1 fakt kategorii RR - źródło 'Jakieś' i równocześnie nadaję wartości atrybytom: domyślny (''), 'DIA' i 'Kolor' warotściach odpowiednio: 234,55 i 5
select "bf"."addatr" (("bf"."add" ('RR', 'Jakieś', 1, null, null, null)), Array['','DIA','Kolor'], Array[234,55,5]::varchar[]);
Odczytuję wartość domyslnego atrybutu faktu o idx=1:
select "bf"."getatr" (1, '');
Szukam wszystkich faktów pacjenta nr 1 w kategorii RR, dla których atrybut DIA <70 i atribut domyślny (czyli SYS) >120:
select a from bf.getpac(1, 'RR', ARRAY['DIA', ''], ARRAY['<70', '>120']) a;
Szukam wartości atrybutu DIA dla wszystkich faktów pacjenta nr 1 w kategorii RR, dla których atrybut DIA <70 i atrybut domyślny >120:
select bf.getatr(a,
'DIA') from bf.getpac(1, 'RR', ARRAY['DIA', ''], ARRAY['<70', '>120'])
a;
TERAZ INNA DEFINICJA FAKTÓW:
Kategorie: RR z atrybutem: „czas pomiaru” oraz SYST i DIAST z atrybutami: „Warość”.
Kategorie SYST i DIAST są
powiązane relacją PartOf z RR
Wstawiam fakt RR z jednym atrybutem (domyślnym): czas pomiaru
oraz łaczę je relacja PartOf z "dziećmi" - wartościami pomiarów
irr := Doc.BfAdd('Dok', 'RR', [''], ['20-03-2009 15:37']);
Doc.BfRel(Doc.BfAdd('Dok', 'SYST', [''], [150]), irr);
Doc.BfRel(Doc.BfAdd('Dok', 'DIAST', [''], [80]), irr);