-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_tables.sql
More file actions
executable file
·320 lines (259 loc) · 9.12 KB
/
Copy pathcreate_tables.sql
File metadata and controls
executable file
·320 lines (259 loc) · 9.12 KB
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
CREATE DOMAIN Tipo_palabra TEXT
CHECK (VALUE IN ('sustantivo','adjetivo','determinante','adjetivo posesivo','pronombre','preposicion','verbo','conjuncion','adverbio','interjeccion'));
CREATE DOMAIN Genero TEXT
CHECK (VALUE IN ('masculino','femenino','neutro','general'));
CREATE DOMAIN Numero TEXT
CHECK (VALUE IN ('singular','plural'));
CREATE DOMAIN Genero_Numero TEXT
CHECK (VALUE IN ('masculino','femenino','neutro','plural'));
CREATE DOMAIN Persona TEXT
CHECK (VALUE IN ('primera','segunda','tercera'));
CREATE DOMAIN Tipo_pronombre TEXT
CHECK (VALUE IN ('personal','reflexivo','relativo'));
CREATE DOMAIN Tipo_conjuncion TEXT
CHECK (VALUE IN ('coordinante','subordinante'));
CREATE DOMAIN Tipo_verbo TEXT
CHECK (VALUE IN ('regular','irregular'));
CREATE DOMAIN auxiliar TEXT
CHECK (VALUE IN ('haben','sein'));
CREATE DOMAIN caso TEXT
CHECK (VALUE IN ('nominativo','acusativo','dativo','genitivo'));
CREATE DOMAIN tipo_determinante TEXT
CHECK (VALUE IN ('determinado','indeterminado','posesivo','negativo','ninguno'));
CREATE DOMAIN tiempo TEXT
CHECK (VALUE IN ('presente','preterito simple','preterito perfecto'));
CREATE TABLE Casillero (
numero_casillero SERIAL PRIMARY KEY
);
CREATE TABLE Palabra (
Aleman TEXT PRIMARY KEY,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('sustantivo'),
Pronunciacion TEXT NULL,
Numero_casillero INTEGER DEFAULT (1) NOT NULL REFERENCES Casillero ON DELETE RESTRICT
);
CREATE TABLE Declinacion_adjetivo (
Nombre_declinacion TEXT PRIMARY KEY
);
CREATE TABLE Sufijo_adjetivo (
Genero_sustantivo Genero NULL,
Tipo_articulo Tipo_determinante NULL,
Caso Caso,
Numero Numero,
Terminacion TEXT NOT NULL,
Nombre_declinacion TEXT REFERENCES Declinacion_adjetivo ON DELETE CASCADE,
PRIMARY KEY (Genero_sustantivo, Tipo_articulo, Caso, Numero)
);
CREATE TABLE Determinante (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Tipo_determinante Tipo_determinante NOT NULL DEFAULT ('determinado'),
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('determinante'),
Pronunciacion TEXT NULL
);
CREATE OR REPLACE FUNCTION herencia_palabra() RETURNS TRIGGER AS '
BEGIN
INSERT INTO Palabra (Aleman,Imagen,Espanyol,Tipo,Pronunciacion,numero_casillero)
VALUES (NEW.Aleman, NEW.Imagen, NEW.Espanyol, NEW.Tipo, NEW.Pronunciacion,DEFAULT);
RETURN NEW;
END;' LANGUAGE 'plpgsql' WITH (isstrict);
CREATE TRIGGER trigger_herencia_determinante
BEFORE INSERT ON Determinante
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Adjetivo_posesivo (
Aleman TEXT PRIMARY KEY REFERENCES Determinante ON DELETE CASCADE,
Persona_poseedora Persona NULL,
Genero_poseido Genero NULL,
Numero_poseido Numero NULL,
Tipo_determinante Tipo_determinante NOT NULL DEFAULT ('determinado'),
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('adjetivo posesivo'),
Pronunciacion TEXT NULL
);
CREATE OR REPLACE FUNCTION herencia_determinante() RETURNS TRIGGER AS '
BEGIN
INSERT INTO Determinante (Aleman,Tipo_determinante,Imagen,Espanyol,Tipo,Pronunciacion)
VALUES (NEW.Aleman, NEW.Tipo_determinante,NEW.Imagen, NEW.Espanyol, NEW.Tipo, NEW.Pronunciacion);
RETURN NEW;
END;' LANGUAGE 'plpgsql' WITH (isstrict);
CREATE TRIGGER herencia_adjetivo_posesivo
BEFORE INSERT ON Adjetivo_posesivo
FOR EACH ROW EXECUTE PROCEDURE herencia_determinante();
CREATE TABLE Declinacion_determinante (
Caso Caso,
Genero_numero Genero_numero,
Palabra_declinada TEXT,
PRIMARY KEY(Caso,Genero_numero,Palabra_declinada),
Aleman TEXT NOT NULL REFERENCES Determinante
);
CREATE TABLE Declinacion_sustantivo (
Nombre_declinacion TEXT PRIMARY KEY
);
CREATE TABLE Sufijo_sustantivo (
Caso Caso,
Numero Numero,
Terminacion TEXT,
PRIMARY KEY (Caso, Numero, terminacion)
);
CREATE TABLE Sustantivo (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Raiz_singular TEXT NOT NULL,
Raiz_plural TEXT NOT NULL,
Genero Genero NOT NULL DEFAULT ('masculino'),
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('sustantivo'),
Pronunciacion TEXT NULL,
Nombre_declinacion TEXT REFERENCES Declinacion_sustantivo
);
CREATE TABLE R_sufijo_sustantivo_declinacion(
Nombre_declinacion TEXT REFERENCES Declinacion_sustantivo,
Caso Caso NOT NULL,
Numero Numero NOT NULL,
Terminacion TEXT,
FOREIGN KEY (caso, numero,terminacion) REFERENCES sufijo_sustantivo,
PRIMARY KEY (Nombre_declinacion, caso, numero,terminacion)
);
CREATE TRIGGER herencia_sustantivo
BEFORE INSERT ON Sustantivo
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Adjetivo (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Raiz TEXT NOT NULL,
Genero_sustantivo Genero,
Tipo_articulo Tipo_determinante,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('adjetivo'),
Pronunciacion TEXT NULL,
Nombre_declinacion TEXT NULL REFERENCES Declinacion_adjetivo ON DELETE SET NULL
);
CREATE TRIGGER herencia_adjetivo
BEFORE INSERT ON Adjetivo
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Pronombre (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Caso Caso NOT NULL DEFAULT ('nominativo'),
Persona Persona NULL,
Genero Genero NULL,
Numero Numero NULL,
Tipo_pronombre Tipo_pronombre NOT NULL DEFAULT ('personal'),
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('pronombre'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_pronombre
BEFORE INSERT ON Pronombre
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Preposicion (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Caso Caso NOT NULL DEFAULT ('nominativo'),
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('preposicion'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_preposicion
BEFORE INSERT ON Preposicion
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Verbo (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Tipo_verbo Tipo_verbo NOT NULL DEFAULT ('regular'),
Auxiliar Auxiliar NOT NULL DEFAULT ('haben'),
Participio TEXT NOT NULL,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('verbo'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_verbo
BEFORE INSERT ON Verbo
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Conjugacion_regular (
Nombre_conjugacion TEXT PRIMARY KEY
);
CREATE OR REPLACE FUNCTION herencia_verbo() RETURNS TRIGGER AS '
BEGIN
INSERT INTO Verbo (Aleman,Tipo_verbo,Auxiliar,Participio,Imagen,Espanyol,Tipo,Pronunciacion)
VALUES (NEW.Aleman, NEW.Tipo_verbo, NEW.Auxiliar,NEW.Participio,NEW.Imagen, NEW.Espanyol, NEW.Tipo, NEW.Pronunciacion);
RETURN NEW;
END;' LANGUAGE 'plpgsql' WITH (isstrict);
CREATE TABLE Verbo_regular(
Aleman TEXT PRIMARY KEY REFERENCES Verbo ON DELETE CASCADE,
Raiz TEXT NOT NULL,
Tipo_verbo Tipo_verbo NOT NULL DEFAULT ('regular'),
Auxiliar Auxiliar NOT NULL DEFAULT ('haben'),
Participio TEXT NOT NULL,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('verbo'),
Pronunciacion TEXT NULL,
Nombre_conjugacion TEXT NULL REFERENCES Conjugacion_regular ON DELETE SET NULL
);
CREATE TRIGGER herencia_verbo_regular
BEFORE INSERT ON Verbo_regular
FOR EACH ROW EXECUTE PROCEDURE herencia_verbo();
CREATE TABLE Verbo_irregular(
Aleman TEXT PRIMARY KEY REFERENCES Verbo ON DELETE CASCADE,
Tipo_verbo Tipo_verbo NOT NULL DEFAULT ('irregular'),
Auxiliar Auxiliar NOT NULL DEFAULT ('haben'),
Participio TEXT NOT NULL,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('verbo'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_verbo_irregular
BEFORE INSERT ON Verbo_irregular
FOR EACH ROW EXECUTE PROCEDURE herencia_verbo();
CREATE TABLE Desinencia (
Nombre_conjugacion TEXT REFERENCES Conjugacion_regular ON DELETE CASCADE,
Persona Persona ,
Numero Numero ,
Tiempo Tiempo,
Terminacion TEXT,
PRIMARY KEY (Persona, numero, tiempo,terminacion)
);
CREATE TABLE Conjugacion_irregular (
Persona Persona,
Numero Numero,
Tiempo Tiempo,
Palabra_conjugada TEXT,
Aleman TEXT REFERENCES Verbo_irregular,
PRIMARY KEY (Persona,Numero,Tiempo,Palabra_conjugada)
);
CREATE TABLE Conjuncion (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Tipo_conjuncion Tipo_conjuncion NOT NULL DEFAULT ('coordinante'),
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('conjuncion'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_conjuncion
BEFORE INSERT ON Conjuncion
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Adverbio (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('adverbio'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_adverbio
BEFORE INSERT ON Adverbio
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();
CREATE TABLE Interjeccion (
Aleman TEXT PRIMARY KEY REFERENCES Palabra ON DELETE CASCADE,
Imagen TEXT NULL,
Espanyol TEXT NOT NULL,
Tipo Tipo_palabra NOT NULL DEFAULT('interjeccion'),
Pronunciacion TEXT NULL
);
CREATE TRIGGER herencia_interjeccion
BEFORE INSERT ON Interjeccion
FOR EACH ROW EXECUTE PROCEDURE herencia_palabra();