You are on page 1of 4

Ayuda ejercicios unidad 8: El DDL, Lenguaje de Definicin de Datos

1. Crea una nueva base de datos Gestion2, los archivos fsicos se llamarn tambin Gestion2 y se crear en la misma carpeta que la base de datos Gestion. CREATE DATABASE de SQL Server. Gestion2; -- La crea en la carpeta por defecto ON (NAME='Gestion2' ,

CREATE DATABASE Gestion2 FILENAME='F:\SQL\Gestion2.mdf')

LOG ON (NAME='Gestion2_log' , FILENAME='F:\SQL\Gestion2.ldf')GO 2. En Gestion2, crea las mismas tablas que tenemos en Gestion con las mismas relaciones entre ellas. Este ejercicio se resuelve con varias sentencias. USE Gestion2 CREATE TABLE numemp KEY CLUSTERED, nombre edad oficina titulo contrato dbo.empleados( INT NOT NULL CONSTRAINT pk_empleados PRIMARY

CHAR(20) NULL, INT NULL, INT NULL, CHAR(20) NULL, datetime NULL, FK_empleados_jefe REFERENCES

jefe INT NULL CONSTRAINT dbo.empleados, cuota ventas ) CREATE TABLE dbo.oficinas( oficina ciudad region dir INT INT NOT NULL, CHAR(20) NULL, CHAR(20) NULL, NULL, NULL, MONEY MONEY NULL, NULL

objetivo MONEY ventas

MONEY NULL

CONSTRAINT d1

DEFAULT (0),

CONSTRAINT PK_oficinas PRIMARY CONSTRAINT empleados ) ALTER TABLE dbo.empleados FK_empleados_oficina

KEY (oficina), REFERENCES

FK_oficinas_dir FOREIGN KEY (dir)

WITH

CHECK

ADD

CONSTRAINT

FOREIGN KEY(oficina) REFERENCES dbo.oficinas CREATE TABLE dbo.clientes( NULL,

(oficina)

numclie INT NOT nombre

CHAR(20) NULL, FK_clientes_repclie FOREIGN KEY CONSTRAINT PK_clientes PRIMARY

repclie INT NULL CONSTRAINT REFERENCES dbo.empleados, limitecredito INT KEY (numclie) ) CREATE TABLE dbo.productos( idfab idproducto NULL,

CHAR(5) NOT NULL, CHAR(10) NOT NULL,

descripcion CHAR(20) NULL, precio MONEY NULL,

existencias INT NULL, CONSTRAINT PK_productos PRIMARY ) CREATE TABLE dbo.pedidos( codigo numpedido INT IDENTITY NOT NULL, DEC(10,0) NOT NULL, NOT NULL, KEY (idfab,idproducto)

fechapedido DATETIME clie rep fab producto cant importe CONSTRAINT CONSTRAINT empleados,

INT NOT NULL, INT NOT NULL, CHAR(5) NOT NULL, CHAR(10) NOT NULL, SMALLINT NULL, MONEY NULL, PK_pedidos PRIMARY KEY (codigo), (rep) REFERENCES

FK_pedidos_rep FOREIGN KEY

CONSTRAINT FK_pedidos_clie FOREIGN clientes,

KEY (clie) REFERENCES

CONSTRAINT FK_pedidos_productos FOREIGN KEY (fab,producto) REFERENCES productos) 3. La tabla Productos de Gestion2 consideramos que sufre pocas operaciones de nuevos registros o eliminacin de registros y el nico campo que sufre actualizaciones frecuentes es el campo existencias; por otro lado es frecuente consultar los productos por el campo descripcion (aunque varios productos puedan tener la misma descripcin). Se podra mejorar la base de datos? Si es que s indica de qu forma y escribe la instruccin correspondiente; en cualquier caso justifica la respuesta.

CREATE INDEX

IX_descripcion ON Productos (descripcion);

4. Qu se puede hacer para que no puedan existir en la tabla de clientes dos clientes con el mismo nombre? CREATE UNIQUE INDEX -- o bien CONSTRAINT IX_nombre UNIQUE (nombre); IX_nombre ON Clientes (nombre)

ALTER TABLE Clientes ADD

5. En nuestro sistema vamos a efectuar muchas consultas recuperando a la vez los pedidos y los productos asociados a cada uno de ello s, por eso sera bueno. Completa la frase y escribe la sentencia SQL correspondiente. CREATE VIEW pedidos_productos AS (SELECT * FROM pedidos INNER JOIN productos ON fab=idfab AND producto=idproducto); 6. Elimina la tabla clientes dejando en pedidos el campo cliente a NULL. Este ejercicio se resuelve con varias sentencias y se puede resolver de varias maneras. Resulvelo de distintas formas. ALTER TABLE formas -- Opcion 1 ALTER TABLE pedidos DROP CONSTRAINT FK_pedidos_clie; pedidos ALTER COLUMN clie INT NULL; -- Esto de todas

ALTER TABLE pedidos ADD CONSTRAINT FK_pedidos_clie FOREIGN KEY (clie) REFERENCES Clientes ON DELETE SET NULL; DELETE Clientes; SELECT * FROM pedidos -- Para -- Opcion 2 UPDATE pedidos SET DELETE Clientes SELECT * FROM pedidos; 7. Ahora queremos permitir que dos clientes tengan el mismo nombre. DROP INDEX IX_nombre ON --o bien (segn se haya ALTER TABLE Clientes DROP Clientes; resuelto el apartado 5 CONSTRAINT IX_nombre; clie = NULL; comprobar el resultado;

8. Elimina la base de datos Gestion2, as podrs volver a hacer los ejercicios. USE Gestion DROP DATABASE Gestion2;

GO

You might also like