You are on page 1of 6

Asensio Emilio Rebollo Gómez 2º ASIR

EJERCICIOS PROPUESTOS
1. Crear la base de datos “EMPRESA” dentro de la cual tendremos las
siguientes tablas de acuerdo con las restricciones que se mencionan:

USE MASTER
GO
--CREAR BASEDATOS

CREATE DATABASE EMPRESA;

Tabla ARTICULOS
• Descripción de la tabla:

Nombre Null? Tipo

ARTICULO NOT NULL VARCHAR(20)


COD_FABRICANTE NOT NULL NUMERIC(3)
PESO NOT NULL NUMERIC(3)
CATEGORIA NOT NULL VARCHAR(10)
PRECIO_VENTA NUMERIC(4)
PRECIO_COSTO NUMERIC(4)
EXISTENCIAS NUMERIC(5)

• La clave primaria está formada por las columnas: ARTICULO,


COD_FABRICANTE, PESO y CATEGORIA.
• COD_FABRICANTE es clave ajena que referencia a la tabla
FABRICANTES.
• PRECIO_VENTA, PRECIO_COSTO y PESO han de ser > 0.
• CATEGORIA ha de ser 'Primera', 'Segunda' o 'Tercera'.

CREATE TABLE ARTICULOS(


ARTICULO VARCHAR(20)NOT NULL,
COD_FABRICANTE NUMERIC(3) NOT NULL,
PESO NUMERIC(3) NOT NULL CHECK (PESO>0),
CATEGORIA VARCHAR(10) NOT NULL,
PRECIO_VENTA NUMERIC (4) CHECK (PRECIO_VENTA>0),
PRECIO_COSTO NUMERIC (4) CHECK (PRECIO_COSTO>0),
EXISTENCIAS NUMERIC (5),
CONSTRAINT PK_ART PRIMARY KEY
(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA),
CONSTRAINT FK_ARFA FOREIGN KEY (COD_FABRICANTE) REFERENCES FABRICANTES,
CONSTRAINT CK_CAT CHECK(CATEGORIA IN('Primera','Segunda', 'Tercera'))
);

Sistemas Gestores de Base de Datos Página 1


Asensio Emilio Rebollo Gómez 2º ASIR

Tabla TIENDAS
• Descripción de la tabla:

Nombre Null? Tipo

NIF NOT NULL VARCHAR(10)


NOMBRE VARCHAR(20)
DIRECCION VARCHAR(20)
POBLACION VARCHAR(20)
PROVINCIA VARCHAR(20)
CODPOSTAL NUMERIC(5)

• La clave primaria es NIF


• PROVINCIA ha de almacenarse en mayúscula.

CREATE TABLE TIENDAS(


NIF VARCHAR(10) NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(20),
DIRECCIÓN VARCHAR(20),
POBLACIÓN VARCHAR(20),
PROVINCIA VARCHAR(20) CHECK(PROVINCIA=UPPER(PROVINCIA)),
CODPOSTAL NUMERIC(5)
);

Tabla FABRICANTES
• Descripción de la tabla:

Nombre Null? Tipo

COD_FABRICANTE NOT NULL NUMERIC(3)


NOMBRE VARCHAR(15)
PAIS VARCHAR(15)

• La clave primaria es COD_FABRICANTE.


• Las columnas NOMBRE y PAIS han de almacenarse en mayúscula.

CREATE TABLE FABRICANTES(


COD_FABRICANTE NUMERIC(3)NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(15)CHECK(NOMBRE=UPPER(NOMBRE)), --UPPER(NOMBRE) ES PARA
HACERLO EN MAYUSCULAS
PAIS VARCHAR(15)CHECK(PAIS=UPPER(PAIS))
);

--AÑADIR NOT NULL A COLUMNA


ALTER TABLE FABRICANTES ALTER COLUMN COD_FABRICANTE NUMERIC(3)NOT NULL;

Sistemas Gestores de Base de Datos Página 2


Asensio Emilio Rebollo Gómez 2º ASIR

Tabla PEDIDOS
• Descripción de la tabla:

Nombre Null? Tipo

NIF NOT NULL VARCHAR(10)


ARTICULO NOT NULL VARCHAR(20)
COD_FABRICANTE NOT NULL NUMERIC(3)
PESO NOT NULL NUMERIC(3)
CATEGORIA NOT NULL VARCHAR(10)
FECHA_PEDIDO NOT NULL DATE
UNIDADES_PEDIDAS NUMERIC(4)

• La clave primaria está formada por las columnas: NIF, ARTICULO,


COD_FABRICANTE, PESO, CATEGORIA y FECHA_PEDIDO.
• COD_FABRICANTE es clave ajena que referencia a la tabla
FABRICANTES.
• UNIDADES_PEDIDAS ha de ser > 0.
• CATEGORIA ha de ser 'Primera', 'Segunda' o 'Tercera'.
• Las columnas ARTICULO, COD_FABRICANTE, PESO y CATEGORIA son
clave ajena y referencian a la tabla ARTICULOS. Realizar un borrado en
cascada.
• NIF es clave ajena y referencia a la tabla TIENDAS.

CREATE TABLE PEDIDOS(


NIF VARCHAR(10) NOT NULL
CONSTRAINT FK_PETI REFERENCES TIENDAS,
ARTICULO VARCHAR(20) NOT NULL,
COD_FABRICANTE NUMERIC(3) NOT NULL
CONSTRAINT FK_PEFA REFERENCES FABRICANTES,
PESO NUMERIC(3) NOT NULL,
CATEGORIA VARCHAR(10) NOT NULL,
FECHA_PEDIDO DATE NOT NULL,
UNIDADES_PEDIDAS NUMERIC(4) CHECK (UNIDADES_PEDIDAS>0),
CONSTRAINT PK_PED PRIMARY KEY
(NIF,ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, FECHA_PEDIDO),
CONSTRAINT CK_CATPE CHECK(CATEGORIA IN('Primera','Segunda','Tercera')),
CONSTRAINT FK_PEAR FOREIGN KEY
(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) REFERENCES ARTICULOS
ON DELETE CASCADE
);

