Blog de Javier Castañón – JavCastaPosts RSS Comments RSS

http://bd08001.webcindario.com/creazoo.sql

#---------------------------------------
# Javier Castañón - bd08001 - 08/05/2009
# ---------------------------------------------------
# Creación zoo - Tablas - inserción registros.- MySQL
#----------------------------------------------------

# Por defecto MySQL 5 sobre XP crea las tablas como InnoDB

# delimitador ;
delimiter ;

# Borrado de zoo si existe
DROP DATABASE IF EXISTS zoo;
#creación de zoo sino existe
CREATE DATABASE IF NOT EXISTS zoo;
#usamos la bbdd zoo
USE zoo;

#
# Tabla alimentacion
#

DROP TABLE IF EXISTS alimentacion;

CREATE TABLE alimentacion (
  Id_alimentacion INTEGER NOT NULL AUTO_INCREMENT,
  descripcion VARCHAR(150),
  PRIMARY KEY (Id_alimentacion)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# insertamos 4 registros

INSERT INTO alimentacion (Id_alimentacion, descripcion) VALUES (1, 'vegetariana');
INSERT INTO alimentacion (Id_alimentacion, descripcion) VALUES (2, 'ovolacteovegetariana');
INSERT INTO alimentacion (Id_alimentacion, descripcion) VALUES (3, 'carnivoro');
INSERT INTO alimentacion (Id_alimentacion, descripcion) VALUES (4, 'omnivoro');

#
# tabla animales
#

DROP TABLE IF EXISTS animales;

CREATE TABLE animales (
  Id_animal INTEGER NOT NULL AUTO_INCREMENT,
  id_especie INTEGER,
  nombre_pila VARCHAR(50),
  fecha_ingreso DATE,
  fecha_salida DATE,
  nacimiento DATE,
  foto VARCHAR(200),
  id_cuidador INTEGER,
  id_medicacion INTEGER,
  id_ubicacion INTEGER,
  sexo VARCHAR(255),
  INDEX (id_cuidador),
  INDEX (id_especie),
  INDEX (id_medicacion),
  INDEX (id_ubicacion),
  PRIMARY KEY (Id_animal)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 7 REGISTROS

INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (1, 1, 'copito', '2009-01-01 ', NULL, '2006-03-07', 'http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Gorilla_CinZoo_02036.jpg/200px-Gorilla_CinZoo_02036.jpg', 6, 6, 3, 'varon');
INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (2, 2, 'pijamas', '2008-06-02 ', NULL, '2005-09-15', 'http://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Beautiful_Zebra_in_South_Africa.JPG/200px-Beautiful_Zebra_in_South_Africa.JPG', 6, 6, 3, 'hembra');
INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (3, 3, 'goloso', '2009-04-15 ', NULL, '2008-06-02', 'http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Ours_des_pyrenees_aspe_2002.jpg/230px-Ours_des_pyrenees_aspe_2002.jpg', 7, 5, 3, 'varon');
INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (4, 4, 'raro', '2008-10-22 ', NULL, '2007-08-15', 'http://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Platypus.jpg/250px-Platypus.jpg', 7, 6, 3, 'varon');
INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (5, 5, 'rey', '2008-01-08 ', NULL, '2003-09-08', 'http://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Lion_waiting_in_Nambia.jpg/230px-Lion_waiting_in_Nambia.jpg', 6, 5, 3, 'varon');
INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (6, 5, 'reina', '2008-11-18 ', NULL, '2005-03-09', 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Lioness%2C_Olomouc.jpg/230px-Lioness%2C_Olomouc.jpg', 6, 6, 3, 'hembra');
INSERT INTO animales (Id_animal, id_especie, nombre_pila, fecha_ingreso, fecha_salida, nacimiento, foto, id_cuidador, id_medicacion, id_ubicacion, sexo) VALUES (7, 5, 'principe', '2009-05-01 ', NULL, '2009-05-01', 'http://www.fonditos.com/wallpapers/vista/03053.jpg', 7, 3, 3, 'varon');

#
# Tabla clientes
#

DROP TABLE IF EXISTS clientes;

CREATE TABLE clientes (
  Id_cliente INTEGER NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(50),
  tipo_sociedad INTEGER,
  fecha_alta DATE,
  fecha_baja DATE,
  comentario VARCHAR(150),
  PRIMARY KEY (Id_cliente)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

#
# 4 REGISTROS clientes
#

INSERT INTO clientes (Id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (1, 'green_peace', 5, '2009-04-01', '2012-12-31', 'ong ecologista');
INSERT INTO clientes (Id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (2, 'caja_madrid', 2, '2009-04-02', '2012-12-31', 'ayuda a especies en extincion');
INSERT INTO clientes (Id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (3, 'fulanito detal', 3, '2009-04-03', '2012-12-31', 'colaborador');
INSERT INTO clientes (Id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (4, 'fulanito decual', 3, '2009-05-05', '2012-12-31', 'voluntario');

#
# Tabla empleados
#

DROP TABLE IF EXISTS empleados;

CREATE TABLE empleados (
  Id_empleado INTEGER NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(50),
  ubicacion INTEGER,
  PRIMARY KEY (Id_empleado)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 7 registros

INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (1, 'antonio camborio', 1);
INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (2, 'benito diaz', 2);
INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (3, 'carlos espino', 3);
INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (4, 'dario fernandez', 4);
INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (5, 'esteban garcia', 5);
INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (6, 'francisco hernandez', 6);
INSERT INTO empleados (Id_empleado, nombre, ubicacion) VALUES (7, 'gerardo iglesias', 6);

#
# Tabla especies
#

DROP TABLE IF EXISTS especies;

CREATE TABLE especies (
  Id_especie INTEGER NOT NULL AUTO_INCREMENT,
  nombre_comun VARCHAR(50),
  nombre_cientifico VARCHAR(50),
  id_alimentacion INTEGER,
  INDEX (id_alimentacion),
  PRIMARY KEY (Id_especie)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 5 registros

INSERT INTO especies (Id_especie, nombre_comun, nombre_cientifico, id_alimentacion) VALUES (1, 'gorila', 'primates gorilla', 1);
INSERT INTO especies (Id_especie, nombre_comun, nombre_cientifico, id_alimentacion) VALUES (2, 'cebra', 'equus zebra', 1);
INSERT INTO especies (Id_especie, nombre_comun, nombre_cientifico, id_alimentacion) VALUES (3, 'oso pardo', 'Ursus arctos', 4);
INSERT INTO especies (Id_especie, nombre_comun, nombre_cientifico, id_alimentacion) VALUES (4, 'ornitorrinco', 'Ornithorhynchus anatinus', 2);
INSERT INTO especies (Id_especie, nombre_comun, nombre_cientifico, id_alimentacion) VALUES (5, 'leon', 'panthera leo', 3);

#
# Tabla manimales
#

DROP TABLE IF EXISTS manimales;

CREATE TABLE manimales (
  Id_movimiento INTEGER NOT NULL AUTO_INCREMENT,
  id_animal INTEGER,
  fecha_movimiento DATE,
  tipo_evento INTEGER,
  descripcion VARCHAR(50),
  INDEX (id_animal),
  PRIMARY KEY (Id_movimiento)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

#
# Tabla medicacion
#

DROP TABLE IF EXISTS medicacion;

CREATE TABLE medicacion (
  Id_medicacion INTEGER NOT NULL AUTO_INCREMENT,
  descripcion VARCHAR(150),
  PRIMARY KEY (Id_medicacion)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 6 registros

INSERT INTO medicacion (Id_medicacion, descripcion) VALUES (1, 'vacunas');
INSERT INTO medicacion (Id_medicacion, descripcion) VALUES (2, 'analgesicos');
INSERT INTO medicacion (Id_medicacion, descripcion) VALUES (3, 'antipireticos');
INSERT INTO medicacion (Id_medicacion, descripcion) VALUES (4, 'antiinflamatorios');
INSERT INTO medicacion (Id_medicacion, descripcion) VALUES (5, 'antibioticos');
INSERT INTO medicacion (Id_medicacion, descripcion) VALUES (6, 'Sin_medicacion');

#
# Tabla mproductos
#

DROP TABLE IF EXISTS mproductos;

CREATE TABLE mproductos (
  Id_mproducto INTEGER NOT NULL AUTO_INCREMENT,
  id_producto INTEGER NOT NULL,
  id_proveedor INTEGER NOT NULL,
  fecha_entrada DATE,
  fecha_salida DATE,
  cantidad INTEGER,
  destino INTEGER,
  INDEX (id_producto),
  PRIMARY KEY (Id_mproducto)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

#
# Tabla productos
#

DROP TABLE IF EXISTS productos;

CREATE TABLE productos (
  Id_producto INTEGER NOT NULL AUTO_INCREMENT,
  id_proveedor INTEGER NOT NULL,
  nombre VARCHAR(50),
  stock INTEGER,
  INDEX (id_proveedor),
  PRIMARY KEY (Id_producto)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 3 registros

INSERT INTO productos (Id_producto, id_proveedor, nombre, stock) VALUES (1, 1, 'piensos', 100);
INSERT INTO productos (Id_producto, id_proveedor, nombre, stock) VALUES (2, 2, 'carne', 300);
INSERT INTO productos (Id_producto, id_proveedor, nombre, stock) VALUES (3, 3, 'kits mantenimiento', 10);

#
# Tabla proveedores
#

DROP TABLE IF EXISTS proveedores;

CREATE TABLE proveedores (
  Id_proveedor INTEGER NOT NULL AUTO_INCREMENT,
  id_cliente INTEGER DEFAULT 0,
  nombre VARCHAR(50),
  tipo_sociedad INTEGER,
  fecha_alta DATE,
  fecha_baja DATE,
  comentario VARCHAR(150),
  INDEX (id_cliente),
  PRIMARY KEY (Id_proveedor)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

#
# 3 registros
#

INSERT INTO proveedores (Id_proveedor, id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (1, 0, 'piensos la hiena', 6, '2009-05-01', NULL, 'comida para hebivoros');
INSERT INTO proveedores (Id_proveedor, id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (2, 1, 'green peace', 5, '2009-05-01', NULL, 'comida para carnivoros');
INSERT INTO proveedores (Id_proveedor, id_cliente, nombre, tipo_sociedad, fecha_alta, fecha_baja, comentario) VALUES (3, 2, 'caja madrid', 2, '2009-05-01', NULL, 'productos de mantenimiento');

#
# Tabla sociedades
#

DROP TABLE IF EXISTS sociedades;

CREATE TABLE sociedades (
  Id_tipo_sociedad INTEGER NOT NULL AUTO_INCREMENT,
  descripcion VARCHAR(50),
  PRIMARY KEY (Id_tipo_sociedad)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# registros 7

INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (1, 'fundacion');
INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (2, 'SA');
INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (3, 'persona_fisica');
INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (4, 'organismo_oficial');
INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (5, 'ong');
INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (6, 'SL');
INSERT INTO sociedades (Id_tipo_sociedad, descripcion) VALUES (7, 'otros');

#
# Tabla tipoeventos
#

DROP TABLE IF EXISTS tipoeventos;

CREATE TABLE tipoeventos (
  Id_tipo INTEGER NOT NULL AUTO_INCREMENT,
  descripcion VARCHAR(150),
  PRIMARY KEY (Id_tipo)
);
# ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 4 registros

INSERT INTO tipoeventos (Id_tipo, descripcion) VALUES (1, 'parto');
INSERT INTO tipoeventos (Id_tipo, descripcion) VALUES (2, 'enfermedad');
INSERT INTO tipoeventos (Id_tipo, descripcion) VALUES (3, 'traslado');
INSERT INTO tipoeventos (Id_tipo, descripcion) VALUES (4, 'otros');

#
# Tabla ubicaciones
#

DROP TABLE IF EXISTS ubicaciones;

CREATE TABLE ubicaciones (
  Id_ubicacion INTEGER NOT NULL AUTO_INCREMENT,
  descripcion VARCHAR(50),
  PRIMARY KEY (Id_ubicacion)
);
#ENGINE=InnoDB DEFAULT CHARSET=utf8;

# registros 6

INSERT INTO ubicaciones (Id_ubicacion, descripcion) VALUES (1, 'stock');
INSERT INTO ubicaciones (Id_ubicacion, descripcion) VALUES (2, 'administracion');
INSERT INTO ubicaciones (Id_ubicacion, descripcion) VALUES (3, 'animales');
INSERT INTO ubicaciones (Id_ubicacion, descripcion) VALUES (4, 'empleados');
INSERT INTO ubicaciones (Id_ubicacion, descripcion) VALUES (5, 'veterinarios');
INSERT INTO ubicaciones (Id_ubicacion, descripcion) VALUES (6, 'cuidador');

#creamos las relaciones entre las tablas o las FOREIGN KEYs
#http://dev.mysql.com/doc/refman/5.0/es/innodb-foreign-key-constraints.html

#ALTER TABLE yourtablename
#    ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
#    REFERENCES tbl_name (index_col_name, ...)
#    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
#    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

#relacion entre clientes y sociedades

ALTER TABLE clientes ADD CONSTRAINT fk_cli_soci FOREIGN KEY (tipo_sociedad) REFERENCES sociedades (id_tipo_sociedad);

#relacion entre proveedores y sociedades

ALTER TABLE proveedores ADD CONSTRAINT fk_pro_soci FOREIGN KEY (tipo_sociedad) REFERENCES sociedades (id_tipo_sociedad);

#relacion entre proveedores y clientes

#ALTER TABLE proveedores ADD CONSTRAINT fk_pro_cli FOREIGN KEY (id_cliente) REFERENCES clientes (id_cliente);

#relacion entre productos y proveedores

ALTER TABLE productos ADD CONSTRAINT fk_produ_prov FOREIGN KEY (id_proveedor) REFERENCES proveedores (id_proveedor);

#relaciones entre mproductos y productos

ALTER TABLE mproductos ADD CONSTRAINT fk_mprodu_produ FOREIGN KEY (id_producto) REFERENCES productos (id_producto) ON DELETE CASCADE;
#si se borra el producto se borran sus movimientos -> ON DELETE CASCADE

ALTER TABLE mproductos ADD CONSTRAINT fk_mprodu_produ2 FOREIGN KEY (id_proveedor) REFERENCES productos (id_proveedor);

#relacion entre mproductos y ubicaciones

ALTER TABLE mproductos ADD CONSTRAINT fk_mprodu_ubi FOREIGN KEY (destino) REFERENCES ubicaciones (id_ubicacion);

#relacion entre animales y ubicaciones

ALTER TABLE animales ADD CONSTRAINT fk_ani_ubi FOREIGN KEY (id_ubicacion) REFERENCES ubicaciones (id_ubicacion);

#relacion entre animales y especies

ALTER TABLE animales ADD CONSTRAINT fk_ani_esp FOREIGN KEY (id_especie) REFERENCES especies (id_especie);

#relacion entre manimales y animales

ALTER TABLE manimales ADD CONSTRAINT fk_mani_ani FOREIGN KEY (id_animal) REFERENCES animales (id_animal) ON DELETE CASCADE;
#si se borra el animal se borran sus movimientos -> ON DELETE CASCADE

#relacion entre manimales y tipoeventos

ALTER TABLE manimales ADD CONSTRAINT fk_mani_teve FOREIGN KEY (tipo_evento) REFERENCES tipoeventos (id_tipo);

#relacion entre animales y medicacion

ALTER TABLE animales ADD CONSTRAINT fk_ani_medi FOREIGN KEY (id_medicacion) REFERENCES medicacion (id_medicacion);

#relacion entre animales y empleados

ALTER TABLE animales ADD CONSTRAINT fk_ani_emp FOREIGN KEY (id_cuidador) REFERENCES empleados (id_empleado);

#relacion entre especies y alimentacion

ALTER TABLE especies ADD CONSTRAINT fk_esp_ali FOREIGN KEY (id_alimentacion) REFERENCES alimentacion (id_alimentacion);

#relacion entre empleados y ubicaciones

ALTER TABLE empleados ADD CONSTRAINT fk_emp_ubi FOREIGN KEY (ubicacion) REFERENCES ubicaciones (id_ubicacion);

#
#		##########################################
# 		# Procedimientos almacenados y trigers   #
#		##########################################
#
# SE CREAN 2 DISPARADORES EN LOS EVENTOS BEFORE INSERT Y BEFORE UPDATE DE LA TABLA MPRODUCTOS
# PARA ASEGURAR QUE SI ES UNA ENTRADA LA CANTIDAD SEA POSITIVA Y SI ES UNA SALIDA LA CANTIDAD SEA NEGATIVA
# LUEGO SE SUMARA O RESTARA AL STOCK EN LA TABLA MAESTRA PRODUCTOS
# Tambien se crea el disparador BEFORE DELETE en mproductos para asegurar la consistencia de productos.stock

delimiter //
#######################################
# Trigger BEFORE UPDATE ON mproductos #
#######################################
DROP TRIGGER IF EXISTS tg_productos_BU_mproductos//
CREATE TRIGGER tg_productos_BU_mproductos
BEFORE UPDATE ON mproductos
FOR EACH ROW
BEGIN
 IF NEW.destino=1 THEN
 #si es una entrada debe de ser positivo
  IF NEW.cantidad<0 THEN
   SET NEW.cantidad=-1*NEW.cantidad;
  END IF;
 SET NEW.cantidad=1*NEW.cantidad;
 ELSE #si no es una entrada es una salida
 #si es una salida debe de ser negativo
  IF NEW.cantidad>0 THEN
   SET NEW.cantidad=-1*NEW.cantidad;
  END IF;
 END IF;
UPDATE productos SET stock=stock+NEW.cantidad WHERE productos.Id_producto = NEW.id_producto;
END//
delimiter ;

delimiter //
#######################################
# Trigger BEFORE INSERT ON mproductos #
#######################################
DROP TRIGGER IF EXISTS tg_productos_BI_mproductos//
CREATE TRIGGER tg_productos_BI_mproductos
BEFORE INSERT ON mproductos
FOR EACH ROW
BEGIN
 IF NEW.destino=1 THEN
 #si es una entrada debe de ser positivo
  IF NEW.cantidad<0 THEN
   SET NEW.cantidad=-1*NEW.cantidad;
  END IF;
 SET NEW.cantidad=1*NEW.cantidad;
 ELSE #si no es una entrada es una salida
 #si es una salida debe de ser negativo
  IF NEW.cantidad>0 THEN
   SET NEW.cantidad=-1*NEW.cantidad;
  END IF;
 END IF;
UPDATE productos SET stock=stock+NEW.cantidad WHERE productos.Id_producto = NEW.id_producto;
END//
delimiter ;

delimiter //
#######################################
# Trigger BEFORE DELETE ON mproductos #
#######################################
DROP TRIGGER IF EXISTS tg_productos_BD_mproductos//
CREATE TRIGGER tg_productos_BD_mproductos
BEFORE DELETE ON mproductos
FOR EACH ROW
BEGIN

UPDATE productos SET stock=stock-OLD.cantidad WHERE productos.Id_producto = OLD.id_producto;

END//
delimiter ;

#                  ##################################
#                  #           VISTAS               #
#                  ##################################

DROP VIEW IF EXISTS vanimales;

CREATE VIEW vanimales AS
select distinct em.nombre Cuidador, a.id_animal ID_ANIMAL, e.nombre_comun NOMBRE_ESPECIE,
 a.nombre_pila NOMBRE_PILA, m.descripcion Tipo_Medicacion,
 u.descripcion LUGAR, al.descripcion Tipo_Alimentacion
 from animales a, especies e, medicacion m, ubicaciones u, alimentacion al,empleados em
where a.id_especie=e.id_especie and a.id_medicacion=m.id_medicacion and
a.id_cuidador=em.id_empleado and a.id_ubicacion=u.id_ubicacion and
al.id_alimentacion=e.id_alimentacion;
  • Share/Bookmark
Clika en el altavoz para oir el postAltavoz

One Response to “SQL – MySQL – Scripting: Script SQL de creación de base de datos con triggers”

  1. on 18 Jun 2010 at 09:29Bitacoras.com

    Información Bitacoras.com…

    Valora en Bitacoras.com: SQL – MySQL – Scripting: Script SQL de creación de base de datos con triggers

    [WORDPRESS HASHCASH] The comment’s server IP (82.98.146.99) doesn’t match the comment’s URL host IP (82.98.146.100) and so is spam.

Leave a Reply

Los enlaces en los comentarios pueden encontrarse libres de nofollow.

Powered by WP Hashcash

?>