Guest User

Untitled

a guest
Jun 12th, 2017
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 6.77 KB | None | 0 0
  1. DROP TABLE banertilbooking
  2.  
  3. DROP TABLE booking
  4.  
  5. DROP TABLE bane
  6.  
  7. DROP TABLE banepris
  8.  
  9. DROP TABLE kunde
  10.  
  11. DROP TABLE firma
  12.  
  13. CREATE TABLE firma
  14.   (
  15.      firmaid       INT IDENTITY PRIMARY KEY,
  16.      navn          VARCHAR (50),
  17.      opsparettimer INT
  18.   )
  19.  
  20. CREATE TABLE kunde
  21.   (
  22.      kundeid       INT IDENTITY PRIMARY KEY NONCLUSTERED,
  23.      navn          VARCHAR (50),
  24.      email         VARCHAR (50),
  25.      telefonnummer CHAR(8),-- non clustered
  26.      firmaid       INT FOREIGN KEY REFERENCES firma(firmaid),
  27.   )
  28.  
  29. CREATE NONCLUSTERED INDEX bigindex
  30.   ON kunde(telefonnummer)
  31.   include (navn, email)
  32.  
  33. CREATE TABLE banepris
  34.   (
  35.      baneprisid INT IDENTITY PRIMARY KEY,
  36.      tid        TIME,
  37.      pris       INT
  38.   )
  39.  
  40. CREATE TABLE bane
  41.   (
  42.      baneid      INT IDENTITY PRIMARY KEY,
  43.      beskrivelse VARCHAR(50),
  44.   )
  45.  
  46. CREATE TABLE booking
  47.   (
  48.      bookingid     INT IDENTITY PRIMARY KEY NONCLUSTERED,
  49.      dato          DATETIME,-- clustered index  
  50.      antalpersoner INT,
  51.      gratis        BIT,
  52.      kundeid       INT FOREIGN KEY REFERENCES kunde(kundeid) NOT NULL,
  53.      baneprisid    INT FOREIGN KEY REFERENCES banepris(baneprisid) NOT NULL,
  54.   )
  55.  
  56. CREATE CLUSTERED INDEX bigindex
  57.   ON booking(dato)
  58.  
  59. CREATE NONCLUSTERED INDEX nonindex
  60.   ON booking(kundeid)
  61.  
  62. CREATE TABLE banertilbooking
  63.   (
  64.      banertilbookingid INT IDENTITY PRIMARY KEY NONCLUSTERED,
  65.      bookingid         INT FOREIGN KEY REFERENCES booking(bookingid) NOT NULL,
  66.      baneid            INT FOREIGN KEY REFERENCES bane(baneid) NOT NULL
  67.   -- clustered index  
  68.   )
  69.  
  70. CREATE CLUSTERED INDEX baneindex
  71.   ON banertilbooking(baneid)
  72.  
  73. -- Insert
  74. INSERT INTO firma
  75. VALUES      ('Lego A/S',
  76.              0),
  77.             ('EAAA',
  78.              0)
  79.  
  80. INSERT INTO kunde
  81. VALUES      ('Jesper Petersen',
  82.              'jesper_petersen@mail.com',
  83.              '12345678',
  84.              1),
  85.             ('Sandy Vu',
  86.              'sandy_vu@mail.com',
  87.              '22345678',
  88.              1),
  89.             ('Lærke Sejr',
  90.              'lærke_sejr@mail.com',
  91.              '32345678',
  92.              1)
  93.  
  94. INSERT INTO banepris
  95. VALUES      ('11:00',
  96.              50),
  97.             ('12:00',
  98.              50),
  99.             ('13:00',
  100.              50),
  101.             ('14:00',
  102.              50),
  103.             ('15:00',
  104.              50),
  105.             ('16:00',
  106.              70),
  107.             ('17:00',
  108.              70),
  109.             ('18:00',
  110.              100),
  111.             ('19:00',
  112.              100),
  113.             ('20:00',
  114.              100),
  115.             ('21:00',
  116.              100)
  117.  
  118. DECLARE @i INT
  119.  
  120. SELECT @i = 1
  121.  
  122. WHILE @i < 33
  123.   BEGIN
  124.       IF ( @i < 7
  125.             OR @i > 24 )
  126.         BEGIN
  127.             INSERT INTO bane
  128.             VALUES      ('Lille hal')
  129.         END
  130.       ELSE
  131.         BEGIN
  132.             INSERT INTO bane
  133.             VALUES      ('Stor hal')
  134.         END
  135.  
  136.       SELECT @i = @i + 1
  137.   END
  138.  
  139. INSERT INTO booking
  140. VALUES      ('2017-06-10 12:00:00',
  141.              5,
  142.              1,
  143.              1,
  144.              2),
  145.             ('2017-06-10 12:00:00',
  146.              4,
  147.              1,
  148.              1,
  149.              2),
  150.             ('2017-06-10 12:00:00',
  151.              3,
  152.              1,
  153.              2,
  154.              2),
  155.             ('2017-06-10 18:00:00',
  156.              3,
  157.              1,
  158.              3,
  159.              8),
  160.             ('2017-06-10 18:00:00',
  161.              3,
  162.              1,
  163.              3,
  164.              8)
  165.  
  166. INSERT INTO banertilbooking
  167. VALUES      (1,
  168.              7),
  169.             (1,
  170.              11),
  171.             (2,
  172.              8),
  173.             (3,
  174.              9),
  175.             (4,
  176.              10),
  177.             (5,
  178.              7)
  179.  
  180. -- Opgave 3
  181. DROP TRIGGER inserttrig
  182.  
  183. go
  184.  
  185. CREATE TRIGGER inserttrig
  186. ON booking
  187. FOR INSERT
  188. AS
  189.     IF EXISTS (SELECT dato
  190.                FROM   inserted
  191.                WHERE  dato < Getdate())
  192.         OR EXISTS (SELECT dato
  193.                    FROM   inserted
  194.                    WHERE  dato > Dateadd(mm, 1, Getdate()))
  195.       BEGIN
  196.           PRINT 'Ikke gyldig booking'
  197.  
  198.           ROLLBACK TRAN
  199.       END
  200.  
  201. go
  202.  
  203. -- Opgave 4
  204. go
  205.  
  206. DROP VIEW statistik
  207.  
  208. go
  209.  
  210. CREATE VIEW statistik
  211. AS
  212.   SELECT Datename(dw, t1.dato)   AS UgeDag,
  213.          Cast(t1.dato AS TIME)   AS StartTid,
  214.          Sum(baner)              AS UdlejedeBaner,
  215.          Sum(indt�gt + skopris) AS Indtægt
  216.   FROM   (SELECT b.bookingid,
  217.                  Sum(bp.pris) * b.gratis AS indtægt,
  218.                  Count(bb.bookingid)     AS baner,
  219.                  b.dato
  220.           FROM   booking b,
  221.                  banepris bp,
  222.                  banertilbooking bb
  223.           WHERE  bp.tid = Cast (b.dato AS TIME)
  224.                  AND b.bookingid = bb.bookingid
  225.           GROUP  BY Datename(dw, b.dato),
  226.                     Cast(b.dato AS TIME),
  227.                     b.bookingid,
  228.                     b.gratis,
  229.                     b.dato) AS t1
  230.          JOIN (SELECT b.bookingid,
  231.                       Sum(b.antalpersoner) * 15 AS skopris
  232.                FROM   booking b
  233.                GROUP  BY b.bookingid) AS t2
  234.            ON t1.bookingid = t2.bookingid
  235.   GROUP  BY Datename(dw, t1.dato),
  236.             Cast(t1.dato AS TIME)
  237.  
  238. go
  239.  
  240. SELECT *
  241. FROM   statistik
  242.  
  243. -- Opgave 5
  244. DROP PROC tildeltimer
  245.  
  246. go
  247.  
  248. CREATE PROC Tildeltimer
  249. AS
  250.     SELECT *
  251.     INTO   #temp
  252.     FROM   (SELECT f.firmaid    AS id,
  253.                    Sum(bp.pris) AS omsætning
  254.             FROM   kunde k,
  255.                    firma f,
  256.                    booking b,
  257.                    banepris bp
  258.             WHERE  f.firmaid = k.firmaid
  259.                    AND k.kundeid = b.kundeid
  260.                    AND b.baneprisid = bp.baneprisid
  261.                    AND Datepart(yyyy, b.dato) = Datepart(yyyy, Getdate()) - 1
  262.             GROUP  BY f.firmaid
  263.             HAVING Count(b.bookingid) > 2) AS x
  264.  
  265.     SELECT *
  266.     FROM   #temp
  267.  
  268.     DECLARE @Id INT
  269.  
  270.     WHILE (SELECT Count(*)
  271.            FROM   #temp) > 0
  272.       BEGIN
  273.           SELECT TOP 1 @Id = id
  274.           FROM   #temp
  275.  
  276.           UPDATE firma
  277.           SET    opsparettimer = (SELECT TOP 1 oms�tning
  278.                                   FROM   #temp) / 2500
  279.           WHERE  firmaid = @Id
  280.  
  281.           DELETE #temp
  282.           WHERE  id = @Id
  283.       END
  284.  
  285.     DROP TABLE #temp
  286.  
  287. go
  288.  
  289. EXEC Tildeltimer
  290.  
  291. -- Opgave 8
  292. -- Backup
  293. RESTORE DATABASE eksamensdb FROM dbdev WITH FILE = 3
  294.  
  295. -- Differential backup
  296. RESTORE DATABASE eksamensdb FROM dbdev WITH FILE = 5
  297.  
  298. -- Logs
  299. RESTORE log eksamensdb FROM logdev WITH FILE = 1
  300.  
  301. RESTORE log eksamensdb FROM logdev WITH FILE = 2
Add Comment
Please, Sign In to add comment