Advertisement
dzocesrce

[BNP] Racing Heart

Jan 7th, 2025
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 4.01 KB | None | 0 0
  1. 1)
  2. Да се напишат соодветните DDL изрази за ентитетните множества „TРКА“, „ОДРЖАНА_ТРКА“ и „УЧЕСТВУВА“, како и за евентуалните релации кои произлегуваат од истите, доколку треба да бидат исполнети следните барања:
  3.  
  4. Сакаме да водиме евиденција за учествата на трки од возачи кои се избришани од системот, но не сакаме да водиме евиденција за учествата на трки од тимови кои се избришани од системот.
  5. Само возачите кои ја завршиле трката на првите 10 позиции добиваат поени (останатите добиваат 0 поени).
  6. Трката не смее да има повеќе од 80 кругови.
  7.  
  8. CREATE TABLE Trka(
  9. ime TEXT PRIMARY KEY,
  10. krugovi INT,
  11. pateka TEXT,
  12. CONSTRAINT krugovi_check CHECK (krugovi<=80),
  13. FOREIGN KEY (pateka) REFERENCES Pateka (ime) ON DELETE CASCADE ON UPDATE CASCADE
  14. );
  15. CREATE TABLE Odrzana_trka(
  16. ime TEXT,
  17. datum TEXT,
  18. vreme TEXT,
  19. PRIMARY KEY(ime,datum),
  20. FOREIGN KEY (ime) REFERENCES Trka (ime) ON DELETE CASCADE ON UPDATE CASCADE
  21. );
  22. CREATE TABLE Ucestvuva(
  23. ID TEXT PRIMARY KEY,
  24. vozacki_broj INT,
  25. ime_tim TEXT,
  26. ime_trka TEXT,
  27. datum_trka DATE,
  28. pocetna_p INT,
  29. krajna_p INT,
  30. poeni FLOAT,
  31. CONSTRAINT poeni_check CHECK ((krajna_p<=10 AND poeni>0) OR (krajna_p>10 AND poeni=0))
  32. FOREIGN KEY (vozacki_broj) REFERENCES Vozac (vozacki_broj) ON DELETE SET NULL ON UPDATE CASCADE,
  33. FOREIGN KEY (ime_tim) REFERENCES Tim (ime) ON DELETE CASCADE ON UPDATE CASCADE,
  34. FOREIGN KEY (ime_trka,datum_trka) REFERENCES Odrzana_trka (ime,datum) ON DELETE CASCADE ON UPDATE CASCADE
  35. );
  36.  
  37. 2)
  38. Да се напише DML израз со кој ќе се вратат информациите за возачите кои во 2023 година освоиле (еден или повеќе) поени на одржани трки со помалку од 70 кругови подредени според датумот на раѓање по опаѓачки редослед.
  39.  
  40. SELECT DISTINCT V.*
  41. FROM Ucestvuva U JOIN Trka T ON U.ime_trka=T.ime JOIN Vozac V ON U.vozacki_broj=V.vozacki_broj
  42. WHERE krugovi<70 AND poeni>0 AND datum_trka LIKE '2023%'
  43. ORDER BY datum_r DESC
  44.  
  45. 3)
  46. Да се напише DML израз со кој за секоја трка ќе се врати возачот кој има најмногу победи на таа трка.
  47.  
  48. WITH Trki_so_pobednici AS (SELECT ime_trka,vozacki_broj,COUNT(DISTINCT ID) AS broj_pobedi
  49. FROM Odrzana_trka OT JOIN Ucestvuva U ON OT.ime=U.ime_trka
  50. WHERE krajna_p='1'
  51. GROUP BY ime_trka,vozacki_broj),
  52. Trki_so_max_pobedi AS (SELECT ime_trka,MAX(broj_pobedi) AS max_pobedi
  53. FROM Trki_so_pobednici
  54. GROUP BY ime_trka)
  55. SELECT T.ime_trka AS race,vozacki_broj AS driver
  56. FROM Trki_so_pobednici T JOIN Trki_so_max_pobedi TMAX ON T.ime_trka=TMAX.ime_trka
  57. WHERE broj_pobedi=max_pobedi
  58.  
  59. 4)
  60. Да се напише/ат соодветниот/те тригер/и за одржување на референцијалниот интегритет на релацијата „УЧЕСТВУВА“ доколку треба да се исполнети следните барања:
  61.  
  62. Сакаме да водиме евиденција за учествата на трки од возачи кои се избришани од системот.
  63. Не сакаме да водиме евиденција за учествата на трки од тимови кои се избришани од системот.
  64.  
  65. CREATE TRIGGER TR_timovi
  66. AFTER DELETE ON Tim
  67. FOR EACH ROW
  68. BEGIN
  69.     DELETE FROM Ucestvuva WHERE Ucestvuva.ime_tim=OLD.ime;
  70. END;
  71.  
  72. CREATE TRIGGER TR_vozaci
  73. AFTER DELETE ON Vozac
  74. FOR EACH ROW
  75. BEGIN
  76.     UPDATE Ucestvuva
  77.     SET vozacki_broj= NULL
  78.     WHERE vozacki_broj=OLD.vozacki_broj;
  79. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement