Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.32 KB | None | 0 0
  1.  
  2. -- Michał Krause
  3. -- 238191
  4. -- Centrum coachingu E-Sportowego
  5.  
  6. -- 0) Poprawione rozwiązanie zadania 1b (skrypt generujący strukturę bazy danych)
  7. CREATE TABLE Producent
  8. (
  9. ProducentID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  10. Nazwa varchar(255)
  11. );
  12.  
  13. CREATE TABLE Trener
  14. (
  15. TrenerID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  16. Imie varchar(255),
  17. Nazwisko varchar(255),
  18. Ranga varchar(255),
  19. Pensja money
  20. );
  21.  
  22. CREATE TABLE Gracz
  23. (
  24. GraczID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  25. Imie varchar(255),
  26. Nazwisko varchar(255),
  27. Ranga varchar(255)
  28. );
  29.  
  30. CREATE TABLE Transakcja
  31. (
  32. TransakcjaID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  33. GraczID int FOREIGN KEY REFERENCES Gracz,
  34. ilosc_towaru int
  35. );
  36.  
  37.  
  38. CREATE TABLE Gra
  39. (
  40. GraID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  41. Nazwa_Gry varchar(255),
  42. Typ_Gry varchar(255),
  43. Opis varchar(255)
  44. );
  45.  
  46. CREATE TABLE Budynek
  47. (
  48. BudynekID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  49. Adres varchar(255),
  50. Czynsz money,
  51. ilosc_komputerow int,
  52. Oplaty money
  53. );
  54.  
  55. CREATE TABLE Rejestracja
  56. (
  57. RejestracjaID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  58. TrenerID int FOREIGN KEY REFERENCES Trener,
  59. GraczID int FOREIGN KEY REFERENCES Gracz,
  60. GraID int FOREIGN KEY REFERENCES Gra,
  61. Data_Rejestracji date,
  62. Godzina varchar(5),
  63. );
  64.  
  65. CREATE TABLE Lekcja
  66. (
  67. LekcjaID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  68. GraID int FOREIGN KEY REFERENCES Gra,
  69. BudynekID int FOREIGN KEY REFERENCES Budynek,
  70. RejestracjaID int FOREIGN KEY REFERENCES Rejestracja,
  71. TrenerID int FOREIGN KEY REFERENCES Trener,
  72. Data_2 date,
  73. Czas_trwania varchar(5),
  74. Koszt money
  75. );
  76.  
  77.  
  78. CREATE TABLE Turniej
  79. (
  80. TurniejID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  81. GraID int FOREIGN KEY REFERENCES Gra,
  82. Koszt_wejscia money,
  83. Nagroda_Glowna varchar(255),
  84. Data_2 date,
  85. Czas_trwania varchar(5)
  86. );
  87.  
  88. CREATE TABLE Towar
  89. (
  90. TowarID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  91. BudynekID int FOREIGN KEY REFERENCES Budynek,
  92. TransakcjaID int FOREIGN KEY REFERENCES Transakcja,
  93. ProducentID int FOREIGN KEY REFERENCES Producent,
  94. Nazwa_towaru varchar(255),
  95. Cena_towaru money
  96. );
  97.  
  98. INSERT INTO Producent (Nazwa)
  99. VALUES ('Razer'),('Roccat'),('Logitech'),('CocaCola'),('Lays')
  100.  
  101. INSERT INTO Trener (Imie, Nazwisko, Ranga, Pensja)
  102. VALUES ('Krzysztof', 'Sauc', 'Diament', 3500),('Michal', 'Krause', 'Challenger', 4500),('Mateusz','Nubeusz','Gold',1900),('Robert','Fidytek','Challenger',4600),('Alguem','Br','Bronz',600)
  103.  
  104. INSERT INTO Gracz (Imie, Nazwisko, Ranga)
  105. VALUES ('Albert','Einstein','Bronz'),('Waldemar','Ktostam','Bronz'),('Ram','Pampam','Silver'),('Rune','Scape','Silver'),('Coja','Turobie','Challenger')
  106.  
  107. INSERT INTO Transakcja (Ilosc_Towaru)
  108. VALUES (1),(1),(2),(1),(4)
  109.  
  110. INSERT INTO Gra (Nazwa_Gry, Typ_Gry, Opis)
  111. VALUES ('LoL', 'MOBA', 'Najslawniejsza'),('CeEs', 'FPS', 'Najpopularniejszy FPS w Polsce'),('WoW', 'MMORPG', 'WoWa chyba nie trzeba nikomu przedstawiac'),('CoD','FPS', 'FaZe 420 MLG rekt fgt'),('Hearthstone', 'Karcianka', 'Mimo czesto wystepujacych elementow losowych wciaz bardzo skillowa gra')
  112.  
  113. INSERT INTO Budynek (Adres, Czynsz, Ilosc_komputerow, Oplaty)
  114. VALUES ('Gdynia', 10000, 7, 983),('Gdansk',12513,8,1295),('Krakow',8977,5,687),('Warszawa',25123,12,2035),('Lodz',8533,6,753)
  115.  
  116. INSERT INTO Rejestracja (Data_Rejestracji, Godzina)
  117. VALUES ('2012-05-16','16:00'),('2012-06-12', '13.30'),('2012-01-01', '12.35'),('2013-08-07','10.00'),('2013-03-11', '16.00')
  118.  
  119. INSERT INTO Lekcja (Data_2, Czas_Trwania, Koszt)
  120. VALUES ('04-05-12', '2.00', 100),('03-06-12', '2.00', 100),('01-01-01', '1.00', 60),('04-08-07','3.00', 130),('05-03-11','2.00', 100)
  121.  
  122. INSERT INTO Turniej (Koszt_Wejscia, Nagroda_Glowna, Data_2, Czas_Trwania)
  123. VALUES (10, 'boostery', '2012-04-05' , '2.00'),(15, 'skiny', '03-06-12', '6.00'),(20, 'karambit kosa', '01-01-01', '4.00'),(14, 'ksiazka z autografem', '04-08-07', 1.00), (22, 'gra komputerowa', '05-03-11', '3.00')
  124.  
  125. INSERT INTO Towar (Nazwa_towaru, Cena_Towaru)
  126. VALUES ('RAZRNAGA', 350),('Myszka', 24),('Czipsy', 4),('Cola',5),('Podkladka', 40)
  127.  
  128.  
  129. --1a) Tworzymy widok
  130.  
  131. PRINT 'wypisuje trenerów i ich lekcje'
  132. GO
  133.  
  134. CREATE VIEW trener_lekcja
  135. AS
  136. SELECT Trener.Imie, Trener.Nazwisko, Lekcja.Data_2
  137. FROM Trener INNER JOIN Lekcja ON Trener.TrenerID=Lekcja.TrenerID
  138. WHERE IMIE IS NOT NULL
  139. WITH CHECK OPTION;
  140. GO
  141.  
  142. --1b) Sprawdzenie, że widok działa
  143.  
  144. SELECT * FROM Trener WHERE IMIE=0;
  145.  
  146.  
  147. --2a) Tworzymy funkcję 1 (funkcja oblicza nagrodę za 1 miejsce, czyli 60% wejściowego. Potem powinniśmy pomnożyć ją przez ilość uczestników turnieju oczywiście, ale to już zależy od danego dnia)
  148.  
  149. --DROP FUNCTION dbo.czesc_nagrody
  150. GO
  151.  
  152. CREATE FUNCTION dbo.czesc_nagrody
  153. (
  154. @p_koszt_wejscia INT, @p_pierwsze_miejsce INT
  155. )
  156. RETURNS INT
  157. BEGIN
  158. SET @p_pierwsze_miejsce = (Koszt_wejscia / 100) * 60
  159. RETURN(SELECT COUNT(Koszt_wejscia) FROM Turniej
  160. WHERE Koszt_Wejscia=@p_koszt_wejscia)
  161. END
  162. GO
  163.  
  164. --2b) Sprawdzenie, że funkcja 1 działa
  165.  
  166. SELECT dbo.czesc_nagrody(1000) AS czesc_nagrody;
  167.  
  168. --3a) Tworzymy funkcję 2 (funkcja oblicza modę wśród cen lekcji)
  169.  
  170. --DROP FUNCTION dbo.najczestsza_cena
  171. GO
  172.  
  173. CREATE FUNCTION dbo.najczestsza_cena
  174. (
  175. @p_cena_lekcji INT
  176. )
  177. RETURNS INT
  178. BEGIN
  179. RETURN(SELECT COUNT(Koszt) FROM LEKCJA WHERE Koszt=@p_cena_lekcji ORDER BY COUNT(*) DESC)
  180. END
  181. GO
  182.  
  183. --3b) Sprawdzenie, że funkcja 2 działa
  184.  
  185. SELECT dbo.najczestsza_cena AS najczestsza_cena;
  186.  
  187. --4a) Tworzymy procedurę 1 (dodaje nowego trenera)
  188.  
  189. --DROP PROC dodaj_trenera
  190. GO
  191.  
  192. CREATE PROC dodaj_trenera @p_imie_trenera VARCHAR(225), @p_nazwisko VARCHAR(225), @p_ranga VARCHAR(225), @p_pensja MONEY
  193. AS
  194. INSERT INTO TRENER (Imie, Nazwisko, Ranga, Pensja)
  195. VALUES(@p_imie_trenera, @p_nazwisko, @p_ranga, @p_pensja)
  196. GO
  197.  
  198. --4b) Sprawdzenie, że procedura 1 działa
  199.  
  200. EXEC dodaj_trenera 'Rekt', 'Mate', 'Platyna', 2012
  201. SELECT * FROM Trener
  202.  
  203. --5a) Tworzymy procedurę 2 (procedura usuwa z bazy danych klienta, który już nie uczęszcza)
  204.  
  205. --DROP PROC usun_gracza
  206. GO
  207.  
  208. CREATE PROC usun_gracza @p_imie_gracza VARCHAR(225), @p_nazwisko_gracza VARCHAR(225), @p_ranga_gracza VARCHAR(225)
  209. AS
  210. DELETE FROM Gracz WHERE IMIE=@p_imie_gracza AND Nazwisko=@p_nazwisko_gracza
  211. GO
  212.  
  213. --5b) Sprawdzenie, że procedura 2 działa
  214.  
  215. EXEC usun_gracza 'Albert','Einstein'
  216. SELECT * FROM Gracz
  217.  
  218. --6a) Tworzymy wyzwalacz 1 (wyzwalacz uniemożliwia ustalenie pensji trenera mniejszej niż 1000 zł)
  219.  
  220. --DROP TRIGGER ogarnij_hajs
  221. GO
  222.  
  223. CREATE TRIGGER ogarnij_hajs ON Trener
  224. AFTER INSERT
  225. AS
  226. BEGIN
  227. IF(Trener.Pensja<1001)
  228. BEGIN
  229. RAISERROR('Nie mozesz dać trenerowi tak mało pieniędzy!',1,2)
  230. ROLLBACK
  231. END
  232. END
  233. GO
  234.  
  235. --6b) Sprawdzenie, że wyzwalacz 1 działa
  236.  
  237.  
  238. INSERT INTO Trener(Imie, Nazwisko, Ranga, Pensja)
  239. VALUES('Waldemar','Pawlak','Challenger',600)
  240.  
  241.  
  242. --7a) Tworzymy wyzwalacz 2 (nie pozwala ustalić daty turnieju na wcześniejszą niż obecnie)
  243.  
  244. --DROP TRIGGER zla_data
  245. GO
  246.  
  247. CREATE TRIGGER zla_data ON Turniej
  248. AFTER INSERT
  249. AS
  250. BEGIN
  251. DECLARE @datateraz INT
  252. SET @datateraz = (SELECT data_2 FROM inserted)
  253. IF(@datateraz<(GETDATE()))
  254. BEGIN
  255. RAISERROR('Nie mozesz zorganizować turnieju w przeszłości!',1,2)
  256. ROLLBACK
  257. END
  258. END
  259. GO
  260.  
  261.  
  262. --7b) Sprawdzenie, że wyzwalacz 2 działa
  263.  
  264. INSERT INTO Turniej(koszt_wejscia, nagroda_glowna, data_2, czas_trwania)
  265. VALUES(20, 'satysfakcja','2015-10-12', '4.00');
  266.  
  267. --8a) Tworzymy wyzwalacz 3 (nie pozwalający usuwać trenerów z rangą Challenger z bazy danych)
  268.  
  269. --DROP TRIGGER usuwanie_ziomeczkow
  270. GO
  271.  
  272. CREATE TRIGGER usuwanie_ziomeczkow ON Trener
  273. AFTER DELETE
  274. AS
  275. BEGIN
  276. IF(Ranga='Challenger')
  277. BEGIN
  278. RAISERROR('Nie możesz usuwać najlepszych trenerów! To Twoi kumple!',1,2)
  279. ROLLBACK
  280. END
  281. END
  282. GO
  283.  
  284. --8b) Sprawdzenie, że wyzwalacz 3 działa
  285.  
  286. DELETE FROM Trener(Imie, Nazwisko, Ranga, Pensja) WHERE Ranga='Challenger'
  287.  
  288. --9a) Tworzymy wyzwalacz 4 (nie pozwalający sprzedać więcej niż 20 przedmiotów w jednej transakcji)
  289.  
  290. --DROP TRIGGER ogromne_transakcje
  291. GO
  292.  
  293. CREATE TRIGGER ogromne_transakcje ON Transakcja
  294. AFTER INSERT
  295. AS
  296. BEGIN
  297. IF ilosc_towaru > 20
  298. BEGIN
  299. RAISERROR('Podziel transakcje na dwie mniejsze',1,2)
  300. ROLLBACK
  301. END
  302. END
  303. GO
  304.  
  305.  
  306. --9b) Sprawdzenie, że wyzwalacz 4 działa
  307.  
  308. INSERT INTO Transakcja(ilosc_towaru) VALUES (23)
  309.  
  310.  
  311. --10) Tworzymy tabelę przestawną
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement