-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate.sql
158 lines (133 loc) · 4.5 KB
/
create.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
CREATE SEQUENCE seq_schriftstueck;
CREATE SEQUENCE seq_autorin INCREMENT BY 7 MINVALUE 10000 NO CYCLE;
CREATE TYPE ZIELGRUPPEALTER AS ENUM ('young', 'middle-aged', 'old');
CREATE TABLE Schriftstueck (
SID INTEGER PRIMARY KEY DEFAULT nextval('seq_schriftstueck'),
Titel VARCHAR(255) NOT NULL,
Seiten INTEGER NOT NULL
);
CREATE TABLE Sachbuch (
SID INTEGER PRIMARY KEY REFERENCES Schriftstueck (SID)
);
CREATE TABLE Roman (
SID INTEGER PRIMARY KEY REFERENCES Schriftstueck (SID),
Genre VARCHAR(255) NOT NULL
);
CREATE TABLE Lyrik (
SID INTEGER PRIMARY KEY REFERENCES Schriftstueck (SID)
);
CREATE TABLE ueber (
Sachbuch INTEGER REFERENCES Sachbuch (SID),
Roman INTEGER REFERENCES Roman (SID),
PRIMARY KEY (Sachbuch, Roman)
);
CREATE TABLE Autorin (
AID INTEGER PRIMARY KEY DEFAULT nextval('seq_autorin'),
Name VARCHAR(255) NOT NULL,
GebDat DATE NOT NULL
);
CREATE TABLE schrieb (
Autorin INTEGER REFERENCES Autorin (AID),
Schriftstueck INTEGER REFERENCES Schriftstueck (SID),
StartDatum DATE NOT NULL,
PRIMARY KEY (Autorin, Schriftstueck)
);
CREATE TABLE Verlag (
Name VARCHAR(255) PRIMARY KEY,
Budget NUMERIC(9, 2) NOT NULL CHECK (Budget >= 10.00 AND Budget <= 1000000.00),
Hauptbereich VARCHAR(5) CHECK (Hauptbereich ~ '^[A-Z+a-z+0-9]{2}[0-9]{3}$'),
Hauptstadt VARCHAR(255)
);
CREATE TABLE Edition (
Schriftstueck INTEGER REFERENCES Schriftstueck (SID),
EDNR INTEGER,
Jahr INTEGER NOT NULL CHECK (Jahr >= 1400),
Verlagsname VARCHAR(255) NOT NULL REFERENCES Verlag (Name),
EditionANR INTEGER NOT NULL,
PRIMARY KEY (Schriftstueck, EDNR)
);
CREATE TABLE Auflage (
Schriftstueck INTEGER,
EDNR INTEGER,
ANR INTEGER,
Druckerei VARCHAR(255) NOT NULL,
FOREIGN KEY (Schriftstueck, EDNR) REFERENCES Edition (Schriftstueck, EDNR),
PRIMARY KEY (Schriftstueck, EDNR, ANR)
);
CREATE TABLE Sonderedition (
Schriftstueck INTEGER NOT NULL,
EDNR INTEGER NOT NULL,
Anlass VARCHAR(255),
FOREIGN KEY (Schriftstueck, EDNR) REFERENCES Edition (Schriftstueck, EDNR),
PRIMARY KEY (Schriftstueck, EDNR)
);
CREATE TABLE Abteilung (
Verlagsname VARCHAR(255) REFERENCES Verlag (Name),
Bereich VARCHAR(5) CHECK(Bereich ~ '^[A-Z+a-z+0-9]{2}[0-9]{3}$'),
Stadt VARCHAR(255),
PRIMARY KEY (Verlagsname, Bereich, Stadt)
);
CREATE TABLE MarketingKanal (
KName VARCHAR(255) PRIMARY KEY,
Kosten NUMERIC
);
CREATE TABLE Social (
Kanal VARCHAR(255) PRIMARY KEY REFERENCES MarketingKanal (KName),
Platform VARCHAR(255) NOT NULL
);
CREATE TABLE Zeitung (
Kanal VARCHAR(255) REFERENCES MarketingKanal (KName),
Schriftstueck INTEGER REFERENCES Schriftstueck (SID),
Auflage INTEGER NOT NULL,
PRIMARY KEY (Kanal, Schriftstueck)
);
CREATE TABLE Zielgruppe (
Bez VARCHAR(255) PRIMARY KEY,
AGruppe ZIELGRUPPEALTER
);
CREATE TABLE wirbt (
Verlagsname VARCHAR(255) REFERENCES Verlag (Name),
Kanal VARCHAR(255) REFERENCES MarketingKanal (KName),
Zielgruppe VARCHAR(255) REFERENCES Zielgruppe (Bez),
Datum DATE,
PRIMARY KEY (Verlagsname, Kanal, Zielgruppe),
UNIQUE (Verlagsname, Datum)
);
CREATE TABLE nutzt (
Zielgruppe VARCHAR(255) REFERENCES Zielgruppe (Bez),
SocialKanal VARCHAR(255) REFERENCES Social (Kanal),
PRIMARY KEY (Zielgruppe, SocialKanal)
);
CREATE TABLE interessiert (
Zielgruppe VARCHAR(255) REFERENCES Zielgruppe (Bez),
Schriftstueck INTEGER REFERENCES Schriftstueck (SID),
PRIMARY KEY (Zielgruppe, Schriftstueck)
);
CREATE TABLE liebt (
Zielgruppe VARCHAR(255) REFERENCES Zielgruppe (Bez),
Autorin INTEGER REFERENCES Autorin (AID),
PRIMARY KEY (Zielgruppe, Autorin)
);
CREATE TABLE hasst (
Zielgruppe VARCHAR(255) REFERENCES Zielgruppe (Bez),
Autorin INTEGER REFERENCES Autorin (AID),
PRIMARY KEY (Zielgruppe, Autorin)
);
CREATE TABLE aka (
alias INTEGER REFERENCES Autorin (AID),
aliasVon INTEGER REFERENCES Autorin (AID),
PRIMARY KEY (alias, aliasVon)
);
CREATE TABLE basiertAuf (
neu INTEGER REFERENCES Roman (SID),
alt INTEGER REFERENCES Roman (SID),
PRIMARY KEY (neu, alt)
);
--(a) Jeder Verlag hat eine Hauptabteilung
ALTER TABLE Verlag ADD CONSTRAINT fk_Hauptabteilung
FOREIGN KEY (Name, Hauptbereich, Hauptstadt) REFERENCES Abteilung (Verlagsname, Bereich, Stadt)
DEFERRABLE INITIALLY DEFERRED;
--(a) Jede Edition hat eine Erstauflage
ALTER TABLE Edition ADD CONSTRAINT fk_Erstauflage
FOREIGN KEY (Schriftstueck, EDNR, EditionANR) REFERENCES Auflage (Schriftstueck, EDNR, ANR)
DEFERRABLE INITIALLY DEFERRED;