domingo, 27 de septiembre de 2009

DDL FINAL

CREATE TABLE Persona(
ID_Persona CHAR(15) NOT NULL,
Primer_Nombre VARCHAR(20) NOT NULL,
Segundo_Nombre VARCHAR(20),
Primer_Apellido VARCHAR(20) NOT NULL,
Segundo_Apellido VARCHAR(20),
Direccion VARCHAR(150),
Sexo CHAR(1) NOT NULL,
Telefono CHAR(9),
PRIMARY KEY(ID_Persona)
)ENGINE=INNODB;

CREATE TABLE Empleado(
ID_Empleado CHAR(15) NOT NULL,
Puesto VARCHAR(15),
PRIMARY KEY(ID_Empleado),
FOREIGN KEY(ID_Empleado) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Cliente(
ID_Cliente CHAR(15) NOT NULL,
Tipo_Cliente CHAR(7),
PRIMARY KEY(ID_Cliente),
FOREIGN KEY(ID_Cliente) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Modulo(
ID_Modulo INT NOT NULL AUTO_INCREMENT,
Descripcion VARCHAR(80),
PRIMARY KEY(ID_Modulo),
UNIQUE(Descripcion)
)ENGINE=INNODB;

CREATE TABLE Usuario(
ID_Usuario VARCHAR(10) NOT NULL,
Contrasenia VARCHAR(32) NOT NULL,
ID_Empleado CHAR(15) NOT NULL,
Pregunta_Secreta VARCHAR(50) NOT NULL,
Respuesta_Secreta VARCHAR(50) NOT NULL,
Ultimo_Ingreso TIMESTAMP NOT NULL,
PRIMARY KEY(ID_Usuario),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
UNIQUE(ID_Empleado)
)ENGINE=INNODB;

CREATE TABLE Accesa(
ID_Usuario VARCHAR(10) NOT NULL,
ID_Modulo INT NOT NULL,
PRIMARY KEY(ID_Usuario, ID_Modulo),
FOREIGN KEY(ID_Usuario) REFERENCES Usuario(ID_Usuario)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Modulo) REFERENCES Modulo(ID_Modulo)
ON UPDATE CASCADE ON DELETE NO ACTION,
UNIQUE(ID_Usuario)
)ENGINE=INNODB;

CREATE TABLE Pedido(
ID_Pedido INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Cliente CHAR(15) NOT NULL,
Fecha_Pedido TIMESTAMP NOT NULL,
Total FLOAT,
PRIMARY KEY(ID_Pedido),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Cliente) REFERENCES Cliente(ID_Cliente)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Proveedor(
Nombre_Empresa VARCHAR(30) NOT NULL,
Tipo_Producto VARCHAR(20),
Correo VARCHAR(30),
Direccion VARCHAR(150) NOT NULL,
Telefono CHAR(9) NOT NULL,
PRIMARY KEY(Nombre_Empresa)
)ENGINE=INNODB;

CREATE TABLE Producto(
ID_Producto INT NOT NULL,
Nombre_Producto VARCHAR(20) NOT NULL,
Nombre_Empresa VARCHAR(30) NOT NULL,
Costo_Unitario FLOAT NOT NULL,
Precio_Unitario FLOAT NOT NULL,
Unidad_Medida VARCHAR(15) NOT NULL,
PRIMARY KEY(ID_Producto),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Bodega(
ID_Bodega INT NOT NULL,
Descripcion VARCHAR(150) NOT NULL,
PRIMARY KEY(ID_Bodega)
)ENGINE=INNODB;

CREATE TABLE Compra(
ID_Compra INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Producto INT NOT NULL,
Cantidad INT NOT NULL,
Fecha_Compra TIMESTAMP NOT NULL,
Total FLOAT,
PRIMARY KEY(ID_Compra),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE De(
ID_Pedido INT NOT NULL,
ID_Producto INT NOT NULL,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Pedido, ID_Producto),
FOREIGN KEY(ID_Pedido) REFERENCES Pedido(ID_Pedido)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Factura(
ID_Factura INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Pedido INT NOT NULL,
Fecha_Factura TIMESTAMP NOT NULL,
ISV FLOAT,
Total FLOAT,
PRIMARY KEY(ID_Factura),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Pedido) REFERENCES Pedido(ID_Pedido)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Cuentas_Cobrar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Cliente CHAR(15) NOT NULL,
ID_Factura INT NOT NULL,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Cliente) REFERENCES Cliente(ID_Cliente)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Factura) REFERENCES Factura(ID_Factura)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Cuentas_Pagar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
Nombre_Empresa VARCHAR(30) NOT NULL,
ID_Empleado CHAR(15) NOT NULL,
ID_Compra INT NOT NULL,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Compra) REFERENCES Compra(ID_Compra)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Inventario(
Correlativo INT NOT NULL AUTO_INCREMENT,
ID_Producto INT NOT NULL,
ID_Bodega INT NOT NULL,
Fecha_Inventario TIMESTAMP NOT NULL,
Cantidad_Inicial INT,
Cantidad_Ingreso INT,
Cantidad_Salida INT,
Cantidad_Final INT,
Tipo_Operacion VARCHAR(15),
PRIMARY KEY(Correlativo, ID_Producto),
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Bodega) REFERENCES Bodega(ID_Bodega)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

MAPEO FINAL

ER FINAL

miércoles, 16 de septiembre de 2009

DDL Version 2.0

CREATE TABLE Persona(
ID_Persona CHAR(15) NOT NULL,
Primer_Nombre VARCHAR(20) NOT NULL,
Segundo_Nombre VARCHAR(20),
Primer_Apellido VARCHAR(20) NOT NULL,
Segundo_Apellido VARCHAR(20),
Direccion VARCHAR(150),
Sexo CHAR(1) NOT NULL,
PRIMARY KEY(ID_Persona)
)ENGINE=INNODB;

CREATE TABLE Empleado(
ID_Empleado CHAR(15) NOT NULL,
Puesto VARCHAR(15),
PRIMARY KEY(ID_Empleado),
FOREIGN KEY(ID_Empleado) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Cliente(
ID_Cliente CHAR(15) NOT NULL,
Tipo_Cliente CHAR(7),
PRIMARY KEY(ID_Cliente),
FOREIGN KEY(ID_Cliente) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Modulo(
ID_Modulo INT NOT NULL AUTO_INCREMENT,
Descripcion VARCHAR(80),
PRIMARY KEY(ID_Modulo),
UNIQUE(Descripcion)
)ENGINE=INNODB;

CREATE TABLE Usuario(
ID_Usuario VARCHAR(10) NOT NULL,
Contrasenia VARCHAR(15) NOT NULL,
ID_Empleado CHAR(15) NOT NULL,
Pregunta_Secreta VARCHAR(50) NOT NULL,
Respuesta_Secreta VARCHAR(50) NOT NULL,
Ultimo_Ingreso TIMESTAMP NOT NULL,
PRIMARY KEY(ID_Usuario),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
UNIQUE(ID_Empleado)
)ENGINE=INNODB;

CREATE TABLE Accesa(
ID_Usuario VARCHAR(10) NOT NULL,
ID_Modulo INT NOT NULL,
PRIMARY KEY(ID_Usuario, ID_Modulo),
FOREIGN KEY(ID_Usuario) REFERENCES Usuario(ID_Usuario)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Modulo) REFERENCES Modulo(ID_Modulo)
ON UPDATE CASCADE ON DELETE NO ACTION,
UNIQUE(ID_Usuario)
)ENGINE=INNODB;

CREATE TABLE Pedido(
ID_Pedido INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Cliente CHAR(15) NOT NULL,
Fecha_Pedido TIMESTAMP NOT NULL,
Descripcion VARCHAR(50),
Total FLOAT,
PRIMARY KEY(ID_Pedido),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Cliente) REFERENCES Cliente(ID_Cliente)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Proveedor(
Nombre_Empresa VARCHAR(30) NOT NULL,
Tipo_Producto VARCHAR(20),
Correo VARCHAR(30),
Direccion VARCHAR(150) NOT NULL,
PRIMARY KEY(Nombre_Empresa)
)ENGINE=INNODB;

CREATE TABLE Telefono_Persona(
ID_Persona CHAR(15) NOT NULL,
Telefono CHAR(9) NOT NULL,
PRIMARY KEY(ID_Persona, Telefono),
FOREIGN KEY(ID_Persona) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Telefono_Proveedor(
Nombre_Empresa VARCHAR(30) NOT NULL,
Telefono CHAR(9) NOT NULL,
PRIMARY KEY(Nombre_Empresa, Telefono),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Producto(
ID_Producto INT NOT NULL,
Nombre_Producto VARCHAR(20) NOT NULL,
Nombre_Empresa VARCHAR(30) NOT NULL,
Costo_Unitario FLOAT NOT NULL,
Precio_Unitario FLOAT NOT NULL,
Unidad_Medida VARCHAR(15) NOT NULL,
PRIMARY KEY(ID_Producto),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Bodega(
ID_Bodega INT NOT NULL,
Descripcion VARCHAR(150) NOT NULL,
PRIMARY KEY(ID_Bodega)
)ENGINE=INNODB;

CREATE TABLE Compra(
ID_Compra INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
Fecha_Compra TIMESTAMP NOT NULL,
Total FLOAT,
PRIMARY KEY(ID_Compra),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Adquiere(
ID_Compra INT NOT NULL,
ID_Producto INT NOT NULL,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Compra, ID_Producto),
FOREIGN KEY(ID_Compra) REFERENCES Compra(ID_Compra)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE De(
ID_Pedido INT NOT NULL,
ID_Producto INT NOT NULL,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Pedido, ID_Producto),
FOREIGN KEY(ID_Pedido) REFERENCES Pedido(ID_Pedido)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Factura(
ID_Factura INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Pedido INT NOT NULL,
Fecha_Factura TIMESTAMP NOT NULL,
ISV FLOAT,
Total FLOAT,
PRIMARY KEY(ID_Factura),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Pedido) REFERENCES Pedido(ID_Pedido)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Existe_En(
ID_Factura INT NOT NULL,
ID_Producto INT NOT NULL,
Cantidad INT NOT NULL,
SubTotal FLOAT,
PRIMARY KEY(ID_Factura, ID_Producto),
FOREIGN KEY(ID_Factura) REFERENCES Factura(ID_Factura)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Cuentas_Cobrar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15) NOT NULL,
ID_Cliente CHAR(15) NOT NULL,
ID_Factura INT NOT NULL,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Cliente) REFERENCES Cliente(ID_Cliente)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Factura) REFERENCES Factura(ID_Factura)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Cuentas_Pagar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
Nombre_Empresa VARCHAR(30) NOT NULL,
ID_Empleado CHAR(15) NOT NULL,
ID_Compra INT NOT NULL,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Compra) REFERENCES Compra(ID_Compra)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

CREATE TABLE Inventario(
Correlativo INT NOT NULL AUTO_INCREMENT,
ID_Producto INT NOT NULL,
ID_Bodega INT NOT NULL,
Fecha_Inventario TIMESTAMP NOT NULL,
Cantidad_Inicial INT,
Cantidad_Ingreso INT,
Cantidad_Salida INT,
Cantidad_Final INT,
Tipo_Operacion VARCHAR(15),
PRIMARY KEY(Correlativo, ID_Producto),
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto)
ON UPDATE CASCADE ON DELETE NO ACTION,
FOREIGN KEY(ID_Bodega) REFERENCES Bodega(ID_Bodega)
ON UPDATE CASCADE ON DELETE NO ACTION
)ENGINE=INNODB;

jueves, 3 de septiembre de 2009

DDL Version 1.02



CREATE TABLE Persona(
ID_Persona CHAR(15) NOT NULL,
Primer_Nombre VARCHAR(20) NOT NULL,
Segundo_Nombre VARCHAR(20),
Primer_Apellido VARCHAR(20) NOT NULL,
Segundo_Apellido VARCHAR(20),
Direccion VARCHAR(150),
Sexo CHAR(1) NOT NULL,
PRIMARY KEY(ID_Persona),
CHECK(Sexo IN('M','F'))
)ENGINE=INNODB;


CREATE TABLE Empleado(
ID_Empleado CHAR(15),
Puesto VARCHAR(15),
PRIMARY KEY(ID_Empleado),
FOREIGN KEY(ID_Empleado) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Cliente(
ID_Cliente CHAR(15),
Tipo_Cliente CHAR(7),
PRIMARY KEY(ID_Cliente),
FOREIGN KEY(ID_Cliente) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE,
CHECK(Tipo_Cliente IN('Credito','Contado'))
)ENGINE=INNODB;


CREATE TABLE Modulo(
ID_Modulo INT NOT NULL,
Descripcion VARCHAR(50),
PRIMARY KEY(ID_Modulo)
)ENGINE=INNODB;


CREATE TABLE Usuario(
ID_Usuario VARCHAR(10) NOT NULL,
Contrasenia VARCHAR(15) NOT NULL,
ID_Empleado CHAR(15),
Pregunta_Secreta VARCHAR(50) NOT NULL,
Respuesta_Secreta VARCHAR(50) NOT NULL,
Ultimo_Ingreso TIMESTAMP NOT NULL,
PRIMARY KEY(ID_Usuario),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE SET NULL
)ENGINE=INNODB;


CREATE TABLE Accesa(
ID_Usuario VARCHAR(10),
ID_Modulo INT,
PRIMARY KEY(ID_Usuario, ID_Modulo),
FOREIGN KEY(ID_Usuario) REFERENCES Usuario(ID_Usuario)
ON UPDATE CASCADE,
FOREIGN KEY(ID_Modulo) REFERENCES Modulo(ID_Modulo)
ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Pedido(
ID_Pedido INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
ID_Cliente CHAR(15),
Fecha_Pedido TIMESTAMP,
Descripcion VARCHAR(50),
Total FLOAT,
PRIMARY KEY(ID_Pedido),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY(ID_Cliente) REFERENCES Cliente(ID_Cliente)
ON UPDATE CASCADE ON DELETE SET NULL
)ENGINE=INNODB;


CREATE TABLE Proveedor(
Nombre_Empresa VARCHAR(30) NOT NULL,
Tipo_Producto VARCHAR(20),
Correo VARCHAR(30),
Direccion VARCHAR(150),
PRIMARY KEY(Nombre_Empresa)
)ENGINE=INNODB;


CREATE TABLE Telefono_Persona(
ID_Persona CHAR(15),
Telefono CHAR(10) NOT NULL,
PRIMARY KEY(ID_Persona, Telefono),
FOREIGN KEY(ID_Persona) REFERENCES Persona(ID_Persona)
ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Telefono_Proveedor(
Nombre_Empresa VARCHAR(30),
Telefono CHAR(10) NOT NULL,
PRIMARY KEY(Nombre_Empresa, Telefono),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Producto(
ID_Producto INT NOT NULL,
Nombre_Producto VARCHAR(20) NOT NULL,
Nombre_Empresa VARCHAR(30) NOT NULL,
Costo_Unitario FLOAT NOT NULL,
Precio_Unitario FLOAT NOT NULL,
Unidad_Medida VARCHAR(15) NOT NULL,
PRIMARY KEY(ID_Producto),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa)
ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Bodega(
ID_Bodega INT NOT NULL,
Descripcion VARCHAR(50),
PRIMARY KEY(ID_Bodega)
)ENGINE=INNODB;


CREATE TABLE Compra(
ID_Compra INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
Fecha_Compra TIMESTAMP,
Total FLOAT,
PRIMARY KEY(ID_Compra),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE SET NULL
)ENGINE=INNODB;


CREATE TABLE Adquiere(
ID_Compra INT,
ID_Producto INT,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Compra, ID_Producto),
FOREIGN KEY(ID_Compra) REFERENCES Compra(ID_Compra) ON UPDATE CASCADE,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto) ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE De(
ID_Pedido INT,
ID_Producto INT,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Pedido, ID_Producto),
FOREIGN KEY(ID_Pedido) REFERENCES Pedido(ID_Pedido) ON UPDATE CASCADE,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto) ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Factura(
ID_Factura INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
ID_Pedido INT,
Fecha_Factura TIMESTAMP NOT NULL,
ISV FLOAT NOT NULL,
Total FLOAT NOT NULL,
PRIMARY KEY(ID_Factura),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY(ID_Pedido) REFERENCES Pedido(ID_Pedido) ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Existe_En(
ID_Factura INT,
ID_Producto INT,
Cantidad INT NOT NULL,
SubTotal FLOAT,
PRIMARY KEY(ID_Factura, ID_Producto),
FOREIGN KEY(ID_Factura) REFERENCES Factura(ID_Factura) ON UPDATE CASCADE,
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto) ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Cuentas_Cobrar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
ID_Cliente CHAR(15),
ID_Factura INT,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY(ID_Cliente) REFERENCES Cliente(ID_Cliente)
ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY(ID_Factura) REFERENCES Factura(ID_Factura) ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Cuentas_Pagar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
Nombre_Empresa VARCHAR(30),
ID_Empleado CHAR(15),
ID_Compra INT,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento),
FOREIGN KEY(Nombre_Empresa) REFERENCES Proveedor(Nombre_Empresa),
FOREIGN KEY(ID_Empleado) REFERENCES Empleado(ID_Empleado)
ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY(ID_Compra) REFERENCES Compra(ID_Compra) ON UPDATE CASCADE
)ENGINE=INNODB;


CREATE TABLE Inventario(
Correlativo INT NOT NULL AUTO_INCREMENT,
ID_Producto INT,
ID_Bodega INT,
Fecha_Inventario TIMESTAMP NOT NULL,
Cantidad_Inicial INT,
Cantidad_Ingreso INT,
Cantidad_Salida INT,
Cantidad_Final INT,
Tipo_Operacion VARCHAR(15),
PRIMARY KEY(Correlativo, ID_Producto),
FOREIGN KEY(ID_Producto) REFERENCES Producto(ID_Producto) ON UPDATE CASCADE,
FOREIGN KEY(ID_Bodega) REFERENCES Bodega(ID_Bodega) ON UPDATE CASCADE
)ENGINE=INNODB;

lunes, 31 de agosto de 2009

DDL Version 1

POR PROBLEMAS CON EL MYSQL ESTA SIN RELACIONES, PENDIENTE DE ARREGLAR

CREATE TABLE Persona(
ID_Persona CHAR(15) NOT NULL,
Primer_Nombre VARCHAR(20) NOT NULL,
Segundo_Nombre VARCHAR(20),
Primer_Apellido VARCHAR(20) NOT NULL,
Segundo_Apellido VARCHAR(20),
Direccion VARCHAR(150),
Sexo CHAR(1) NOT NULL,
PRIMARY KEY(ID_Persona),
CHECK(Sexo in('M','F')));

CREATE TABLE EMPLEADO(
ID_Empleado CHAR(15),
Puesto VARCHAR(15),
PRIMARY KEY(ID_Empleado));

CREATE TABLE Cliente(
ID_Cliente CHAR(15),
Tipo_Cliente CHAR(7),
PRIMARY KEY(ID_Cliente),
CHECK(Tipo_Cliente in('Credito','Contado')));

CREATE TABLE Modulo(
ID_Modulo INT NOT NULL,
Descripcion VARCHAR(50),
PRIMARY KEY(ID_Modulo));

CREATE TABLE Usuario(
ID_Usuario VARCHAR(10) NOT NULL,
Contrasenia VARCHAR(15) NOT NULL,
ID_Empleado CHAR(15),
Pregunta_Secreta VARCHAR(50) NOT NULL,
Respuesta_Secreta VARCHAR(50) NOT NULL,
Ultimo_Ingreso TIMESTAMP NOT NULL,
PRIMARY KEY(ID_Usuario));

CREATE TABLE Accesa(
ID_Usuario VARCHAR(10),
ID_Modulo INT,
PRIMARY KEY(ID_Usuario, ID_Modulo));

CREATE TABLE Pedido(
ID_Pedido INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
ID_Cliente CHAR(15),
Fecha_Pedido TIMESTAMP,
Descripcion VARCHAR(50),
Total FLOAT,
PRIMARY KEY(ID_Pedido));

CREATE TABLE Proveedor(
Nombre_Empresa VARCHAR(30) NOT NULL,
Tipo_Producto VARCHAR(20),
Correo VARCHAR(30),
Direccion VARCHAR(150),
PRIMARY KEY(Nombre_Empresa));

CREATE TABLE Telefono_Persona(
ID_Persona CHAR(15),
Telefono CHAR(10) NOT NULL,
PRIMARY KEY(ID_Persona, Telefono));

CREATE TABLE Telefono_Proveedor(
Nombre_Empresa VARCHAR(30),
Telefono CHAR(10) NOT NULL,
PRIMARY KEY(Nombre_Empresa, Telefono));

CREATE TABLE Producto(
ID_Producto INT NOT NULL,
Nombre_Producto VARCHAR(20) NOT NULL,
Nombre_Empresa VARCHAR(30) NOT NULL,
Costo_Unitario FLOAT NOT NULL,
Precio_Unitario FLOAT NOT NULL,
Unidad_Medida VARCHAR(15) NOT NULL,
PRIMARY KEY(ID_Producto));

CREATE TABLE Bodega(
ID_Bodega INT NOT NULL,
Descripcion VARCHAR(50),
PRIMARY KEY(ID_Bodega));

CREATE TABLE Compra(
ID_Compra INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
Fecha_Compra TIMESTAMP,
Total FLOAT,
PRIMARY KEY(ID_Compra));

CREATE TABLE Adquiere(
ID_Compra INT,
ID_Producto INT,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Compra, ID_Producto));

CREATE TABLE De(
ID_Pedido INT,
ID_Producto INT,
Cantidad INT NOT NULL,
PRIMARY KEY(ID_Pedido, ID_Producto));

CREATE TABLE Factura(
ID_Factura INT NOT NULL AUTO_INCREMENT,
ID_Empleado CHAR(15),
ID_Pedido INT,
Fecha_Factura TIMESTAMP NOT NULL,
ISV FLOAT NOT NULL,
Total FLOAT NOT NULL,
PRIMARY KEY(ID_Factura));

CREATE TABLE Existe_En(
ID_Factura INT,
ID_Producto INT,
Cantidad INT NOT NULL,
SubTotal FLOAT,
PRIMARY KEY(ID_Factura, ID_Producto));

CREATE TABLE Cuentas_Cobrar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
ID_Cliente CHAR(15),
ID_Empleado CHAR(15),
ID_Factura INT,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento));

CREATE TABLE Cuentas_Pagar(
Num_Documento INT NOT NULL AUTO_INCREMENT,
Nombre_Empresa VARCHAR(30),
ID_Empleado CHAR(15),
ID_Compra INT,
Monto_Pagado FLOAT,
Monto_Pendiente FLOAT,
Fecha_Limite TIMESTAMP NOT NULL,
PRIMARY KEY(Num_Documento));

CREATE TABLE Inventario(
Correlativo INT NOT NULL AUTO_INCREMENT,
ID_Producto INT,
ID_Bodega INT,
Fecha_Inventario TIMESTAMP NOT NULL,
Cantidad_Inicial INT,
Cantidad_Ingreso INT,
Cantidad_Salida INT,
Cantidad_Final INT,
Tipo_Operacion VARCHAR(15),
PRIMARY KEY(Correlativo, ID_Producto));

viernes, 28 de agosto de 2009

lunes, 24 de agosto de 2009

sábado, 15 de agosto de 2009

Primera Entrega

a) Descripción del caso:

Datos Generales de la Empresa
Nombre: Auto Pintura
Ubicación: Comayagüela entre tercera y cuarta avenida.

Descripción del Sistema.


Generamos un sistema donde de el empleado que es un usuario con ciertos permisos para la base de datos genera una factura a base de lo que el cliente ha comprado o solicitado, dependiendo de lo que el cliente ha pedido se accesa el inventario de productos para saber si el producto se encuentra en bodega, dependiendo si el producto está en existencia se habla con el proveedor para pedir más productos y dependiendo como se efectué el pago de los clientes y hacia los proveedores se guarda la información de las cuentas, en cuentas por cobrar y cuentas por pagar.

