-
Notifications
You must be signed in to change notification settings - Fork 0
/
Schema_Cerveceria.sql
230 lines (204 loc) · 7.53 KB
/
Schema_Cerveceria.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
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
-- Tabla para almacenar información de las cervezas
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Cerveza')
BEGIN
-- Crear la tabla Cervezas
CREATE TABLE Cerveza (
CervezaID INT PRIMARY KEY,
Estilo VARCHAR(50) NOT NULL,
GraduacionAlcoholica DECIMAL(3, 1),
VolumenLitros DECIMAL(4, 2),
Precio DECIMAL(5, 2) NOT NULL,
Descripcion TEXT,
IBU INT,
SRM INT
);
END
-- Tabla para almacenar información de los ingredientes de las cervezas
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Ingredientes')
BEGIN
-- Crear la tabla Ingredientes
CREATE TABLE Ingredientes (
IngredienteID INT PRIMARY KEY,
TipoIngrediente VARCHAR(50) NOT NULL,
CantidadStok INT,
CantUnidLitros DECIMAL(8, 4),
Origen VARCHAR(50),
Descripcion TEXT,
FechaIngreso DATE,
Proveedor VARCHAR(50),
PrecioUnitario DECIMAL(8, 2),
CervezaID INT,
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END
-- Tablas para la produccion de cerveza.
-- Tabla para almacenar información sobre la producción de cerveza
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ProduccionCerveza')
BEGIN
-- Crear la tabla ProduccionCerveza
CREATE TABLE ProduccionCerveza (
ProduccionID INT PRIMARY KEY,
CervezaID INT,
FechaProduccion DATE NOT NULL,
CantidadProducida DECIMAL(8, 2) NOT NULL,
Estado VARCHAR(50) NOT NULL,
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END
-- Tabla para almacenar información sobre los pasos de producción de cerveza
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'PasosProduccion')
BEGIN
-- Crear la tabla PasosProduccion
CREATE TABLE PasosProduccion (
PasoID INT PRIMARY KEY,
ProduccionID INT,
Descripcion VARCHAR(100) NOT NULL,
FechaPaso DATE NOT NULL,
FOREIGN KEY (ProduccionID) REFERENCES ProduccionCerveza(ProduccionID)
);
END
-- Tablas para el manejo de Stock
-- Tabla para almacenar información sobre el inventario de cervezas
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'InventarioCervezas')
BEGIN
-- Crear la tabla InventarioCervezas
CREATE TABLE InventarioCervezas (
CervezaID INT PRIMARY KEY,
CantidadStock DECIMAL(8, 2) NOT NULL,
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END
-- Tabla para almacenar información sobre los clientes
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Clientes')
BEGIN
-- Crear la tabla Clientes
CREATE TABLE Clientes (
ClienteID INT PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Email VARCHAR(50),
Telefono VARCHAR(15),
Direccion VARCHAR(100),
Ciudad VARCHAR(50),
Pais VARCHAR(50),
CodigoPostal VARCHAR(10)
);
END
-- Tabla para almacenar información sobre las ventas de cervezas
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Orden')
BEGIN
-- Crear la tabla Orden
CREATE TABLE Orden (
VentaID INT PRIMARY KEY,
FechaVenta DATE NOT NULL,
CervezaID INT,
Cantidad DECIMAL(8, 2) NOT NULL,
PrecioTotal DECIMAL(8, 2) NOT NULL,
ClienteID INT,
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID),
FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID)
);
END
-- Tablas para la distribucion
-- Tabla para almacenar información de las subcursales
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Subcursales')
BEGIN
-- Crear la tabla Subcursales
CREATE TABLE Subcursales (
SubcursalID INT PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Direccion VARCHAR(100),
Ciudad VARCHAR(50),
Pais VARCHAR(50),
CodigoPostal VARCHAR(10)
);
END
-- Tabla para almacenar información de los productos en cada subcursal
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'InventarioSubcursal')
BEGIN
-- Crear la tabla InventarioSubcursal
CREATE TABLE InventarioSubcursal (
SubcursalID INT,
CervezaID INT,
CantidadStock DECIMAL(8, 2) NOT NULL,
PRIMARY KEY (SubcursalID, CervezaID),
FOREIGN KEY (SubcursalID) REFERENCES Subcursales(SubcursalID),
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END
-- Tabla para almacenar información sobre las entregas a subcursales
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'EntregasSubcursales')
BEGIN
CREATE TABLE EntregasSubcursales (
EntregaID INT PRIMARY KEY,
FechaEntrega DATE NOT NULL,
SubcursalDestinoID INT,
CervezaID INT,
CantidadEntregada DECIMAL(8, 2) NOT NULL,
PrecioTotalEntrega DECIMAL(8, 2) NOT NULL,
FOREIGN KEY (SubcursalDestinoID) REFERENCES Subcursales(SubcursalID),
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END
-- Tabla para almacenar información sobre los proveedores
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Proveedores')
BEGIN
CREATE TABLE Proveedores (
ProveedorID INT PRIMARY KEY,
Nombre VARCHAR(50) NOT NULL,
Contacto VARCHAR(50),
Telefono VARCHAR(15),
Email VARCHAR(50)
);
END
-- Tabla para almacenar información sobre los proveedores de las subcursales
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ProveedoresSubcursales')
BEGIN
CREATE TABLE ProveedoresSubcursales (
SubcursalID INT,
ProveedorID INT,
PRIMARY KEY (SubcursalID, ProveedorID),
FOREIGN KEY (SubcursalID) REFERENCES Subcursales(SubcursalID),
FOREIGN KEY (ProveedorID) REFERENCES Proveedores(ProveedorID)
);
END
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'TransaccionesInventario')
BEGIN
-- Create the table TransaccionesInventario
CREATE TABLE TransaccionesInventario (
TransaccionID INT PRIMARY KEY,
CervezaID INT,
FechaTransaccion DATE NOT NULL,
CantidadAntes DECIMAL(8, 2) NOT NULL,
CantidadDespues DECIMAL(8, 2) NOT NULL,
TipoTransaccion VARCHAR(20) NOT NULL,
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END;
-- Añadir tabla de historial de precios
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'HistorialPrecios')
BEGIN
-- Create the table HistorialPrecios
CREATE TABLE HistorialPrecios (
HistorialID INT PRIMARY KEY,
CervezaID INT,
FechaCambio DATE NOT NULL,
PrecioAntes DECIMAL(5, 2) NOT NULL,
PrecioDespues DECIMAL(5, 2) NOT NULL,
FOREIGN KEY (CervezaID) REFERENCES Cerveza(CervezaID)
);
END;
-- Añadir índices
CREATE INDEX IX_Cerveza_Estilo ON Cerveza(Estilo);
CREATE INDEX IX_Ingredientes_CervezaID ON Ingredientes(CervezaID);
CREATE INDEX IX_ProduccionCerveza_CervezaID ON ProduccionCerveza(CervezaID);
CREATE INDEX IX_PasosProduccion_ProduccionID ON PasosProduccion(ProduccionID);
CREATE INDEX IX_InventarioCervezas_CervezaID ON InventarioCervezas(CervezaID);
CREATE INDEX IX_Orden_ClienteID ON Orden(ClienteID);
CREATE INDEX IX_Orden_CervezaID ON Orden(CervezaID);
CREATE INDEX IX_EntregasSubcursales_CervezaID ON EntregasSubcursales(CervezaID);
CREATE INDEX IX_ProveedoresSubcursales_ProveedorID ON ProveedoresSubcursales(ProveedorID);
-- Añadir claves únicas compuestas
ALTER TABLE Ingredientes
ADD CONSTRAINT UQ_Ingredientes UNIQUE (IngredienteID, CervezaID);
ALTER TABLE InventarioSubcursal
ADD CONSTRAINT UQ_InventarioSubcursal UNIQUE (SubcursalID, CervezaID);