limun11

SQL Test-Kandidat-RezultatiTesta

Feb 1st, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 7.82 KB | None | 0 0
  1. CREATE DATABASE saraa
  2. ON
  3. (NAME=saraa_dat,FILENAME='C:\BP2\DATA\saraa.mdf', SIZE=20MB, MAXSIZE=UNLIMITED, FILEGROWTH=5%)
  4. LOG ON
  5. (NAME=saraa_log, FILENAME='C:\BP2\LOG\saraa.ldf', SIZE=2MB, MAXSIZE=UNLIMITED, FILEGROWTH=5%)
  6.  
  7. USE saraa
  8. GO
  9.  
  10. CREATE TABLE Kandidati
  11. (
  12. KandidatID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  13. Ime nvarchar(30) NOT NULL,
  14. Prezime nvarchar (30) NOT NULL,
  15. JMBG nvarchar (13) UNIQUE NOT NULL,
  16. DatumRodjenja date NOT NULL,
  17. MjestoRodjenja nvarchar(30),
  18. Telefon nvarchar (20),
  19. Email nvarchar (50) UNIQUE
  20. );
  21.  
  22. CREATE TABLE Testovi
  23. (
  24. TestID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  25. Datum smalldatetime NOT NULL,
  26. Naziv nvarchar (50),
  27. Oznaka nvarchar (10) UNIQUE NOT NULL,
  28. Oblast nvarchar (50) NOT NULL,
  29. MaxBrojBodova int NOT NULL,
  30. Opis nvarchar (250)
  31. );
  32.  
  33. CREATE TABLE RezultatiTesta
  34. (
  35. TestID int FOREIGN KEY REFERENCES Testovi(TestID),
  36. KandidatID int FOREIGN KEY REFERENCES Kandidati (KandidatID),
  37. Polozio bit NOT NULL,
  38. OsovojeniBodovi decimal NOT NULL,
  39. Napomena text,
  40. PRIMARY KEY (TestID, KandidatID)
  41. );
  42.  
  43. /*Koristeći AdventureWorks2014 bazu podataka, importovati 10 kupaca u tabelu Kandidati i to sljedeće kolone:
  44. a. FirstName (Person) -> Ime,
  45. b. LastName (Person) -> Prezime,
  46. c. Zadnjih 13 karaktera kolone rowguid iz tabele Customer (Crticu zamijeniti brojem 0) -> JMBG,
  47. d. ModifiedDate (Customer) -> DatumRodjenja,
  48. e. City (Address) -> MjestoRodjenja,
  49. f. PhoneNumber (PersonPhone) -> Telefon,
  50. g. EmailAddress (EmailAddress) -> Email.
  51. Također, u tabelu Testovi unijeti minimalno tri testa sa proizvoljnim podacima.*/
  52. INSERT INTO Kandidati
  53. SELECT TOP 10
  54.             pp.FirstName AS [Ime],
  55.             pp.LastName AS [Prezime],
  56.             REPLACE(RIGHT(pp.rowguid,13),'-', '0') AS [JMBG],
  57.             sc.ModifiedDate AS [Datm rodjenja],
  58.             pa.City AS [Mjesto rodjenja],
  59.             ppp.PhoneNumber AS [Telefon],
  60.             pea.EmailAddress AS [Email]
  61. FROM AdventureWorks2014.Person.Person AS pp
  62. INNER JOIN AdventureWorks2014.Sales.Customer AS sc ON pp.BusinessEntityID=sc.PersonID
  63. INNER JOIN AdventureWorks2014.Person.Address AS pa ON pp.BusinessEntityID=pa.AddressID
  64. INNER JOIN AdventureWorks2014.Person.PersonPhone AS ppp ON pp.BusinessEntityID=ppp.BusinessEntityID
  65. INNER JOIN AdventureWorks2014.Person.EmailAddress AS pea ON pp.BusinessEntityID=pea.BusinessEntityID
  66. SELECT * FROM Kandidati
  67. INSERT INTO Testovi (Datum, Naziv, Oznaka, Oblast, MaxBrojBodova, Opis)
  68. VALUES
  69. ('2017-01-02 12:12:13' , 'Matematika', 'MAT', 'Tehnicka', '100', 'Ovaj predmet se zove matematika.'),
  70. ('2016-03-23 13:13:13', 'Bosanski jezik', 'BOS', 'Jezicka', '100', 'Ovaj predmet se zove bosanski jezik.'),
  71. ('2015-04-05 14:14:14', 'Moja okolina', 'MO', 'Priroda', '100', 'Ovaj predmet se zove moja okolina.')
  72. SELECT * FROM Testovi
  73.  
  74. /*Kreirati stored proceduru koja će na osnovu proslijeđenih parametara služiti za unos podataka u tabelu RezultatiTesta.
  75. Proceduru pohraniti pod nazivom usp_RezultatiTesta_Insert. Obavezno testirati ispravnost kreirane procedure
  76. (unijeti proizvoljno minimalno 10 rezultata za različite testove).*/
  77. GO
  78. CREATE PROCEDURE usp_RezultatiTesta_Insert
  79. @test int,
  80. @kandidat int,
  81. @polozio bit,
  82. @osvojeniBodovi decimal,
  83. @napomena text
  84. AS
  85.     BEGIN
  86.         INSERT INTO RezultatiTesta (TestID, KandidatID, Polozio, OsovojeniBodovi, Napomena)
  87.         VALUES(@test, @kandidat, @polozio, @osvojeniBodovi, @napomena)
  88.     END;
  89.  
  90. EXECUTE usp_RezultatiTesta_Insert '3', '1', '1', '99', 'Ovo je napomena.'
  91. EXECUTE usp_RezultatiTesta_Insert '4', '2', '0', '33', 'Ovo je napomena.'
  92. EXECUTE usp_RezultatiTesta_Insert '5', '3', '1', '77', 'Ovo je napomena.'
  93. EXECUTE usp_RezultatiTesta_Insert '3', '4', '0', '54', 'Ovo je napomena.'
  94. EXECUTE usp_RezultatiTesta_Insert '4', '5', '1', '88', 'Ovo je napomena.'
  95.  
  96. EXECUTE usp_RezultatiTesta_Insert '5', '6', '0', '22', 'Ovo je napomena.'
  97. EXECUTE usp_RezultatiTesta_Insert '3', '7', '1', '75', 'Ovo je napomena.'
  98. EXECUTE usp_RezultatiTesta_Insert '4', '8', '0', '36', 'Ovo je napomena.'
  99. EXECUTE usp_RezultatiTesta_Insert '5', '9', '1', '100', 'Ovo je napomena.'
  100. EXECUTE usp_RezultatiTesta_Insert '3', '10', '0', '25', 'Ovo je napomena.'
  101.  
  102. SELECT * FROM Testovi
  103. SELECT * FROM RezultatiTesta
  104.  
  105. /*Kreirati view (pogled) nad podacima koji će sadržavati sljedeća polja:
  106.  ime i prezime, jmbg, telefon i email kandidata,
  107.  zatim datum, naziv, oznaku, oblast i max. broj bodova na testu,
  108.  te polje položio, osvojene bodove i procentualni rezultat testa. View pohranite pod nazivom view_Rezultati_Testiranja.*/
  109.  GO
  110.  CREATE VIEW view_Rezultati_Testiranja
  111.  AS
  112.     SELECT k.Ime AS [Ime kandidata], k.Prezime AS [Prezime kandidata], k.JMBG AS[JMBG kandidata],
  113.            k.Telefon AS [Telefon kandidata], k.Email AS [email kandidata],
  114.            t.Datum AS [Datum testa], t. Naziv AS [Naziv testa], t.Oznaka AS [Oznaka testa],
  115.            t.Oblast AS [Oblast testa], t.MaxBrojBodova AS [Max broj bodova na testu],
  116.            rt.Polozio AS [Polozio], rt.OsovojeniBodovi AS [Osvojeni bodovi],
  117.            (rt.OsovojeniBodovi/t.MaxBrojBodova)*100 AS [Procentualni rezultat testa]
  118.     FROM RezultatiTesta AS rt
  119.     INNER JOIN Kandidati AS k ON rt.KandidatID=k.KandidatID
  120.     INNER JOIN Testovi AS t ON rt.TestID=t.TestID
  121. SELECT * FROM view_Rezultati_Testiranja
  122.  
  123. /*6. Kreirati stored proceduru koja će na osnovu proslijeđenih parametara
  124. @OznakaTesta i @Polozio prikazivati rezultate testiranja.
  125. Kao izvor podataka koristiti prethodno kreirani view.
  126. Proceduru pohraniti pod nazivom usp_RezultatiTesta_SelectByOznaka.
  127. Obavezno testirati ispravnost kreirane procedure.*/
  128. GO
  129. CREATE PROCEDURE usp_RezultatiTesta_SelectByOznaka
  130. @oznakaTesta nvarchar(10),
  131. @polozio bit
  132. AS
  133.     BEGIN
  134.         SELECT view_Rezultati_Testiranja.[Ime kandidata], view_Rezultati_Testiranja.[Prezime kandidata],
  135.                 view_Rezultati_Testiranja.[Naziv testa], view_Rezultati_Testiranja.Polozio,
  136.                 view_Rezultati_Testiranja.[Osvojeni bodovi]
  137.         FROM view_Rezultati_Testiranja
  138.         WHERE view_Rezultati_Testiranja.[Oznaka testa] LIKE @oznakaTesta AND view_Rezultati_Testiranja.Polozio LIKE @polozio
  139.     END;
  140. SELECT * FROM Testovi
  141. EXECUTE usp_RezultatiTesta_SelectByOznaka 'MAT', '1'
  142.  
  143. /*Kreirati proceduru koja će služiti za izmjenu rezultata testiranja.
  144. Proceduru pohraniti pod nazivom usp_RezultatiTesta_Update.
  145. Obavezno testirati ispravnost kreirane procedure.*/
  146. GO
  147. CREATE PROCEDURE usp_RezultatiTesta_Update
  148. @test int,
  149. @kandidat int,
  150. @polozio bit,
  151. @osvojeniBodovi decimal,
  152. @napomena text
  153. AS
  154.     BEGIN
  155.         UPDATE RezultatiTesta
  156.         SET TestID=@test, KandidatID=@kandidat, Polozio=@polozio, OsovojeniBodovi=@osvojeniBodovi, Napomena=@napomena
  157.         WHERE RezultatiTesta.KandidatID
  158.         =(
  159.         SELECT Kandidati.KandidatID
  160.         FROM Kandidati
  161.         WHERE Kandidati.KandidatID=@kandidat
  162.         )
  163.         AND
  164.         RezultatiTesta.TestID
  165.         =(
  166.         SELECT Testovi.TestID
  167.         FROM Testovi
  168.         WHERE Testovi.TestID=@test
  169.         )
  170.     END;
  171. EXECUTE usp_RezultatiTesta_Update '3', '1', '0', '25', 'Polozio, pa je pao.'
  172. SELECT * FROM RezultatiTesta
  173.  
  174. /*8. Kreirati stored proceduru koja će služiti za brisanje testova zajedno sa svim rezultatima testiranja.
  175. Proceduru pohranite pod nazivom usp_Testovi_Delete. Obavezno testirati ispravnost kreirane procedure.*/
  176. GO
  177. CREATE PROCEDURE usp_Testovi_Delete
  178. @test int
  179. AS
  180.     BEGIN
  181.         DELETE
  182.         FROM RezultatiTesta
  183.         WHERE RezultatiTesta.TestID
  184.         =(
  185.         SELECT Testovi.TestID
  186.         FROM Testovi
  187.         WHERE Testovi.TestID=@test
  188.         )
  189.         DELETE
  190.         FROM Testovi
  191.         WHERE Testovi.TestID=@test
  192.     END;
  193. EXECUTE usp_Testovi_Delete '3'
  194. SELECT * FROM Testovi
  195. SELECT * FROM RezultatiTesta
  196.  
  197. /*9. Kreirati trigger koji će spriječiti brisanje rezultata testiranja. Obavezno testirati ispravnost kreiranog triggera.*/
  198. GO
  199. CREATE TRIGGER Brisanje
  200. ON RezultatiTesta
  201. FOR DELETE
  202.     AS
  203.     PRINT 'Zabranjeno brisanje!!!'
  204.     ROLLBACK;
  205.  
  206. DELETE RezultatiTesta
  207. SELECT * FROM RezultatiTesta
  208.  
  209. /*10. Uraditi full backup Vaše baze podataka na lokaciju D:\DBMS\Backup.
  210.     */
  211. BACKUP DATABASE saraa
  212. TO DISK='C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\saraa.bak'
Advertisement
Add Comment
Please, Sign In to add comment