Advertisement
Guest User

Untitled

a guest
Apr 13th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 11.57 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------------------
  2. -- xsedla1e & xsadil07
  3. -- 2. ukol do IDS, 2018/2019
  4. -------------------------------------------------------------------------------------------------------------------------------
  5.  
  6. DROP TABLE Účet CASCADE CONSTRAINTS;
  7. DROP TABLE Správce CASCADE CONSTRAINTS;
  8. DROP TABLE Uživatel CASCADE CONSTRAINTS;
  9. DROP TABLE Místnost CASCADE CONSTRAINTS;
  10. DROP TABLE Oddělení CASCADE CONSTRAINTS;
  11. DROP TABLE Technika CASCADE CONSTRAINTS;
  12. DROP TABLE Oprava CASCADE CONSTRAINTS;
  13. DROP TABLE Žádost CASCADE CONSTRAINTS;
  14. DROP TABLE Spravuje CASCADE CONSTRAINTS;
  15.  
  16. CREATE TABLE Účet (
  17.     ID INT NOT NULL PRIMARY KEY,
  18.     Jméno VARCHAR2(127) NOT NULL,
  19.     Příjmení VARCHAR2(127) NOT NULL,
  20.     Rodné_číslo INT NOT NULL,
  21.     Email VARCHAR2(127) NOT NULL,
  22.     Telefon INT NOT NULL,
  23.     Město VARCHAR2(127) NOT NULL,
  24.     Ulice VARCHAR2(127) NOT NULL,
  25.     PSC INT NOT NULL,
  26.     ID_Umístění INT NOT NULL,
  27.     CHECK (regexp_like(Jméno, '^[a-zA-Z-]+$')),
  28.     CHECK (regexp_like(Email, '^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$')),
  29.     CHECK (regexp_like(Rodné_číslo, '^[0-9]{2}[0-8][0-9][0-3][0-9][0-9]{4}$')),
  30.     CHECK (regexp_like(PSC, '^[0-9]{5}$')),
  31.     CHECK (regexp_like(Telefon, '^[0-9]{9,}$'))
  32. );
  33.  
  34. CREATE TABLE Správce (
  35.   Účet INT NOT NULL PRIMARY KEY,
  36.   Licence VARCHAR2(127) NOT NULL
  37. );
  38.  
  39. CREATE TABLE Uživatel (
  40.   Účet INT NOT NULL PRIMARY KEY
  41. );
  42.  
  43. CREATE TABLE Místnost (
  44.     Číslo_místnosti INT NOT NULL PRIMARY KEY,
  45.     Patro INT NOT NULL,
  46.     Typ VARCHAR2(1024) NOT NULL,
  47.     Popis VARCHAR2(2048) NOT NULL,
  48.     ID_Oddělení INT NOT NULL
  49. );
  50.  
  51. CREATE TABLE Oddělení(
  52.     Číslo_oddělení INT NOT NULL PRIMARY KEY,
  53.     Popis VARCHAR2(2048) NOT NULL
  54. );
  55.  
  56. CREATE TABLE Technika (
  57.     ID INT NOT NULL PRIMARY KEY,
  58.     Výrobní_číslo VARCHAR2(127) NOT NULL,
  59.     Typ VARCHAR2(1024) NOT NULL,
  60.     Výrobce VARCHAR2(127) NOT NULL,
  61.     Model_techniky VARCHAR2(127) NOT NULL,
  62.     Specifikace VARCHAR2(1024) NOT NULL,
  63.     ID_Umístění INT NOT NULL,
  64.     ID_Uživatele INT NOT NULL
  65. );
  66.  
  67. CREATE TABLE Oprava (
  68.     ID INT NOT NULL PRIMARY KEY,
  69.     Kdy DATE NOT NULL,
  70.     Aktuální_stav VARCHAR2(1024) NOT NULL,
  71.     ID_Techniky INT NOT NULL,
  72.     ID_Správce INT
  73. );
  74.  
  75. CREATE TABLE Žádost (
  76.     ID INT NOT NULL PRIMARY KEY,
  77.     Kdy DATE NOT NULL,
  78.     ID_Techniky INT NOT NULL,
  79.     ID_Opravy INT,
  80.     ID_Správce INT NOT NULL,
  81.     ID_Uživatele INT NOT NULL
  82. );
  83.  
  84.  
  85. -- Vztahy
  86. CREATE TABLE Spravuje (
  87.   ID INT NOT NULL PRIMARY KEY,
  88.   ID_Správce INT NOT NULL,
  89.   ID_Techniky INT NOT NULL
  90. );
  91.  
  92. ALTER TABLE Účet
  93.   ADD CONSTRAINT FK_UmístěníÚčtu
  94.     FOREIGN KEY (ID_Umístění) REFERENCES Místnost(Číslo_místnosti);
  95.  
  96. ALTER TABLE Správce
  97.   ADD CONSTRAINT FK_SprávcovskýÚčet
  98.     FOREIGN KEY (Účet) REFERENCES Účet(ID) ON DELETE CASCADE;
  99.  
  100. ALTER TABLE Uživatel
  101.   ADD CONSTRAINT FK_UživatelskýÚčet
  102.     FOREIGN KEY (Účet) REFERENCES Účet(ID) ON DELETE CASCADE;
  103.  
  104. ALTER TABLE Místnost
  105.   ADD CONSTRAINT FK_OdděleníMístnosti
  106.     FOREIGN KEY (ID_Oddělení) REFERENCES Oddělení(Číslo_oddělení);
  107.  
  108. ALTER TABLE Technika
  109.   ADD CONSTRAINT FK_UmístěníTechniky
  110.     FOREIGN KEY (ID_Umístění) REFERENCES Místnost(Číslo_místnosti)
  111.   ADD CONSTRAINT FK_UživatelTechniky
  112.     FOREIGN KEY (ID_Uživatele) REFERENCES Uživatel(Účet);
  113.  
  114. ALTER TABLE Oprava
  115.   ADD CONSTRAINT FK_OpravaTechniky
  116.     FOREIGN KEY (ID_Techniky) REFERENCES Technika(ID) ON DELETE CASCADE
  117.   ADD CONSTRAINT FK_SprávceOpravy
  118.     FOREIGN KEY (ID_Správce) REFERENCES Správce(Účet) ON DELETE SET NULL;
  119.  
  120. ALTER TABLE Žádost
  121.   ADD CONSTRAINT FK_ŽádostTechniky
  122.     FOREIGN KEY (ID_Techniky) REFERENCES Technika(ID) ON DELETE CASCADE
  123.   ADD CONSTRAINT FK_ŽádostOpravy
  124.     FOREIGN KEY (ID_Opravy) REFERENCES Oprava(ID) ON DELETE SET NULL
  125.   ADD CONSTRAINT FK_SprávceŽádosti
  126.     FOREIGN KEY (ID_Správce) REFERENCES Správce(Účet)
  127.   ADD CONSTRAINT FK_PodavatelŽádosti
  128.     FOREIGN KEY (ID_Uživatele) REFERENCES Uživatel(Účet);
  129.  
  130. ALTER TABLE Spravuje
  131.   ADD CONSTRAINT FK_Spravuje
  132.     FOREIGN KEY (ID_Správce) REFERENCES Správce(Účet) ON DELETE CASCADE
  133.   ADD CONSTRAINT FK_SpravovanáTech
  134.     FOREIGN KEY (ID_Techniky) REFERENCES Technika(ID) ON DELETE CASCADE;
  135.  
  136.  
  137. -- Vlozeni oddeleni
  138. INSERT INTO Oddělení (Číslo_oddělení, Popis)
  139.     VALUES (1, 'CVT');
  140. INSERT INTO Oddělení (Číslo_oddělení, Popis)
  141.     VALUES (2, 'Kanceláře');
  142. INSERT INTO Oddělení (Číslo_oddělení, Popis)
  143.     VALUES (3, 'Přednášky');
  144.  
  145. -- Vlozeni mistnosti
  146. INSERT INTO Místnost (Číslo_místnosti, Patro, Typ, Popis, ID_Oddělení)VALUES
  147.     (10, 1, 'Správa CVT', 'Místnost slouží pro zaměstnance správy CVT', 1);
  148. INSERT INTO Místnost (Číslo_místnosti, Patro, Typ, Popis, ID_Oddělení)VALUES
  149.     (20, 1, 'Serverovna', 'V místnosti jsou uloženy veškeřé servery', 1);
  150. INSERT INTO Místnost (Číslo_místnosti, Patro, Typ, Popis, ID_Oddělení)VALUES
  151.     (30, 2, 'Kancelář ředitele', 'Zde sídlí velký šéf', 2);
  152. INSERT INTO Místnost (Číslo_místnosti, Patro, Typ, Popis, ID_Oddělení)VALUES
  153.     (40, 2, 'Hlavní aula', 'Pro technické konference', 3);
  154.  
  155. -- Vlozeni uctu
  156. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  157.     VALUES (1, 'Jiří', 'Novák', 5955127215, 'example0@email.com', 107635075, 'Brno', 'Zahradní 15', 44739, 10 );
  158. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  159.     VALUES (2, 'Jan', 'Svoboda', 8142317343, 'example1@email.com', 410585496, 'Ostrava', 'Krátká 15', 79652, 10);
  160. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  161.     VALUES (3, 'Petr', 'Novotný', 1906212050, 'example2@email.com', 421608504, 'Plzeň', 'Nádražní 15', 25439, 10);
  162. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  163.     VALUES (4, 'Josef', 'Dvořák', 3635184726, 'example3@email.com', 501080405, 'Liberec', 'Školní 15', 25586, 10);
  164. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  165.     VALUES (5, 'Pavel', 'Černý', 9467101671, 'example4@email.com', 908512650, 'Olomouc', 'Polní 15', 64744, 20);
  166. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  167.     VALUES (6, 'Martin', 'Procházka', 7340288605, 'example5@email.com', 124925560, 'Budějovice', 'Luční 15', 72848, 20);
  168. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  169.     VALUES (7, 'Jaroslav', 'Kučera', 2670098059, 'example6@email.com', 660356276, 'Pardubice', 'Komenského 15', 63404, 30);
  170. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  171.     VALUES (8, 'Tomáš', 'Veselý', 1461136966, 'example7@email.com', 938258512, 'Králové', 'Nová 15', 46203, 10);
  172. INSERT INTO Účet (ID, Jméno, Příjmení, Rodné_číslo, Email, Telefon, Město, Ulice, PSC, ID_Umístění)
  173.     VALUES (9, 'Miroslav', 'Horák', 6635251305, 'example8@email.com', 722762065, 'Pardubice', 'Husova 15', 60765, 10);
  174.  
  175. INSERT INTO Správce (Účet, Licence) VALUES (1, 'Elektronika');
  176. INSERT INTO Správce (Účet, Licence) VALUES (2, 'Sítě');
  177. INSERT INTO Správce (Účet, Licence) VALUES (3, 'Hardware');
  178. INSERT INTO Správce (Účet, Licence) VALUES (4, 'Grafika');
  179. INSERT INTO Uživatel (Účet) VALUES (5);
  180. INSERT INTO Uživatel (Účet) VALUES (6);
  181. INSERT INTO Uživatel (Účet) VALUES (7);
  182. INSERT INTO Uživatel (Účet) VALUES (8);
  183. INSERT INTO Uživatel (Účet) VALUES (9);
  184.  
  185. -- Vlozeni techniky
  186. INSERT INTO Technika (ID, Výrobní_číslo, Typ, Výrobce, Model_techniky, Specifikace, ID_Umístění, ID_Uživatele)
  187.     VALUES (1, '7FC0TI3231', 'PC', 'Asus', 'KLM18', '4 Ghz, RAM 124 KB...', 10, 5);
  188. INSERT INTO Technika (ID, Výrobní_číslo, Typ, Výrobce, Model_techniky, Specifikace, ID_Umístění, ID_Uživatele)
  189.     VALUES (2, 'M381KHSV4I', 'Tablet', 'Lenovo', 'LKJS48LS', '4 Ghz, RAM 124 KB...', 30, 6);
  190. INSERT INTO Technika (ID, Výrobní_číslo, Typ, Výrobce, Model_techniky, Specifikace, ID_Umístění, ID_Uživatele)
  191.     VALUES (3, 'QGE87D3J8K', 'Monitor', 'Dell', '23FHDIPS', 'Pekny monitor se stojankem', 20, 7);
  192. INSERT INTO Technika (ID, Výrobní_číslo, Typ, Výrobce, Model_techniky, Specifikace, ID_Umístění, ID_Uživatele)
  193.     VALUES (4, 'A4J734U0ME', 'Monitor', 'Dell', '24FHDTN', 'Ne tak pekny monitor bez stojanku', 10, 8);
  194. INSERT INTO Technika (ID, Výrobní_číslo, Typ, Výrobce, Model_techniky, Specifikace, ID_Umístění, ID_Uživatele)
  195.     VALUES (5, '54J61LE55B', 'Myš', 'Hama', 'SCRL456', 'Obyčejná PC myš', 20, 9);
  196.  
  197. -- Vlozeni oprav
  198. INSERT INTO Oprava (ID, Kdy, Aktuální_stav, ID_Techniky, ID_Správce)
  199.     VALUES (1, '20.4.2019', 'Probíhá', 3, 3);
  200. INSERT INTO Oprava (ID, Kdy, Aktuální_stav, ID_Techniky, ID_Správce)
  201.     VALUES (2, '1.4.2019', 'Vyřízeno', 1, 1);
  202. INSERT INTO Oprava (ID, Kdy, Aktuální_stav, ID_Techniky, ID_Správce)
  203.     VALUES (3, '10.4.2019', 'Probíhá', 2, 2);
  204. INSERT INTO Oprava (ID, Kdy, Aktuální_stav, ID_Techniky, ID_Správce)
  205.     VALUES (4, '18.3.2019', 'Vyřízeno', 4, 1);
  206.  
  207. -- Vlozeni zadosti
  208. INSERT INTO Žádost (ID, Kdy, ID_Techniky, ID_Opravy, ID_Správce, ID_Uživatele)
  209.     VALUES (1, '1.4.2019', 3, 1, 2, 5);
  210. INSERT INTO Žádost (ID, Kdy, ID_Techniky, ID_Opravy, ID_Správce, ID_Uživatele)
  211.     VALUES (2, '2.4.2019', 1, 2, 3, 6);
  212. INSERT INTO Žádost (ID, Kdy, ID_Techniky, ID_Opravy, ID_Správce, ID_Uživatele)
  213.     VALUES (3, '2.4.2019', 1, 2, 1, 7);
  214.  
  215. -- Spravuje
  216. INSERT INTO Spravuje (ID, ID_Správce, ID_Techniky)
  217.     VALUES (1, 1, 1);
  218. INSERT INTO Spravuje (ID, ID_Správce, ID_Techniky)
  219.     VALUES (2, 2, 2);
  220. INSERT INTO Spravuje (ID, ID_Správce, ID_Techniky)
  221.     VALUES (3, 3, 3);
  222. INSERT INTO Spravuje (ID, ID_Správce, ID_Techniky)
  223.     VALUES (4, 4, 4);
  224. INSERT INTO Spravuje (ID, ID_Správce, ID_Techniky)
  225.     VALUES (5, 1, 5);
  226.  
  227. -- SELECTY
  228. -- Umístění uživatelů amístností, kteří jsou v prvním patře a nejmenují se Pavel (spojení dvou tabulek)
  229. SELECT U.Jméno, U.Příjmení, M.Číslo_místnosti AS místnost
  230. FROM Účet U
  231.   INNER JOIN Místnost M ON U.ID_Umístění = M.Číslo_místnosti
  232. WHERE M.Patro = 1 AND Jméno <> 'Pavel';
  233.  
  234. -- Výpis jmen uživatelů, kteří bydlí v Pardubicích, a kteří vlastní techniku (spojení dvou tabulek)
  235. SELECT T.Typ, T.Výrobce, U.Jméno, U.Příjmení
  236. FROM Účet U
  237.   INNER JOIN Technika T ON U.ID = T.ID_Uživatele
  238. WHERE U.Město = 'Pardubice';
  239.  
  240. -- Vypsání monitorů v opravě včetně správce, který za ní zodpovídá (spojení tří tabulek)
  241. SELECT O.Aktuální_stav, T.Výrobní_číslo, T.Typ, T.Výrobce, U.Jméno AS Jméno_správce, U.Příjmení AS Příjmení_správce
  242. FROM Technika T
  243.   INNER JOIN Oprava O ON T.ID = O.ID_Techniky
  244.   INNER JOIN Účet U ON O.ID_Správce = U.ID
  245. WHERE T.Typ = 'Monitor';
  246.  
  247. -- Vypis počtů technik stejného typu s počtem větším než 1 (dotaz s klauzulí GROUP BY a agregační funkcí)
  248. SELECT T.Typ, COUNT(*) AS Počet
  249. FROM Technika T
  250. GROUP BY T.Typ
  251. HAVING COUNT(*) > 1;
  252.  
  253. -- Počet lidí v jednotlivých místnostech v prvním patře (dotaz s klauzulí GROUP BY a agregační funkcí)
  254. SELECT M.Číslo_místnosti, COUNT(*) AS Počet
  255. FROM Účet U INNER JOIN Místnost M ON U.ID_Umístění = M.Číslo_místnosti
  256. WHERE M.Patro = 1
  257. GROUP BY M.Číslo_místnosti;
  258.  
  259. SELECT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement