Dacă o chitanţă poate plăti mai multe rate (cu condiţia ca toate ratele să aparţină de acelaşi contract), iar o rată poate să fie plătită parţial printr-o chitanţă şi parţial prin alta, atunci înseamnă că ai o relaţie many-to-many între tabelele CHITANTE şi RATE, care poate fi reprezentată astfel:
CREATE TABLE CHITANTE (
NR_CHITANTA INT PRIMARY KEY,
ID_CONTRACT INT NOT NULL REFERENCES CONTRACTE,
SUMA_INCASATA MONEY NOT NULL,
--UNIQUE (NR_CHITANTA, ID_CONTRACT)
)
CREATE TABLE PLATI_RATE (
NR_CHITANTA INT NOT NULL REFERENCES CHITANTE,
ID_CONTRACT INT NOT NULL REFERENCES CONTRACTE,
-- FOREIGN KEY (NR_CHITANTA, ID_CONTRACT) REFERENCES CHITANTE (NR_CHITANTA, ID_CONTRACT),
ID_RATA INT NOT NULL,
FOREIGN KEY (ID_CONTRACT, NR_RATA) REFERENCES RATE (ID_CONTRACT, NR_RATA)
VALOARE_ASOCIATA MONEY NOT NULL
)
Totuşi, mi se pare puţin ciudat faptul că ai pus coloanele dobândă şi penalizare în tabela RATE. După părerea mea, acolo ar trebui să fie doar valoarea ratei, iar dobânzile şi penalizările (fiind variabile, în funcţie de data curentă) ar trebui să fie calculate printr-un view sau o funcţie, nu stocate alături de datele introduse de utilizator.
Răzvan