· 9 years ago · Jan 10, 2017, 10:30 AM
1--CREATE DATABASE projektuppgift;
2
3
4
5--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Anställda' and xtype='U')
6--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Projekt' and xtype='U')
7--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Projektledare' and xtype='U')
8--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Etapper' and xtype='U')
9--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Projektbefattningar' and xtype='U')
10--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Befattningar' and xtype='U')
11--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Projektfaser' and xtype='U')
12--IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME ='Projekt' and xtype='U')
13
14
15
16GO
17
18 CREATE TABLE Projekt
19 (
20 ProjektID INT NOT NULL CHECK (ProjektID > 0),
21 Projektnummer INT NOT NULL CHECK (Projektnummer BETWEEN 00000 AND 99999),
22 Budget INT NOT NULL
23 CHECK (Budget < 100000000),
24 Startdatum DATE NOT NULL
25 DEFAULT GETDATE(),
26 Slutdatum DATE NOT NULL,
27 PRIMARY KEY (ProjektID, Projektnummer),
28 )
29
30 CREATE TABLE Anställda
31 (
32 Anställningsnummer INT PRIMARY KEY
33 CHECK (Anställningsnummer BETWEEN 1000 AND 9999),
34 Namn VARCHAR(35) NOT NULL,
35 Timpris INT NOT NULL DEFAULT 0
36 CHECK (Timpris BETWEEN 0 AND 5000)
37 );
38
39 CREATE TABLE Befattningar
40 (
41 Befattningsnamn VARCHAR(50) PRIMARY KEY,
42 Beskrivning VARCHAR(300)
43 )
44
45 CREATE TABLE Projektledare
46 (
47 Anställningsnummer INT NOT NULL CONSTRAINT fk_anställningsnummer REFERENCES Anställda(Anställningsnummer),
48 ProjektID INT NOT NULL
49 CONSTRAINT fk_projektid REFERENCES Projekt(ProjektID),
50 Projektnummer INT,
51 Namn VARCHAR(35),
52 Startdatum DATE,
53 Slutdatum DATE,
54 CONSTRAINT pk_projektledare PRIMARY KEY (Anställningsnummer, ProjektID)
55 )
56
57 CREATE TABLE Etapper
58 (
59
60 Etappnummer INT NOT NULL CHECK(Etappnummer BETWEEN 0 AND 50),
61 ProjektID INT NOT NULL
62 CONSTRAINT fk_projektID REFERENCES Projekt(ProjektID),
63 Etappnamn VARCHAR(40),
64 Startdatum DATE,
65 Slutdatum DATE,
66 Budget INT,
67 --CONSTRAINT fk_budget REFERENCES Projekt(Budget),
68
69 CONSTRAINT pk_etapper PRIMARY KEY(Etappnummer, ProjektID)
70 )
71
72 CREATE TABLE Projektfaser
73 (
74 ProjektID
75 INT
76
77 CONSTRAINT pk_projektid REFERENCES Projekt(ProjektID),
78 Fasnamn
79 VARCHAR(255),
80
81 Etappnummer
82 INT
83 NOT NULL
84 CONSTRAINT fk_etappnummer REFERENCES Etapper(Etappnummer),
85 Projektnummer
86 INT
87 CONSTRAINT fk_projektnummer REFERENCES Projekt(Projektnummer),
88 Projektbefattning
89 VARCHAR(50)
90 CONSTRAINT fk_projektbefattning REFERENCES Befattningar(Befattningsnamn),
91 Startdatum
92 DATE
93 ,
94 Slutdatum
95 DATE,
96 Budget
97 INT,
98 --CONSTRAINT fk_budget REFERENCES Projekt(Budget),
99
100 CONSTRAINT PK_projektfaser PRIMARY KEY (ProjektID, Fasnamn),
101
102 )
103
104 CREATE TABLE Behov
105 (
106 BehovsID
107 INT
108 PRIMARY KEY
109 CHECK (BehovsID > 0),
110 Fasnamn
111 VARCHAR(255) --Kontrollera att det är samma som i Projekt.Fasnamn
112 CONSTRAINT fk_fasnamn REFERENCES Projektfaser(Fasnamn),
113 Beskrivning
114 VARCHAR(500)
115 NOT NULL,
116
117 Startdatum
118 DATE,
119 --FOREIGN KEY (Startdatum) REFERENCES Projektfaser(Startdatum),
120 Slutdatum
121 DATE
122 --FOREIGN KEY (Slutdatum) REFERENCES Projektfaser(Slutdatum)
123 );
124
125
126 CREATE TABLE Projektbefattningar
127 (
128 Befattningsnummer
129 INT
130 PRIMARY KEY,
131
132 BehovsID
133 INT
134 CONSTRAINT fk_behovsid REFERENCES Behov(BehovsID),
135 Anställningsnummer
136 INT
137 CONSTRAINT fk_anställningsnummer REFERENCES Anställda(Anställningsnummer),
138 ProjektID
139 INT
140 CONSTRAINT fk_projektid REFERENCES Projekt(ProjektID),
141 Etapp
142 INT, --ett stort frågetecken i jens tolkningar
143 Startdatum
144 DATE,
145 Slutdatum
146 DATE,
147 Arbetsuppgift
148 VARCHAR(300)
149 );
150
151
152
153
154 GO
155
156--DELETE FROM Anställda;
157--INSERT INTO Anställda (Anställningsnummer, Namn, Timpris)
158--VALUES ('1000', 'Jens Madsen', '4003');
159----E12: Anställda.Anställningsnummer får ej återanvändas
160--DELETE FROM Anställda WHERE Anställningsnummer = '1000';
161--INSERT INTO Anställda (Anställningsnummer, Namn, Timpris)
162--VALUES ('1000', 'Jens Madsen', '4003');
163----E13: Anställda.Anställningsnummer måste vara unikt
164--INSERT INTO Anställda (Anställningsnummer, Namn, Timpris)
165--VALUES ('1000', 'Hannes Florén', '4003');
166----E14: Anställda.Anställningsnummer får ej ändras
167--UPDATE Anställda
168--SET Anställningsnummer='1002'
169--WHERE Anställningsnummer='1000'
170--SELECT * FROM Anställda;
171
172GO
173
174
175
176-- FYSISK IMPLEMENTERING SIDA 99 (FÅR EJ TAS BORT FÖRENS 10 ÅR EFTER SISTA ARBETSDAG)