Cantidad de Reportes.

La cantidad de reportes en el sistema son 3:

Reporte diario: este reporte lo pueden hacer los usuarios de ventas, donde les dará información acerca de las ventas diarias.
Reporte semanal: este reporte igual que el diario, solo que la información es de la última semana de ventas.
Reporte mensual: reporte mensual de ventas.

Alcance del Proyecto.

El proyecto ha desarrollar seria realizado en una arquitectura multi capas, el sistema pretende administrar y actualizar un inventario de productos, que genere reportes de ventas, además que se creen pedidos de clientes, en el caso de que no hubiera esto disponible en bodega, este ultimo mandaría un reporte con los productos disponibles. También tendrá la opción de generar reportes y exportarlos a Excel. Debe además guardar información de los clientes, de sus compras y datos personales.

Observaciones.

La empresa actualmente maneja este inventario en papel y algunos reportes de ventas lo hacen en Excel para llenar el sistema de contabilidad.

Flujo de Procesos del Sistema de Inventario

b) Identificación de Entidades y Criterios Usados para su Selección.
Entidades:
Cliente.
Empleado.
Pedido.
Producto.
Factura.
Usuario.
Modulo.
Cuentas por cobrar.
Cuentas por pagar.
Inventario.
Bodega.
Proveedor.

Criterios Usados:
En una empresa que brinda servicios o productos siempre hay clientes y empleados que trabajan en ella, el cliente hace pedidos de productos y por medio de este el empleado realiza la factura.
El inventario de los productos se guardan en las bodegas y los proveedores suministran esos productos, se necesita un usuario y un modulo para poder accesar a la base de datos.

c) Identificación de Atributos por Entidad:

La entidad cliente cuenta con los siguientes atributos:

Tipo de cliente.

La entidad usuario cuenta con los siguientes atributos:

Contraseña.
Id usuario.
Correo.
Pregunta.
Respuesta.

La entidad inventario cuenta con los siguientes atributos:

Tipo operación.
Cantidad de ingresos.
Fecha inventario.
Cantidad final.
Cantidad salidas.
Cantidad inicial.
Correlativo.

La entidad factura cuenta con los siguientes atributos:

Total.
Impuesto.
Fecha factura.
Id factura.

La entidad modulo cuenta con los siguientes atributos:

Descripción.
Id modulo.
La entidad persona cuenta con los siguientes atributos:
Apellido 1.
Apellido 2.
Nombre 1.
Nombre 2.
Sexo.
Dirección.
Teléfono.
Id persona.

La entidad producto cuenta con los siguientes atributos:

Unidad medida.
Precio unitario.
Nombre.
Id producto.
Costo unitario.

