Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1)
- Да се напишат соодветните DDL изрази за ентитетните множества „TРКА“, „ОДРЖАНА_ТРКА“ и „УЧЕСТВУВА“, како и за евентуалните релации кои произлегуваат од истите, доколку треба да бидат исполнети следните барања:
- Сакаме да водиме евиденција за учествата на трки од возачи кои се избришани од системот, но не сакаме да водиме евиденција за учествата на трки од тимови кои се избришани од системот.
- Само возачите кои ја завршиле трката на првите 10 позиции добиваат поени (останатите добиваат 0 поени).
- Трката не смее да има повеќе од 80 кругови.
- CREATE TABLE Trka(
- ime TEXT PRIMARY KEY,
- krugovi INT,
- pateka TEXT,
- CONSTRAINT krugovi_check CHECK (krugovi<=80),
- FOREIGN KEY (pateka) REFERENCES Pateka (ime) ON DELETE CASCADE ON UPDATE CASCADE
- );
- CREATE TABLE Odrzana_trka(
- ime TEXT,
- datum TEXT,
- vreme TEXT,
- PRIMARY KEY(ime,datum),
- FOREIGN KEY (ime) REFERENCES Trka (ime) ON DELETE CASCADE ON UPDATE CASCADE
- );
- CREATE TABLE Ucestvuva(
- ID TEXT PRIMARY KEY,
- vozacki_broj INT,
- ime_tim TEXT,
- ime_trka TEXT,
- datum_trka DATE,
- pocetna_p INT,
- krajna_p INT,
- poeni FLOAT,
- CONSTRAINT poeni_check CHECK ((krajna_p<=10 AND poeni>0) OR (krajna_p>10 AND poeni=0))
- FOREIGN KEY (vozacki_broj) REFERENCES Vozac (vozacki_broj) ON DELETE SET NULL ON UPDATE CASCADE,
- FOREIGN KEY (ime_tim) REFERENCES Tim (ime) ON DELETE CASCADE ON UPDATE CASCADE,
- FOREIGN KEY (ime_trka,datum_trka) REFERENCES Odrzana_trka (ime,datum) ON DELETE CASCADE ON UPDATE CASCADE
- );
- 2)
- Да се напише DML израз со кој ќе се вратат информациите за возачите кои во 2023 година освоиле (еден или повеќе) поени на одржани трки со помалку од 70 кругови подредени според датумот на раѓање по опаѓачки редослед.
- SELECT DISTINCT V.*
- FROM Ucestvuva U JOIN Trka T ON U.ime_trka=T.ime JOIN Vozac V ON U.vozacki_broj=V.vozacki_broj
- WHERE krugovi<70 AND poeni>0 AND datum_trka LIKE '2023%'
- ORDER BY datum_r DESC
- 3)
- Да се напише DML израз со кој за секоја трка ќе се врати возачот кој има најмногу победи на таа трка.
- WITH Trki_so_pobednici AS (SELECT ime_trka,vozacki_broj,COUNT(DISTINCT ID) AS broj_pobedi
- FROM Odrzana_trka OT JOIN Ucestvuva U ON OT.ime=U.ime_trka
- WHERE krajna_p='1'
- GROUP BY ime_trka,vozacki_broj),
- Trki_so_max_pobedi AS (SELECT ime_trka,MAX(broj_pobedi) AS max_pobedi
- FROM Trki_so_pobednici
- GROUP BY ime_trka)
- SELECT T.ime_trka AS race,vozacki_broj AS driver
- FROM Trki_so_pobednici T JOIN Trki_so_max_pobedi TMAX ON T.ime_trka=TMAX.ime_trka
- WHERE broj_pobedi=max_pobedi
- 4)
- Да се напише/ат соодветниот/те тригер/и за одржување на референцијалниот интегритет на релацијата „УЧЕСТВУВА“ доколку треба да се исполнети следните барања:
- Сакаме да водиме евиденција за учествата на трки од возачи кои се избришани од системот.
- Не сакаме да водиме евиденција за учествата на трки од тимови кои се избришани од системот.
- CREATE TRIGGER TR_timovi
- AFTER DELETE ON Tim
- FOR EACH ROW
- BEGIN
- DELETE FROM Ucestvuva WHERE Ucestvuva.ime_tim=OLD.ime;
- END;
- CREATE TRIGGER TR_vozaci
- AFTER DELETE ON Vozac
- FOR EACH ROW
- BEGIN
- UPDATE Ucestvuva
- SET vozacki_broj= NULL
- WHERE vozacki_broj=OLD.vozacki_broj;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement