[IB/FB] Struktura bazy, złączenia do procek.

0

Witam mam pytanko. W uproszczeniu określę to tak, jest tabelka KOMUNIKATY, każdy komunikat ma swoich adresatów (ADRESACI). W tabeli adresaci jeden wpis oznacza albo że jest to konkretny adresat (TYPADRESATA=0), albo że jest to grupa adresatów (TYPADRESATA=1) i wtedy zamiast ID operatora jest ID grupy operatorow. Może być tak, że ten sam operator jest w kilku grupach, i dodatkowo dla danego komunikatu może być też dodany "luzem" - jako bezpośredni adresat. Po dodaniu rekordu do tabeli KOMUNIKATY i dodaniu rekordów do tabeli ADRESACI muszę coś zrobić, dla wszystkich rzeczywistych adresatów komunikatu - potrzebuję listy (bez powtórzeń) adresatów danego komunikatu, nie jest to problem. Dla bezpośrednich adresatów mam:

SELECT IDADRESATA FROM ADRESACI WHERE IDKOMUNIKATU=... AND TYPADRESATA=0

Dla grup mam

SELECT P.POZYCJA FROM
ADRESACI A
JOIN GRUPY_NAGL G ON G.IDGRUPY=A.IDADRESATA AND A.TYPADRESATA=1
JOIN GRUPY_POZ P ON P.IDGRUPY=G.IDGRUPY
WHERE A.IDKOMUNIKATU=...

oba zapytanka łączę UNION'em i mam to co chciałem, czyli reasumując struktura wygląda tak:

KOMUNIKATY
|
| |
ADRESACI -< GRUPY_NAGL -< GRUPY_POZ - OPERATORZY
|
OPERATORZY

Tylko teraz chce sobie zrobić coś takiego, że jak mam listę komunikatów, to chce dać checkbox'a "wyświetlaj tylko komunikaty dla mnie" - potrzebuje informacji czy dany komunikat jest dla mnie czy nie.

Myślałem żeby zrobić to tak, że zrobię prockę (wyboru) która mi zwróci unikalną listę operatorów dla komunikatu, do tej procki się z JOIN'uje po IDKOMUNIKATU i IDOPERATORA=MOJ_ID i już. Prockę zrobiłem (z tym UNION'em) i jest OK ... ale co z indeksami ? Na procce wiadomo indeksu nie założę, myślałem o widoku zamiast procce (ale coś z UNION'em się nie chciał tworzyć). Czy generalnie można założyć że jak są tabelki poindeksowane odpowiednio (te które tworzą zapytanie w procce) to powinno to działać tak jak trzeba ? Z tego co widze na innym podobnym przykładzie, to JOIN do procedurki a konkretnie LEFT JOIN, dziala tragicznie wolno, wnioskuję, że procka wywołuje się dla każdego
rekordu :(
Nie wiem czy się wyraziłem jasno. Chodzi mi o to, że jak się złączam do tej procki po IDKOMUNIKATU, to jak by to była tabelka a nie procka to powinien po tym polu być index - a wiadomo na procce nie ma. A może przedstawiona struktura tabel jest do d... ? Ma ktoś jakiś pomysł ?

Pozdrawiam

0

a nie możesz dodać dwa parametry do procedury IDKOMUNIKATU i IDOPERATORA i joinować wewnątrz niej?

0
johny5 napisał(a)

a nie możesz dodać dwa parametry do procedury IDKOMUNIKATU i IDOPERATORA i joinować wewnątrz niej?

Hmm, ciekawy pomysł sprubuje, może pomoże.
Dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1