La entidad bodega cuenta con los siguientes atributos:

Id bodega.
Nombre.

La entidad pedido cuenta con los siguientes atributos:

Fecha pedido.
Id pedido.

La entidad cuentas por cobrar cuenta con los siguientes atributos:

Fecha límite.
Monto pendiente.

La entidad cuentas por pagar cuenta con los siguientes atributos:

Fecha límite.
Monto pendiente.

La entidad proveedor por pagar cuenta con los siguientes atributos:

Nombre de la empresa.
Tipo Producto.
Teléfono.
Dirección.
Correo.

d) Identificación de relaciones o vínculos existentes y criterios usados para su selección:
Cliente tiene una relación de que hace el pedido.
Usuario tiene la relación que accesa a un modulo y es usado por un empleado.
Inventario tiene la relación de bodega, y la otra relación es que el inventario tiene producto.
Factura tiene la relación que depende de pedido empleado crea la factura.
Persona tiene una especialización que es disjunta que puede ser empleado o cliente.
Producto tiene la relación que el inventario tiene el producto.
Pedido tiene la relación que la factura depende del pedido.
Cuentas por cobrar la relación es que tiene el cliente y la otra cobra el empleado.
Cuentas por pagar la relación es el proveedor tiene cuentas por pagar, el empleado paga cuentas por pagar.

