Professional Documents
Culture Documents
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' ,
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
MONEY NULL
CONSTRAINT d1
DEFAULT (0),
WITH
CHECK
ADD
CONSTRAINT
(oficina)
repclie INT NULL CONSTRAINT REFERENCES dbo.empleados, limitecredito INT KEY (numclie) ) CREATE TABLE dbo.productos( idfab idproducto 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
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
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)
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