Sistemas Gestores de Base de Datos Página 3


Asensio Emilio Rebollo Gómez 2º ASIR

Tabla VENTAS
• Descripción de la tabla:

Nombre Null? Tipo

NIF NOT NULL VARCHAR(10)


ARTICULO NOT NULL VARCHAR(20)
COD_FABRICANTE NOT NULL NUMERIC(3)
PESO NOT NULL NUMERIC(3)
CATEGORIA NOT NULL VARCHAR(10)
FECHA_VENTA NOT NULL DATE
UNIDADES_VENDIDAS NUMERIC(4)

• La clave primaria está formada por las columnas: NIF, ARTICULO,


COD_FABRICANTE, PESO, CATEGORIA y FECHA_VENTA.
• COD_FABRICANTE es clave ajena que referencia a la tabla
FABRICANTES.
• UNIDADES_VENDIDAS ha de ser > 0.
• CATEGORIA ha de ser 'Primera', 'Segunda' o 'Tercera'.
• Las columnas ARTICULO, COD_FABRICANTE, PESO y CATEGORIA son
clave ajena y referencian a la tabla ARTICULOS, Realizar un borrado en
cascada.
• NIF es clave ajena y referencia a la tabla TIENDAS.

CREATE TABLE VENTAS(


NIF VARCHAR(10) NOT NULL
CONSTRAINT FK_VETI REFERENCES TIENDAS,
ARTICULO VARCHAR(20) NOT NULL,
COD_FABRICANTE NUMERIC(3) NOT NULL
CONSTRAINT FK_VEFA REFERENCES FABRICANTES,
PESO NUMERIC(3) NOT NULL,
CATEGORIA VARCHAR(10) NOT NULL CONSTRAINT CK_CATVE
CHECK(CATEGORIA IN('Primera','Segunda','Tercera')),
FECHA_VENTA DATE NOT NULL,
UNIDADES_VENDIDAS NUMERIC(4) CHECK (UNIDADES_VENDIDAS>0),
CONSTRAINT PK_VEN PRIMARY KEY
(NIF,ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, FECHA_VENTA),
CONSTRAINT FK_VEAR FOREIGN KEY
(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) REFERENCES ARTICULOS
ON DELETE CASCADE
);

2. Añadir una restricción a la tabla TIENDAS para que el NOMBRE de la tienda


sea añadido en mayúsculas.

ALTER TABLE TIENDAS ADD CONSTRAINT


NOMBRE CHECK (NOMBRE=UPPER(NOMBRE));

Sistemas Gestores de Base de Datos Página 4


Asensio Emilio Rebollo Gómez 2º ASIR

4. Modificar las columnas de las tablas PEDIDOS y VENTAS para que las
UNIDADES_VENDIDAS y las UNIDADES_PEDIDAS puedan almacenar
cantidades numéricas de 6 dígitos.

ALTER TABLE PEDIDOS


ALTER COLUMN UNIDADES_PEDIDAS NUMERIC(6)

ALTER TABLE VENTAS


ALTER COLUMN UNIDADES_VENDIDAS NUMERIC(6)

5. Impedir que se den de alta más tiendas en la provincia de 'TOLEDO'.

ALTER TABLE TIENDAS ADD CONSTRAINT PROVINCIA


CHECK (PROVINCIA !='TOLEDO');

6. Añadir a las tablas PEDIDOS y VENTAS una nueva columna para que
almacenen el PVP del artículo.

ALTER TABLE PEDIDOS ADD PVP NUMERIC(4)


ALTER TABLE VENTAS ADD PVP NUMERIC(4)

EJERCICIOS PROPUESTOS

4. Insertar a un empleado de apellido 'SAAVEDRA' con número 2000. La fecha


de alta será la actual, el SALARIO será el mismo salario de 'SALA' más el 20
por 100 y el resto de datos serán los mismos que los datos de 'SALA'.
Insert into emple select 2000,'SAAVEDRA',oficio,dir,GETDATE(),salario
+ salario*0.2,comision,dept_no from emple where
apellido like 'SALA'

5. Modificar el número de departamento de 'SAAVEDRA'. El nuevo


departamento será el departamento donde hay más empleados cuyo oficio
sea 'EMPLEADO'.

UPDATE EMPLE SET DEPT_NO=(SELECT E.DEPT_NO FROM EMPLE E INNER JOIN DEPART D
ON E.DEPT_NO=D.DEPT_NO
WHERE UPPER(OFICIO)='EMPLEADO'
GROUP BY E.DEPT_NO
HAVING COUNT(*) = (SELECT TOP 1 COUNT(*) FROM EMPLE WHERE
UPPER(OFICIO)='EMPLEADO'
GROUP BY DEPT_NO ORDER BY COUNT(*) DESC))
WHERE APELLIDO ='SAAVEDRA'

Sistemas Gestores de Base de Datos Página 5


Asensio Emilio Rebollo Gómez 2º ASIR

6. Borrar todos los departamentos de la tabla DEPART para los cuales no


existan empleados en EMPLE.

DELETE FROM DEPART WHERE DEPT_NO = (SELECT DEPT_NO FROM DEPART EXCEPT
SELECT DEPT_NO FROM EMPLE)

Sistemas Gestores de Base de Datos Página 6

You might also like