Zapytania do bazy faktów
Zapytania do BF2
Zasadniczo nie nalezy odpytywać bezpośrednio tabel bazy faktów, jak równiez ich modyfikować.
W celu dodawania/usuwania i modyfikacji poszczególnych faktów naly posłyć się funkcją: bf.Operate
W celu wyszukiwania danych pacjenta stosujemy funkcje: public.getfacts_...zależnie o jaki zakres danych nam chodzi.
W celu globalnego przeszukiwania odpytujemy View facts .
Funkcje: av, avs, avf pozwalają na pobranie wartości wskazanego atrybutu.
Przykład - lista idx_faktu i nazwa usługi z wszystkich faktów o kategorii 'USLUGA':
select f.idx_faktu, av(f, 'nazwa') as nazwa_uslugi from facts f where f.nazwa = 'USLUGA'; Dziedziczenie
Powyższy przykład pokazuje szukanie faktów konkretnej kategorii.
Aby wyszukiwać fakty pacjenta z danej kategorii i potomnych w relacji IS - czy nie pytać o fakty kategorii WIZBAD, ale o wszystkie fakty, które są kategorii WIZBAD - czyli dokładnie tej kategorii oraz wszystkich, które z niej dziedziczą - stosujemy następującą konstrukcję:
select * from getfacts_pac(27) f where f.idx_kategorii = any ((select inh_tree('wizbad'))::integer[]) -- Poprawna konstrukcja
Uwaga: teoretycznie można by zapytać:
select * from getfacts_pac(27) f where f.idx_kategorii = any (inh_tree('wizbad')) ---- Błędna konstrukcja !!!!!!!!!!!!!!!!!!!!!!!!!
Okazuje się jednak, że takie zapytanie jest skrajnie gorzej zaoptymalizowane. Czyli kluczowe jest stosowanie podzapytania.
Analogicznie teraz wszystkie fakty kategorii 'WIZBAD i potomnych:
select * from facts f where f.idx_kategorii = any (inh_tree('wizbad'))