-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
209 lines (169 loc) · 6.25 KB
/
Copy pathschema.sql
File metadata and controls
209 lines (169 loc) · 6.25 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
--PROYECTO 2
-- Juan Diego Porras, 12-10566
--Eliminamos la BD si existe
DROP DATABASE IF EXISTS 12-10566;
--Creamos la BD
CREATE DATABASE 12-10566;
--Nos conectamos a la BD
\c 12-10566
/*Tablas Auxiliares*/
CREATE TABLE IF NOT EXISTS clientes(
id_clientes SERIAL PRIMARY KEY,
nombre VARCHAR(64) NOT NULL,
apellido VARCHAR(64) NOT NULL,
usuario VARCHAR(64) UNIQUE NOT NULL,
clave VARCHAR(64) NOT NULL,
tiempo_registro TIMESTAMP NOT NULL, --time_inserted
codigo_confirmacion VARCHAR(255) NOT NULL,
--tiempo_confirmacion TIMESTAMP,
--ciudad INT REFERENCES city(id_city),
direccion VARCHAR(255),
correo VARCHAR(128) NOT NULL,
telefono VARCHAR(128),
ciudad VARCHAR(128) NOT NULL,
--id_ciudad_entrega INT REFERENCES city(id_city),
direccion_entrega VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS ciudad(
id_ciudad SERIAL PRIMARY KEY,
nombre VARCHAR(128) NOT NULL,
codigo_postal VARCHAR(16) NOT NULL
);
CREATE TABLE IF NOT EXISTS objeto(
id_objeto SERIAL PRIMARY KEY,
nombre_objeto VARCHAR(255) UNIQUE NOT NULL,
precio DECIMAL(10,2) NOT NULL,
foto_objeto TEXT,
descripcion TEXT
--id_unidad INT REFERENCES unit(id_unit) NOT NULL
);
CREATE TABLE IF NOT EXISTS empleado(
id_employees SERIAL PRIMARY KEY,
nombre_empleado VARCHAR(255)
);
--Tablas originales de la BD
CREATE TABLE IF NOT EXISTS unit(
id_unit SERIAL PRIMARY KEY,
unit_name VARCHAR(64) UNIQUE NOT NULL,
unit_short VARCHAR(8) UNIQUE
);
CREATE TABLE IF NOT EXISTS item(
id_item SERIAL PRIMARY KEY,
item_name VARCHAR(255) UNIQUE NOT NULL,
price DECIMAL(10,2) NOT NULL,
item_photo TEXT,
description TEXT,
unit_id INT REFERENCES unit(id_unit) NOT NULL
);
CREATE TABLE IF NOT EXISTS employees(
id_empleado SERIAL PRIMARY KEY,
codigo_empleado VARCHAR(32) UNIQUE NOT NULL,
nombre_empleado VARCHAR(64) NOT NULL,
apellido_empleado VARCHAR(64) NOT NULL
);
--Revisar como colocar que el par (cityname,postal_code) sea unico
CREATE TABLE IF NOT EXISTS city(
id_city SERIAL PRIMARY KEY,
city_name VARCHAR(128) NOT NULL,
postal_code VARCHAR(16) NOT NULL
);
CREATE TABLE IF NOT EXISTS customer(
id_customer SERIAL PRIMARY KEY,
first_name VARCHAR(64) NOT NULL,
last_name VARCHAR(64) NOT NULL,
user_name VARCHAR(64) UNIQUE NOT NULL,
password VARCHAR(64) NOT NULL,
time_inserted TIMESTAMP NOT NULL,
confirmation_code VARCHAR(255) NOT NULL,
time_confirmed TIMESTAMP,
contact_email VARCHAR(128) NOT NULL,
contact_phone VARCHAR(128),
city_id INT REFERENCES city(id_city),
address VARCHAR(255),
deliver_city_id INT REFERENCES city(id_city),
deliver_address VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS place_order(
id_place_order SERIAL PRIMARY KEY,
customer_id INT REFERENCES customer(id_customer) NOT NULL,
time_placed TIMESTAMP NOT NULL,
details TEXT,
delivery_city_id INT REFERENCES city(id_city) NOT NULL,
delivery_addres VARCHAR(255) NOT NULL,
grade_customer INT DEFAULT NULL,
grade_employee INT DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS order_item(
id_order_item SERIAL PRIMARY KEY,
place_order_id INT REFERENCES place_order(id_place_order),
item_id INT REFERENCES item(id_item),
quantity DECIMAL(10,3),
price DECIMAL(10,2)
);
CREATE TABLE IF NOT EXISTS delivery(
id_delivery SERIAL PRIMARY KEY,
delivery_time_planned TIMESTAMP NOT NULL,
delivery_time_actual TIMESTAMP,
notes TEXT,
place_order_id INT REFERENCES place_order(id_place_order) NOT NULL,
employee_id INT REFERENCES employees(id_employees)
);
CREATE TABLE IF NOT EXISTS box(
id_box SERIAL PRIMARY KEY,
box_code VARCHAR(32) UNIQUE NOT NULL,
delivery_id INT REFERENCES delivery(id_delivery) NOT NULL,
employee_id INT REFERENCES employees(id_employees) NOT NULL
);
CREATE TABLE IF NOT EXISTS item_in_box(
id_item_in_box SERIAL PRIMARY KEY,
box_id INT REFERENCES box(id_box) NOT NULL,
item_id INT REFERENCES item(id_item) NOT NULL,
quantity DECIMAL(10,3) NOT NULL,
is_replacement BOOL NOT NULL
);
CREATE TABLE IF NOT EXISTS status_catalog(
id_status_catalog SERIAL PRIMARY KEY,
status_name VARCHAR(128) NOT NULL
);
CREATE TABLE IF NOT EXISTS order_status(
id_order_status SERIAL PRIMARY KEY,
status_catalog_id INT REFERENCES status_catalog(id_status_catalog) NOT NULL,
place_order_id INT REFERENCES place_order(id_place_order) NOT NULL,
status_time TIMESTAMP NOT NULL,
details TEXT
);
--Averiguar como especificar que employee_id y customer_id no sean null a la vez
CREATE TABLE IF NOT EXISTS notes(
id_notes SERIAL PRIMARY KEY,
place_order_id INT REFERENCES place_order(id_place_order) NOT NULL,
employee_id INT REFERENCES employees(id_employees),
customer_id INT REFERENCES customer(id_customer),
note_time TIMESTAMP NOT NULL,
note_text TEXT NOT NULL
);
--Copiamos la data sintetica en las tablas auxiliares
COPY clientes(id_clientes,nombre,apellido,usuario,clave,tiempo_registro,codigo_de_confirmacion,correo,telefono,ciudad,direccion,direccion_entrega) from '/var/tmp/tablaClientesPequena.csv' delimiter ',' csv header;
COPY ciudad(id_ciudad,nombre,codigo_postal) from '/var/tmp/tablaCiudadPequena.csv' delimiter ',' csv header;
COPY objeto(id_objeto,nombre_objeto,precio,foto_objeto,descripcion) from '/var/tmp/tablaItemPequena.csv'
COPY unit(id_unit,unit_name,unit_short) from '/var/tmp/tablaMedidas.csv'
COPY empleado(id_empleado,codigo_empleado,nombre_empleado,apellido_empleado) from '/var/tmp/tablaEmpleadoPequena.csv'
--Insertamos la informacion de las tablas auxiliares en las tablas orignales de la BD
INSERT INTO city(city_name,postal_code)
SELECT ciudad,codigo_postal
FROM ciudad;
INSERT INTO item(item_name,price,item_photo,description,unit_id)
SELECT nombre_objeto,precio,foto_objeto,descripcion
FROM objeto;
INSERT INTO employees(codigo_empleado,nombre_empleado,apellido_empleado)
SELECT codigo_empleado,nombre_empleado,apellido_empleado
FROM empleado;
INSERT INTO customer(first_name,last_name,user_name,password,time_inserted,confirmation_code,
time_confirmed,contact_email,contact_phone,city_id,address,deliver_city_id,deliver_address)
SELECT(nombre,apellido,usuario,clave,tiempo_registro,codigo_de_confirmacion,correo,telefono,ciudad,direccion,direccion_entrega)
FROM clientes;
##PARA EL TIME_CONFIRMED:
/*INSERT INTO tbl_ItemTransactions
(TransactionDate, TransactionName)
SELECT x, 'dbrnd'
FROM generate_series('2008-01-01 00:00:00'::timestamptz, '2018-02-01 00:00:00'::timestamptz,'1 days'::interval) a(x);
*/