e) Identificación de restricciones de clave primaria para las entidades:
Usuario: id usuario.
Persona: id persona.
Producto: id producto.
Bodega: id bodega.
Pedido: id pedido.
Factura: id factura.
Modulo: id modulo.
Inventario: correlativo, fecha inventario.

f) Identificación de restricciones de cardinalidad de las relaciones identificadas:
Factura no puede existir si no hay una compra de pedido.

ER Primera Entrega 1.01



sábado, 8 de agosto de 2009

Esta Es La Información Que Conseguimos La Semana Pasada Con La Cual Empezamos A Hacer El ER

Factura
Lo llevamos de acuerdo a talonarios de factura con número correlativos, se le pone el nombre del cliente, dirección, número de tel., si es de crédito y también la fecha.

Clientes
Llevamos una base de datos en Excel, es también nuestra cuenta corriente.
Cuenta con los datos del teléfono, la dirección y nombre del cliente.

Producto
Bueno nuestros productos son pinturas arquitectónicas y automotrices con todos sus suministros.
Tenemos dos bodegas una donde se guarda los productos de pintura para casa y la otra pintura para carros.

Proveedor
Se identifica nombre, teléfonos, fax, dirección, correos electrónicos.

sábado, 1 de agosto de 2009

Clase: TEORIA BASE DE DATOS I

10421307 German Alvarenga
10711036 Alfredo Scoto
10711054 Cristian Garner


Propuesta de proyecto (Sin Arreglos)


La empresa en la cual nos vamos a basar para hacer nuestro proyecto se llama

AUTO PINTURA

Esta empresa se dedica a la distribución de pinturas tanto a clientes personales, como a grandes empresas privadas y públicas como el ser:

Caterra
Auto Excel
La Policía
Entre otros

Esta empresa hasta la fecha maneja su información en archivos de Excel y libros a mano, por lo cual nos tocara hacer toda la base de datos, los módulos de accesos, los usuarios, las devoluciones, los clientes, el sistema de facturación y una interfaz adecuada para cualquier consulta sobre los artículos existentes y toda la información sobre los artículos que ellos guardan, aclarando que guardan información de los clientes tal como su nombre, dirección, teléfono, etc.

Nosotros utilizaríamos un modelo de base de datos multicapas utilizando como dbms mysql-php con un servidor de apache, como solución web crearíamos un login donde los usuarios registrados podrán hacer consultas, guardar, actualizar y/o modificar datos y con los datos generar un reporte