Avatar billede cooraz Nybegynder
14. november 2012 - 10:41 Der er 2 kommentarer og
1 løsning

Temporal DB in mysql

Jeg har fået en opgave hvor jeg skal lave en temporal DB i mysql
opgaven 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
Avatar billede cooraz Nybegynder
14. november 2012 - 11:47 #1
Fandt selv svaret.
14. november 2012 - 12:49 #2
Og hvad var så svaret?
Avatar billede erikjacobsen Ekspert
14. november 2012 - 13:42 #3
Muligvis at `NEW.Vend` skulle være NEW.`Vend`
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester