limun11

Septembarski rok - Klijenti - transakcije

Jan 23rd, 2017
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 8.22 KB | None | 0 0
  1. CREATE DATABASE sara2301
  2. ON
  3. (NAME=sara2301_dat, FILENAME='C:\BP2\DATA\sara2301.mdf', SIZE=20MB, MAXSIZE=UNLIMITED, FILEGROWTH=10%)
  4. LOG ON
  5. (NAME=sara2301_log, FILENAME='C:\BP2\LOG\sara2301.ldf', SIZE=2MB, MAXSIZE=UNLIMITED, FILEGROWTH=5%)
  6.  
  7. USE sara2301
  8. GO
  9.  
  10. CREATE TABLE Klijenti
  11. (
  12. KlijentiID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  13. Ime nvarchar (30) NOT NULL,
  14. Prezime nvarchar (30) NOT NULL,
  15. Telefon nvarchar (20) NOT NULL,
  16. Mail nvarchar (50) UNIQUE NOT NULL,
  17. BrojRacuna nvarchar (15) NOT NULL,
  18. KorisnickoIme nvarchar (20) NOT NULL,
  19. Lozinka nvarchar (20) NOT NULL     
  20. );
  21.  
  22. CREATE TABLE Transkacije
  23. (
  24. TransakcijaID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  25. Datum smalldatetime NOT NULL,
  26. TipTransakcije nvarchar (30) NOT NULL,
  27. PosiljalacID int FOREIGN KEY REFERENCES Klijenti (KlijentiID) NOT NULL,
  28. PrimalacID int FOREIGN KEY REFERENCES Klijenti (KlijentiID) NOT NULL,
  29. Svrha nvarchar (50) NOT NULL,
  30. Iznos decimal NOT NULL
  31. );
  32.  
  33. /*2.Popunjavanje tabela podacima:
  34. a) Koristeći bazu podataka AdventureWorks2014, preko INSERT i SELECT komande importovati 10 kupaca u tabelu Klijenti.
  35. Ime, prezime, telefon, mail i broj računa (AccountNumber) preuzeti od kupca, korisničko ime generisati na
  36. osnovu imena i prezimena u formatu ime.prezime, a lozinku generisati na osnovu polja PasswordHash,
  37. i to uzeti samo zadnjih 8 karaktera.
  38. b) Putem jedne INSERT komande u tabelu Transakcije dodati minimalno 10 transakcija.*/
  39. GO
  40. INSERT INTO Klijenti (Ime, Prezime, Telefon, Mail, BrojRacuna, KorisnickoIme, Lozinka)
  41. SELECT TOP 10 pp.FirstName,
  42.        pp.LastName,
  43.        ppp.PhoneNumber,
  44.        pea.EmailAddress,
  45.        sc.AccountNumber,
  46.        pp.FirstName + '.' + pp.LastName AS [korinsicko ime],
  47.        RIGHT(ppass.PasswordHash,8)
  48. FROM AdventureWorks2014.Person.Person AS pp
  49. INNER JOIN AdventureWorks2014.Person.PersonPhone AS ppp ON pp.BusinessEntityID=ppp.BusinessEntityID
  50. INNER JOIN AdventureWorks2014.Person.EmailAddress AS pea ON pp.BusinessEntityID=pea.BusinessEntityID
  51. INNER JOIN AdventureWorks2014.Sales.Customer AS sc ON pp.BusinessEntityID=sc.PersonID
  52. INNER JOIN AdventureWorks2014.Person.Password AS ppass ON pp.BusinessEntityID=ppass.BusinessEntityID
  53.  
  54. SELECT * FROM Klijenti
  55.  
  56. --b) Putem jedne INSERT komande u tabelu Transakcije dodati minimalno 10 transakcija.*/
  57. GO
  58. INSERT INTO Transkacije (Datum, TipTransakcije, PosiljalacID, PrimalacID, Svrha, Iznos)
  59. VALUES
  60. ('2006-01-01 11:11:11', 'Slanje novca', '121', '122', 'Uplata', '100'),
  61. ('2007-02-02 12:12:12', 'Primanje novca', '122', '121', 'Isplata', '200'),
  62. ('2008-03-06 13:13:13', 'Slanje novca', '124', '123', 'Uplata', '300'),
  63. ('2009-04-04 14:14:14', 'Primanje novca', '125','124', 'Isplata' , '400'),
  64. ('2010-05-05 15:15:15', 'Slanje novca' , '126','125', 'Uplata', '500'),
  65. ('2011-06-06 16:16:16', 'Primanje novca', '127', '126', 'Isplata', '600'),
  66. ('2012-07-07 17:17:17', 'Slanje novca', '128', '127', 'Uplata', '700'),
  67. ('2013-08-08 18:18:18', 'Primanje novca ', '129', '128', 'Isplata', '800'),
  68. ('2014-09-09 19:19:19', 'Slanje novca' ,'130','129', 'Uplata', '900'),
  69. ('2015-10-10 20:20:20', 'Primanje novca', '121', '130' , 'Isplata', '1000')
  70.  
  71. SELECT * FROM Transkacije
  72.  
  73.  
  74. /*3.Kreiranje indeksa u bazi podataka nada tabelama:
  75. a) Non-clustered indeks nad tabelom Klijenti. Potrebno je indeksirati Ime i Prezime.
  76. Također, potrebno je uključiti kolonu BrojRacuna.
  77. b) Napisati proizvoljni upit nad tabelom Klijenti koji u potpunosti iskorištava indeks iz prethodnog koraka.
  78. Upit obavezno mora imati filter.
  79. c) Uraditi disable indeksa iz koraka a)*/
  80. --a
  81. GO
  82. CREATE NONCLUSTERED INDEX KlijentiIndex
  83. ON Klijenti (Ime, Prezime)
  84. INCLUDE (BrojRacuna)
  85. --b
  86. GO
  87. SELECT Ime, Prezime, BrojRacuna
  88. FROM Klijenti
  89. --c
  90. ALTER INDEX KlijentiIndex
  91. ON Klijenti
  92. DISABLE;
  93.  
  94. /*4.Kreirati uskladištenu proceduru koja će vršiti upis novih klijenata.
  95. Kao parametre proslijediti sva polja. Provjeriti ispravnost kreirane procedure.*/
  96. GO
  97. CREATE PROCEDURE UpisNovihKlijenata
  98. @ime nvarchar (30),
  99. @prezime nvarchar (30),
  100. @telefon nvarchar (20),
  101. @mail nvarchar (50),
  102. @brojRacuna nvarchar (15),
  103. @korinsickoIme nvarchar (20),
  104. @lozinka nvarchar (20)
  105. AS
  106.     BEGIN
  107.         INSERT INTO Klijenti (Ime, Prezime, Telefon, Mail, BrojRacuna, KorisnickoIme, Lozinka)
  108.         VALUES (@ime, @prezime, @telefon, @mail, @brojRacuna, @korinsickoIme, @lozinka)
  109.     END;
  110. EXECUTE UpisNovihKlijenata 'Sara', 'Saric', '112233', '[email protected]', '123456789', 'sara.saric', '123456sara'
  111.  
  112. SELECT * FROM Klijenti
  113.  
  114. /*5.Kreirati view sa sljedećom definicijom.
  115. Objekat treba da prikazuje datum transakcije, tip transakcije, ime i prezime pošiljaoca (spojeno),
  116. broj računa pošiljaoca, ime i prezime primaoca (spojeno), broj računa primaoca, svrhu i iznos transakcije.*/
  117. GO
  118. CREATE VIEW Pogled
  119. AS
  120.     SELECT t.Datum AS [datum transakcije],
  121.            t.TipTransakcije AS [tip transakcije],
  122.            k.Ime + ' ' + k.Prezime AS [ime i prezime posiljaoca],
  123.            k.BrojRacuna AS [broj racuna posiljaoca],
  124.            kprimalac.Ime + ' ' + kprimalac.Prezime AS [ime i prezime primaoca],
  125.            kprimalac.BrojRacuna AS [broj racuna primaoca],
  126.            t.Svrha AS [svrha transakcije],
  127.            t.Iznos AS [iznos transakcije]
  128.     FROM Transkacije AS t
  129.     INNER JOIN Klijenti AS k ON t.PosiljalacID=k.KlijentiID
  130.     INNER JOIN Klijenti AS kprimalac ON t.PrimalacID=kprimalac.KlijentiID
  131.  
  132. /*6.Kreirati uskladištenu proceduru koja će na osnovu unesenog broja računa pošiljaoca prikazivati sve
  133. transakcije koje su provedene sa računa klijenta. U proceduri koristiti prethodno kreirani view.
  134. Provjeriti ispravnost kreirane procedure.*/
  135. GO
  136. CREATE PROCEDURE PrikazTransakcija
  137. @brojracuna nvarchar (15)
  138. AS
  139.     BEGIN
  140.         SELECT  Pogled.[ime i prezime posiljaoca],Pogled.[datum transakcije], Pogled.[iznos transakcije],
  141.                 Pogled.[svrha transakcije], Pogled.[tip transakcije]
  142.         FROM Pogled
  143.         WHERE Pogled.[broj racuna posiljaoca] LIKE @brojracuna
  144.     END;
  145. EXECUTE PrikazTransakcija 'AW00011089'
  146.  
  147. SELECT BrojRacuna FROM Klijenti
  148.  
  149. /*7. Kreirati upit koji prikazuje sumaran iznos svih transakcija po godinama, sortirano po godinama.
  150. U rezultatu upita prikazati samo dvije kolone: kalendarska godina i ukupan iznos transakcija u godini.
  151. */
  152.  
  153. SELECT  DATEPART(YEAR, Datum) AS [Kalendarska godina],
  154.         SUM(Iznos) AS [Iznos]
  155. FROM Transkacije
  156. GROUP BY Datum
  157. ORDER BY Datum DESC
  158.  
  159. /*8.Kreirati uskladištenu proceduru koje će vršiti brisanje klijenta uključujući sve njegove transakcije,
  160. bilo da je za transakciju vezan kao pošiljalac ili kao primalac. Provjeriti ispravnost kreirane procedure.*/
  161. GO
  162. CREATE PROCEDURE Brisanje
  163. @transakcija nvarchar (30),
  164. @posiljalac nvarchar (30),
  165. @primalac nvarchar (30)
  166. AS
  167.     BEGIN
  168.         DELETE Transkacije
  169.         FROM Transkacije
  170.         INNER JOIN Klijenti ON Transkacije.TransakcijaID=Klijenti.KlijentiID
  171.         WHERE (TransakcijaID=@transakcija AND PosiljalacID=@posiljalac)OR PrimalacID=@primalac AND
  172.               (KlijentiID=@klijent AND KlijentiID=@posiljalac) OR KlijentiID=@primalac
  173.     END;
  174. EXECUTE Brisanje '2', '121', '122'
  175. SELECT * FROM Transkacije
  176.  
  177.  
  178. /*Kreirati uskladištenu proceduru koja će na osnovu unesenog broja računa ili prezimena pošiljaoca vršiti
  179. pretragu nad prethodno kreiranim view-om (zadatak 5). Testirati ispravnost procedure u sljedećim situacijama:
  180. a) Nije postavljena vrijednost niti jednom parametru (vraća sve zapise)
  181. b) Postavljena je vrijednost parametra broj računa,
  182. c) Postavljena je vrijednost parametra prezime,
  183. d) Postavljene su vrijednosti oba parametra.*/
  184. GO
  185. ALTER PROCEDURE Pretragapogledom
  186. @brojracuna nvarchar (30)='',
  187. @prezimePosiljaoca nvarchar (30)=''
  188. AS
  189.     BEGIN
  190.         SELECT *
  191.         FROM Pogled
  192.         WHERE Pogled.[broj racuna posiljaoca] LIKE @brojracuna +'%' AND
  193.         Pogled.[ime i prezime posiljaoca] LIKE @prezimePosiljaoca +'%'
  194.     END;
  195.  
  196. SELECT * FROM Pogled
  197. EXECUTE Pretragapogledom
  198. EXECUTE Pretragapogledom 'AW00011076'
  199. EXECUTE Pretragapogledom @prezimePosiljaoca='Blake Anderson'
  200. EXECUTE Pretragapogledom 'AW00011076', 'Blake Anderson'
  201.  
  202. /*10. Napraviti full i diferencijalni backup baze podataka na default lokaciju servera:
  203. a) C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup*/
  204. BACKUP DATABASE sara2301
  205. TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\sara2301.bak'
  206.  
  207. BACKUP DATABASE sara2301
  208. TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\sara2301.bak'
  209. WITH DIFFERENTIAL
Advertisement
Add Comment
Please, Sign In to add comment