Temporal DB in mysql
Jeg har fået en opgave hvor jeg skal lave en temporal DB i mysqlopgaven lyder således:
Antag at vi tidsstempler rækker med tidsperioder ved hjælp af en start- og en slutattribut "v-start" og "v-end" for gyldigtid (valid time). Vælg selv om I vil anvende fx lukkede-lukkede eller lukkede-åbne perioder.
For hvert af nedenstående punkter skal der laves kode og gives en forståelig beskrivelse af koden. Desuden er kommentarer til løsningen og overvejelser om alternativer velkomne. Man kan bruge MySQL, MariaDB, DB2 eller Oracle (som man selv skal downloade og installere). Opgaven skal afleveres som en .txt fil. Fristen står på kursus-siden.
1. Antag en miniverden hvor videofilm udlejes til kunder. Definer og indsæt 5-10 meningsfyldte rækker i en tabel "movies" som har attributter der registrerer filmens navn og prisen for at leje filmen pr. dag. Prisen for en film varierer over tid. Definer og indsæt også 5-10 rækker i en tabel "rentals" som registrerer, hvornår kunder lejer film. Begge tabeller er med gyldigtid. Koden nedenfor skal fungere generelt og ikke kun for de indsatte rækker.
I de følgende fire punkter skal der laves SQL-kode.
2. Navnet på en film i movies er en temporal nøgle (sequenced key).
3. Navnet på en film i rental er en temporal fremmednøgle.
4. Lav et temporalt naturligt join af de to tabeller.
5. Find antallet af udlejninger (a) i dag (current), (b) i alt, (c) over tid (for hvert tidspunkt).
Mit problem er at jeg vil bruge en trigger til at lave den sequenced key, men jeg kan ikke rigtig få triggeren til at fungere.
Min trigger ser ud således:
DELIMITER $$
CREATE TRIGGER before_film_insert
BEFORE INSERT ON movies
FOR EACH ROW
BEGIN
IF (SELECT count(*) FROM movies WHERE Film = NEW.FILM AND `Vstart` < `NEW.Vend` AND `NEW.Vstart` < `Vend`) > 0
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'wrong interval';
END IF;
END$$
Når jeg forsøger at indsætte film i movies, får jeg fejlen:
0 68 10:31:07 INSERT INTO movies (Film,Pris,vstart,vend) VALUES ('Taken 2',150,'2012-11-14','2012-11-17') Error Code: 1054. Unknown column 'NEW.vend' in 'where clause' 0.000 sec