[ mika @ 14.09.2007. 10:04 ] @
Pozdrav svima,

Imam jedan problemčić koji bih hteo da podelim sa vama. Najpre, da predstavim test tabelu:

Code:

tblOffers:
---------

+------------------------------+----------------+ ...
| idOffer(int) | idClient(int) | isLocked(bool) |
+------------------------------+----------------+ ...
|            1 |             1 |              0 |
|            2 |             1 |              1 |
|            3 |             2 |              0 |
|            4 |             2 |              1 |
|            5 |             2 |              1 |
|            6 |             2 |              1 |
.              .               .                .
.              .               .                .
.              .               .                .


Dakle, bitne kolone u tabeli su prikazane, ostatak je nebitan.

Tabela prikazuje ponude koje su poslate klijentima; idOffer je primarni ključ, idClient je strani ključ, isLocked pokazuje da li je ponuda "zaključana" ili ne. Dakle, veza tabele "tblClients" prema tabeli "tblOffers je "jedan-prema-više".

Business logika je sledeća: svaki klijent može da ima neograničeno mnogo ponuda, ali samo jednu otključanu. Dakle, može biti samo jedna otključana, aktivna ponuda po klijentu.

Zanima me sledeće:: kako postaviti pravilo u tabeli Offers (da li koristiti indekse ili trigere ili "ON INSERT" pravilo) tako da se ovakva business logika omogući? Dakle, kada bih sad u gornju, prikazanu tabelu hteo da ubacim slog sa vrednostima (7,2,0), da mi sistem onemogući da ubacim takav slog, jer već postoji jedan takav slog po klijentu. Kako najefikasnije ovo rešiti?

Moja ideja je bila da ubacim neki trigger koji bi pre INSERT-a proveravao da li je gornja business logika zadovoljena (tj. da li korisnik pokušava da ubaci "nezaključani" slog u tabelu, a već postoji nezaključani slog za tog klijenta) i u tom slučaju da se sistem "pobuni". Nisam koristio do sada triggere pa bi mi u tom smislu svaka smernica bila značajna. Ako neko ima mišljenje da se to reši na drugi način, neka napiše.

Pozdrav, unapred hvala!