-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMK_Computer_Shop.sql
352 lines (304 loc) · 11.4 KB
/
MK_Computer_Shop.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
-- KREIRANJE TABLICA BAZE PODATAKA
DROP TABLE IF EXISTS ArtikliNarudzbe;
DROP TABLE IF EXISTS Skladiste;
DROP TABLE IF EXISTS Racun;
DROP TABLE IF EXISTS Firma;
DROP TABLE IF EXISTS Dobavljac;
DROP TABLE IF EXISTS Narudzba;
DROP TABLE IF EXISTS Zaposlenik;
DROP TABLE IF EXISTS Klijent;
DROP TABLE IF EXISTS Artikal;
DROP TABLE IF EXISTS StavkeZaNarudzbu;
CREATE TABLE Dobavljac (
OIB CHAR(9) PRIMARY KEY,
Naziv CHAR(40) NOT NULL,
Vlasnik CHAR(40) NOT NULL,
PostanskiBroj CHAR(5) NOT NULL,
Grad CHAR(20) NOT NULL
);
CREATE TABLE Artikal (
ID_Artikal INT PRIMARY KEY IDENTITY,
Naziv VARCHAR(80) NOT NULL,
Model VARCHAR(40) NOT NULL,
Proizvodjac VARCHAR(40) NOT NULL,
Tip VARCHAR(40) NOT NULL
);
CREATE TABLE Klijent (
OIB CHAR(9) PRIMARY KEY,
Naziv VARCHAR(40) NOT NULL,
Telefon VARCHAR(20) NOT NULL,
Email VARCHAR(40) NOT NULL
);
CREATE TABLE Zaposlenik (
OIB CHAR(9) PRIMARY KEY,
Ime VARCHAR(20) NOT NULL,
Prezime VARCHAR(20) NOT NULL,
Telefon VARCHAR(20) NOT NULL,
Email VARCHAR(40) NOT NULL
);
CREATE TABLE Narudzba (
ID_Narudzba INT PRIMARY KEY IDENTITY,
OIB_Zaposlenik CHAR(9) FOREIGN KEY REFERENCES Zaposlenik(OIB),
OIB_Klijent CHAR(9) FOREIGN KEY REFERENCES Klijent(OIB),
DatumZaprimanja DATE NOT NULL,
DatumIsporuke DATE NOT NULL
);
CREATE TABLE Firma (
OIB CHAR(9) PRIMARY KEY,
Naziv CHAR(40) NOT NULL,
Vlasnik CHAR(40) NOT NULL,
PostanskiBroj CHAR(5) NOT NULL,
Grad CHAR(20) NOT NULL
);
CREATE TABLE Racun (
SifraRacuna INT PRIMARY KEY IDENTITY,
ID_Narudzba INT FOREIGN KEY REFERENCES Narudzba(ID_Narudzba),
OIB_Firma CHAR(9) FOREIGN KEY REFERENCES Firma(OIB),
DatumIzdavanja DATE NOT NULL
);
CREATE TABLE ArtikliNarudzbe (
ID_Narudzba INT FOREIGN KEY REFERENCES Narudzba(ID_Narudzba),
ID_Artikal INT FOREIGN KEY REFERENCES Artikal(ID_Artikal),
Kolicina INT NOT NULL,
PRIMARY KEY (ID_Narudzba, ID_Artikal)
);
CREATE TABLE Skladiste (
ID_Stavka INT PRIMARY KEY IDENTITY,
OIB_Dobavljac CHAR(9) FOREIGN KEY REFERENCES Dobavljac(OIB),
ID_Artikal INT FOREIGN KEY REFERENCES Artikal(ID_Artikal),
Cijena DECIMAL(10, 2) NOT NULL,
DatumSkladistenja DATE NOT NULL
);
CREATE TABLE StavkeZaNarudzbu (
ID_Stavka INT PRIMARY KEY IDENTITY,
ID_Artikal INT FOREIGN KEY REFERENCES Artikal(ID_Artikal),
Kolicina INT NOT NULL,
DatumDodavanja DATE NOT NULL
);
-- PODACI
-- Dodavnaje Firma
INSERT INTO Firma (OIB, Naziv, Vlasnik, PostanskiBroj, Grad)
VALUES ('123456789', 'MK Computer Shop d.o.o', 'Martin Kovač', '80240', 'Tomislavgrad')
-- Dodavanje Klijenata
INSERT INTO Klijent (OIB, Naziv, Telefon, Email)
VALUES
('123456789', 'Trgovina d.o.o.', '+385987654321', '[email protected]'),
('234567890', 'XYZ Konzalting', '+385955443322', '[email protected]'),
('345678901', 'Kreativna Agencija Kreativko', '+385912345678', '[email protected]'),
('019983215', 'Boris Ćorić', '+385981234567', '[email protected]'),
('029871234', 'Petar Kovač', '+385989876543', '[email protected]'),
('039962345', 'Mario Antunović', '+385997654321', '[email protected]'),
('016537321', 'Baković d.o.o', '+385954644531', '[email protected]');
-- Dodavanje Zaposlenika
INSERT INTO Zaposlenik (OIB, Ime, Prezime, Telefon, Email)
VALUES
('123456789', 'Ana', 'Horvat', '+385981236567', '[email protected]'),
('234567890', 'Ivan', 'Kovač', '+385982873443', '[email protected]'),
('345678901', 'Marina', 'Radić', '+38595765320', '[email protected]');
INSERT INTO Artikal (Naziv, Model, Proizvodjac, Tip)
VALUES
-- Grafičke kartice
('AMD Radeon RX 6900 XT', 'Radeon RX 6900 XT', 'AMD', 'Grafička kartica'),
('NVIDIA GeForce RTX 3070', 'RTX 3070', 'NVIDIA', 'Grafička kartica'),
('MSI GeForce GTX 1660 Super', 'GTX 1660 Super', 'MSI', 'Grafička kartica'),
-- Procesori
('Intel Core i9-11900K', 'Core i9-11900K', 'Intel', 'Procesor'),
('AMD Ryzen 9 5900X', 'Ryzen 9 5900X', 'AMD', 'Procesor'),
('Intel Core i5-11600K', 'Core i5-11600K', 'Intel', 'Procesor'),
('AMD Ryzen 7 5800X', 'Ryzen 7 5800X', 'AMD', 'Procesor'),
('Intel Core i7-11700K', 'Core i7-11700K', 'Intel', 'Procesor'),
('AMD Ryzen 5 5600X', 'Ryzen 5 5600X', 'AMD', 'Procesor'),
-- RAM memorija
('G.Skill Trident Z RGB 32GB (2x16GB) DDR4 3600MHz', 'Trident Z RGB', 'G.Skill', 'RAM'),
('Crucial Ballistix 32GB (2x16GB) DDR4 3200MHz', 'Ballistix', 'Crucial', 'RAM'),
('Corsair Vengeance RGB Pro 16GB (2x8GB) DDR4 3200MHz', 'Vengeance RGB Pro', 'Corsair', 'RAM'),
-- SSD diskovi
('Samsung 980 PRO 1TB NVMe M.2 SSD', '980 PRO', 'Samsung', 'SSD'),
('WD Blue SN550 500GB NVMe M.2 SSD', 'Blue SN550', 'Western Digital', 'SSD'),
('Crucial MX500 1TB SATA 2.5" SSD', 'MX500', 'Crucial', 'SSD'),
-- HDD diskovi
('Seagate IronWolf 4TB 3.5" SATA HDD', 'IronWolf', 'Seagate', 'HDD'),
('WD Red Plus 6TB 3.5" SATA HDD', 'Red Plus', 'Western Digital', 'HDD'),
('Toshiba P300 1TB 3.5" SATA HDD', 'P300', 'Toshiba', 'HDD'),
-- Matične ploče
('ASRock B550 Steel Legend', 'B550 Steel Legend', 'ASRock', 'Matična ploča'),
('Gigabyte X570 Aorus Elite', 'X570 Aorus Elite', 'Gigabyte', 'Matična ploča'),
('MSI B450 Tomahawk Max', 'B450 Tomahawk Max', 'MSI', 'Matična ploča'),
-- Hladnjaci
('Noctua NH-D15', 'NH-D15', 'Noctua', 'Hladnjak'),
('Cooler Master Hyper 212 Black Edition', 'Hyper 212 Black Edition', 'Cooler Master', 'Hladnjak'),
('be quiet! Dark Rock Pro 4', 'Dark Rock Pro 4', 'be quiet!', 'Hladnjak'),
-- Napajanja
('Seasonic Focus GX-850', 'Focus GX-850', 'Seasonic', 'Napajanje'),
('EVGA SuperNOVA 750 G3', 'SuperNOVA 750 G3', 'EVGA', 'Napajanje'),
('Corsair RM850x', 'RM850x', 'Corsair', 'Napajanje'),
-- Kućišta
('NZXT H510', 'H510', 'NZXT','Kućište'),
('Phanteks Eclipse P400A', 'Eclipse P400A', 'Phanteks', 'Kućište'),
('Fractal Design Meshify C', 'Meshify C', 'Fractal Design', 'Kućište'),
-- Miševi
('Razer DeathAdder V2', 'DeathAdder V2', 'Razer', 'Miš'),
('Logitech G305 Lightspeed', 'G305 Lightspeed', 'Logitech', 'Miš'),
('SteelSeries Rival 3', 'Rival 3', 'SteelSeries', 'Miš'),
-- Tipkovnice
('Corsair K95 RGB Platinum XT', 'K95 RGB Platinum XT', 'Corsair', 'Tipkovnica'),
('HyperX Alloy Origins Core', 'Alloy Origins Core', 'HyperX', 'Tipkovnica'),
('Ducky One 2 Mini', 'One 2 Mini', 'Ducky', 'Tipkovnica'),
-- Slušalice
('Audio-Technica ATH-M50X', 'ATH-M50X', 'Audio-Technica', 'Slušalice'),
('Sennheiser HD 6'Dell S2721DGF'60 S', 'HD 660 S', 'Sennheiser', 'Slušalice'),
('Beyerdynamic DT 990 Pro', 'DT 990 Pro', 'Beyerdynamic', 'Slušalice'),
-- Monitori
(, 'S2721DGF', 'Dell', 'Monitor'),
('LG 27GN950-B', '27GN950-B', 'LG', 'Monitor'),
('ASUS TUF Gaming VG27AQ', 'VG27AQ', 'ASUS', 'Monitor'),
-- Web kamere
('Logitech BRIO Ultra HD Pro', 'BRIO Ultra HD Pro', 'Logitech', 'Web kamera'),
('Razer Kiyo Pro', 'Kiyo Pro', 'Razer', 'Web kamera'),
('Microsoft LifeCam Studio', 'LifeCam Studio', 'Microsoft', 'Web kamera');
INSERT INTO Dobavljac (OIB, Naziv, Vlasnik, PostanskiBroj, Grad)
VALUES
('123456789', 'TechGlob', 'Marko Petrović', '10000', 'Zagreb'),
('234567890', 'ComputerWarehouse', 'Ivan Anić', '21000', 'Split'),
('345678901', 'TechPro', 'Petar Jakelić', '31000', 'Osijek');
INSERT INTO Skladiste (OIB_Dobavljac, ID_Artikal, Cijena, DatumSkladistenja)
VALUES
('123456789', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Razer DeathAdder V2'), 59.99, '2024-05-28'),
('234567890', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Corsair Vengeance RGB Pro 16GB (2x8GB) DDR4 3200MHz'), 99.99, '2024-05-29'),
('345678901', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'ASRock B550 Steel Legend'), 129.99, '2024-05-30'),
('123456789', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Samsung 980 PRO 1TB NVMe M.2 SSD'), 159.99, '2024-05-31'),
('234567890', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'SteelSeries Rival 3'), 39.99, '2024-06-01'),
('345678901', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Gigabyte X570 Aorus Elite'), 199.99, '2024-06-02'),
('123456789', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'WD Red Plus 6TB 3.5" SATA HDD'), 199.99, '2024-06-03'),
('234567890', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Phanteks Eclipse P400A'), 79.99, '2024-06-04'),
('345678901', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Logitech BRIO Ultra HD Pro'), 199.99, '2024-06-05'),
('123456789', (SELECT ID_Artikal FROM Artikal WHERE Naziv = 'Crucial MX500 1TB SATA 2.5" SSD'), 89.99, '2024-06-06');
-- UPITI I RADNJE NA BAZI
-- Kreiranje narudzbe
GO
CREATE PROCEDURE dbo.KreirajNarudzbu
(
@OIB_Zaposlenik CHAR(9),
@OIB_Klijent CHAR(9),
@DatumIsporuke DATE
)
AS
BEGIN
DECLARE @DatumZaprimanja DATE;
SET @DatumZaprimanja = GETDATE();
INSERT INTO Narudzba (OIB_Zaposlenik, OIB_Klijent, DatumZaprimanja, DatumIsporuke)
VALUES (@OIB_Zaposlenik, @OIB_Klijent, @DatumZaprimanja, @DatumIsporuke)
END;
GO
--EXEC KreirajNarudzbu '123456789', '016537321', '2024-06-10'
-- Dobivanje svih narudžbi za određen datum
GO
CREATE FUNCTION dbo.NarudzbeZaDatum (@datum DATE)
RETURNS TABLE
AS
RETURN (
SELECT * FROM Narudzba
WHERE DatumZaprimanja = @datum
);
GO
-- Dobivanje svih narudžbi za određen datum
GO
CREATE FUNCTION dbo.NarudzbeUIntervalu
(
@datumOd DATE,
@datumDo DATE
)
RETURNS TABLE
AS
RETURN (
SELECT * FROM Narudzba
WHERE DatumZaprimanja BETWEEN @datumOd AND @datumDo
);
GO
-- Dohvati artikle po tipu
GO
CREATE FUNCTION ArtikliPoTipu
(
@Tip VARCHAR(40)
)
RETURNS TABLE
AS
RETURN (
SELECT * FROM Artikal
WHERE Tip = @Tip
);
GO
-- Dodavanje artikla na narudzbu
GO
CREATE PROCEDURE dodajNaNarudzbu
(
@ID_Narudzba INT,
@NazivArtikla VARCHAR(80),
@Kolicina INT
)
AS
BEGIN
DECLARE @ID_Artikal INT;
BEGIN TRANSACTION;
SAVE TRANSACTION noArtikal;
SELECT @ID_Artikal = ID_Artikal
FROM Artikal
WHERE Naziv = @NazivArtikla;
IF @ID_Artikal IS NOT NULL
BEGIN
INSERT INTO ArtikliNarudzbe (ID_Narudzba, ID_Artikal, Kolicina)
VALUES (@ID_Narudzba, @ID_Artikal, @Kolicina);
COMMIT TRANSACTION;
END
ELSE
BEGIN
ROLLBACK TRANSACTION noArtikal;
PRINT 'Artikal s nazivom ' + @NazivArtikla + ' ne postoji.';
END;
END;
-- Dodavanje razlike tablica ArtikliNarudzbe i Skladiste kada se doda novi artikal u ArtikliNarudzbe
GO
CREATE TRIGGER trgUpdateStavkeZaNarudzbu
ON ArtikliNarudzbe
AFTER INSERT
AS
BEGIN
INSERT INTO StavkeZaNarudzbu (ID_Artikal, Kolicina, DatumDodavanja)
SELECT i.ID_Artikal, i.Kolicina, GETDATE()
FROM INSERTED i
LEFT JOIN Skladiste s ON i.ID_Artikal = s.ID_Artikal
WHERE s.ID_Artikal IS NULL
END;
GO
-- izbrise stavke ArtikliNarudzbe s ID-em narudzbe koja se izbrisala
GO
CREATE TRIGGER trgDeleteArtikliNarudzbe
ON Narudzba
AFTER DELETE
AS
BEGIN
DELETE FROM ArtikliNarudzbe
WHERE ID_Narudzba IN (SELECT ID_Narudzba FROM deleted);
END;
GO
-- trigger koji daje error kada se izmjeni artikal koji se nalazi u StavkeZaNarudzbu
GO
CREATE TRIGGER trgUpdatedArtikal
ON Artikal
AFTER UPDATE
AS
BEGIN
IF UPDATE(Naziv) OR UPDATE(Model)
BEGIN
IF EXISTS (
SELECT 1
FROM StavkeZaNarudzbu s JOIN INSERTED i
ON s.ID_Artikal = i.ID_Artikal
WHERE s.ID_Artikal = i.ID_Artikal
)
BEGIN
RAISERROR('Artikal se nalazi u tablici StavkeZaNarudzbu', 16, 1)
END;
END;
END;
GO