Podręcznik administratora

Zapytania do bazy faktów

Wstęp:

System został wyposażony w mechanizm pozwalający na łatwo tworzenie zapytań do bazy faktów w języku zbliżonych do języka SQL.

Zapytanie jest konwertowane przez system do czystego języka SQL i następnie wykonywane na bazie.

Struktura zapytania jest zbliżona do polecenia SELECT języka SQL. Wprowadzono jednak następujące ułatwienia:

1. Dostęp do faktów uzyskuje się poprzez zapis:

       #Nazwa_kategorii(alias)

     gdzie:

        Nazwa_kategorii oznacza kategorię faktu identyfikowana jako jej nazwa

        alias oznacza alias do faktu, poprzez który należy się odwoływać do faktu w dalszej części zapytania.

      Opisane odwołanie do faktu może się znajdować w dowolnym miejscu zapyyania, jednak powiąznie to dla jednego aliasu powinno wystąpić tylko raz.

2. Dostęp do atrybutów uzyskuje się poprzez konstrukcję:

                Fakt@nazwa_atrybutu

     gdzie:

            Fakt oznacza odwołanie do faktu opsane w pkt. 1 - czyli alias, lub pełną definicję faktu.

            Nazwa_atrybutu - oznacza pełna nazwę atrybutu. Jeśli nazwa zawiera nietypowe znaki, wówczas nazwę można zawszeż w znakach cudzysłowu   (").

3. Jeśli fakty zostana zdefiniowane np. na liście pól po słowie SELECT wówczas dopuszczalne jest pominięcie sekcji FROM zapytania.

4. Relacje między faktami można określic w sposób jawny, lub niejawny.

    Jawne wskazanie polega na wpisaniu  w sekcji WHERE poleceń:

         Fakt1  is_part_of  Fakt2      lub

         Fakt2  is_atribut_of  Fakt2   

    Wpis ten spowoduje dodanie warunków określających wprost powiązanie między podanymi instancjami faktów.

    Zamiast podawać definicję wprost, mozna sie posłużyć klauzulą AutoRel która wprowadzi automatycznie odpowiednie relację między instancjami na podstawie definicji powiazań między kategoriami.

5. Jeśli analizujemy kilka faktów, w celu uzyskania sensownych wyników zwykle należy dodać warunki opisujące, czy fakty maja dotyczyć tego samego pacjenta, czy pobytu, badania, czy usługi. W celu automatyzacji tego procesu dodano odpowidnio klauzule:

    SamePat                    - gdy dotyczą tego samego pacjenta
    SameHosp                 - gdy dotyczą tego samego pobytu
    SameExam                - gdy dotyczą tego samego badania
    SameService             - gdy dotyczą tej samej usługi

6. Należy pamiętać, że poza opisanymi uwagami, tworzone zapytanie jest normalnym zapytaniem SQL, więc w jego ramach można dokonywać powiązań z innymi tabelami. Przykładowe zapytania:

Załóżmy, że zdefiniowano 3 kategorie RR, SYST i DISAT zonaczające ciśnienie (RR) z atrybutem czas_pomiaru oraz wartości ciśnenia skurczowego (SYST) oraz rozkurczowego DIAST z atrybutami Wartosc każdy. Kategorie SYST i DIAST są w relacji Part_of w stosunku do RR.

select
   #rr(r)@czas_pomiaru,
   #diast(d)@wartosc

where
     r.czas_utworzenia > '20000101'
     and SamePat           
     and d is_part_of r
order by r@czas_pomiaru

Powyższe zapytanie zwraca czas pomiaru oraz wartość ciśnienia rozkurczowego pacjenta dla wpisów do bazy faktów dokonanych po 1.1.2000.

select
   #rr(r)@czas_pomiaru,
   #diast(d)@wartosc

where
     r.czas_utworzenia > '20000101'
     and SamePat
     and AutoRel                 
order by r@czas_pomiaru

Zapytanie analogiczne, ale automatycznie tworzy powiązania relacji.

select
   #rr(r)@czas_pomiaru,
   #diast(d)@wartosc, 
   #syst(s)@wartosc
 
where
     r.czas_utworzenia > '20000101'
     and SamePat
     and AutoRel                 
order by r@czas_pomiaru

Zapytanie analogiczne, ale dodatkwo odpytuje również od ciśnienie rozkurczowe.

select
   ew.nazwisko,
   ew.imie,
   #rr(r)@czas_pomiaru,
   #diast(d)@wartosc, 
   #syst(s)@wartosc

from
    ewidencja ew                                
 
where
     r.czas_utworzenia > '20000101'
     and SamePat
     and AutoRel
     and r.idx_osoby = ew.idx_osoby                                                                     
order by r@czas_pomiaru

Przykład równoczesnego stosowania danych z bazy faktów i innych tabel - swracam uwagę na sposób wiązania.

select
   ew.nazwisko,
   ew.imie,
   r@czas_pomiaru,
   d@wartosc,
   s@wartosc

from
    ewidencja ew,
    #rr(r),
    #diast(d),
    #syst(s)

where
     r.czas_utworzenia > '20000101'
     and SamePat
     and AutoRel
     and r.idx_osoby = ew.idx_osoby
order by r@czas_pomiaru

To samo, ale z jawnym definiowaniem faktów w sekcji FROM.