Napravi si tablicu kako je dana niže i onda učitaj zapise koje trebaš i algoritamski izračunaj sve što ti treba. Tablice će ti imati malu količinu podataka, kod za ažuriranje podataka i provjeru korisničkog unosa će biti jednostavan (uoči da ti se ne može dogoditi da za neki dan nemaš definiranu cijenu), upis će biti jednostavan. A izračune slobodno vrši u kodu, jer imaš malo podataka - čak i da imaš cijeli hotel, to je još uvijek malo podataka. Ako treba, lako se iz te tablice generira privremena tablica s raspisom po danima (ne bi trebalo, sve se može riješiti SQL-om ili u najgorem slučaju DDL-om, ali ipak).
CREATE TABLE ROOM_PRICE -- RMPR
(
-- Broj sobe, npr. 101, 203 i sl.
--
RMPR_ROOM_NO INTEGER NOT NULL
-- Datum od kada važi cijena. Cijena važi od ovog datuma pa do dana
-- prije slijedećeg većeg datuma za koji postoji zapis.
--
, RMPR_DATE DATE NOT NULL
-- Cijena. NULL-upis označava početak perioda u kojem se soba ne iznajmljuje.
--
, RMPR_PRICE DECIMAL(5,2)
-- Primarni ključ. Onemogućuje da ista soba ima dvije cijene s istim
-- datumom.
--
, CONSTRAINT RMPR_PK
PRIMARY KEY
(
RMPR_ROOM_NO
, RMPR_DATE
)
);
--
-- Soba 101 se od 1. do 6. 8. iznajmljuje za 50 eura, od 7. 8. do 13. 8. za
-- 60 eura, s time da su 8. 8. i 9. 8. iznimnmo 65 eura je taj dan tradicionalna
-- seoska fešta. Od 14. 8. do 20. 8. je cijena 65 eura, od 21. 8. do 27. 8. je
-- 75 eura, a nakon toga je na dalje 70 eura. Od 1. 10. se soba više ne
-- iznajmljuje.
--
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-01', 50 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-07', 60 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-08', 65 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-10', 60 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-14', 65 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-21', 75 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-08-28', 70 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-10-01', NULL );
--
-- Soba 102 se od 1. do 6. 8. iznajmljuje za 30 eura, od 7. 8. do 13. 8. se
-- vrši zamjena parketa, pa se ne iznajmljuje, od 14. 8. do 20. 8. je cijena 65
-- eura, od 21. 8. 75 eura. Od 1. 10 se više ne iznajmljuje.
--
INSERT INTO ROOM_PRICE VALUES( 102, '2013-08-01', 30 );
INSERT INTO ROOM_PRICE VALUES( 102, '2013-08-07', NULL );
INSERT INTO ROOM_PRICE VALUES( 102, '2013-08-14', 65 );
INSERT INTO ROOM_PRICE VALUES( 102, '2013-08-21', 75 );
INSERT INTO ROOM_PRICE VALUES( 101, '2013-10-01', NULL );