Soluciones al Ejercicio de DEA del Tema 6_22Ene09

Anuncio
SOLUCIONES
Ejercicio 1
CREATE TABLE empleados (
numemp INTEGER PRIMARY KEY,
nombre TEXT(30) NOT NULL,
edad INTEGER,
oficina INTEGER,
titulo CHAR(20),
contrato DATETIME NOT NULL,
director INTEGER,
cuota CURRENCY,
ventas MONEY);
La solución propuesta es una de la muchas posibles ya que
cada uno puede elegir el tipo de datos que prefiera siempre
y cuando ese tipo permita introducir los datos que tenemos
en las tablas de ejemplo. También la cláusula NOT NULL se
puede poner en más campos de los que tiene la solución
excepto en las columnas que tengan filas sin valor en las
tablas de ejemplo. Por ejemplo en oficina (el empleado 110
no tiene oficina), en director (el empleado 106 no tiene
director) y en cuota (el empleado 110 no tiene cuota
asignada. Pero las columnas edad, titulo y ventas sí las
podemos definir con la restricción NOT NULL. Para definir las
columnas cuota y ventas hemos elegido el tipo moneda
(CURRENCY y MONEY son sinónimos).
Ejercicio 2
CREATE TABLE oficinas (
oficina INT PRIMARY KEY,
ciudad TEXT(30),
region TEXT(20),
dir INT CONSTRAINT cf_dir REFERENCES empleados,
objetivo CURRENCY,
ventas CURRENCY );
Para definir la columna dir como clave foránea hemos
elegido una restricción1 (poner la definición dentro de la
definición de la columna).
Ejercicio 3
CREATE TABLE productos (
idfab TEXT(10),
idproducto TEXT(20),
descripcion TEXT(30) NOT NULL,
precio CURRENCY NOT NULL,
existencias INT ,
CONSTRAINT cp PRIMARY KEY (idfab,idproducto) );
En este caso la clave principal está formada por dos
columnas idfab e idproducto luego para definirla tenemos
que utilizar necesariamente una restricción2.
Ejercicio 4
CREATE TABLE clientes (
numclie INT ,
nombre TEXT(30) NOT NULL,
repclie INT CONSTRAINT cf_repclie REFERENCES
empleados,
CONSTRAINT cp PRIMARY KEY (numclie) ) ;
La clave principal se puede definir en una restricción2
aunque esté compuesta por una sola columna.
Ejercicio 5
CREATE TABLE pedidos (
codigo COUNTER,
numpedido INT PRIMARY KEY,
fechapedido DATETIME NOT NULL,
clie INT NOT NULL,
rep INT NOT NULL,
fab TEXT(10) NOT NULL,
producto TEXT(20) NOT NULL,
cant INT NOT NULL,
importe CURRENCY NOT NULL,
CONSTRAINT cf_clie FOREIGN KEY (clie) REFERENCES
clientes,
CONSTRAINT cf_rep FOREIGN KEY (rep) REFERENCES
empleados,
Para exponer más formas de definir una tabla aquí te hemos
definido todas las claves como restricción2 la única que es
obligatoria en una restricción2 es la cf_prod ya que está
compuesta por varias columnas.
CONSTRAINT cf_prod FOREIGN KEY (fab,producto)
REFERENCES productos );
Ejercicio 6
ALTER TABLE clientes
ADD COLUMN limitecredito MONEY;
Para añadir una nueva columna a una tabla que ya existe
debemos emplear la sentencia ALTER TABLE, y en nuestro
caso la cláusula ADD COLUMN (COLUMN es opcional).
Ejercicio 7
ALTER TABLE empleados
ADD CONSTRAINT cf_oficina FOREIGN KEY (oficina)
REFERENCES oficinas,
CONSTRAINT cf_director FOREIGN KEY (director)
REFERENCES empleados;
Para añadir una definición de clave foránea hay que añadir
una restricción2, se pueden añadir varias restricciones en la
misma sentencia ALTER TABLE.
Ejercicio 8
Solución 1
ALTER TABLE empleados
ADD CONSTRAINT u_nombre UNIQUE (nombre);
Solución 2
CREATE UNIQUE INDEX u_nombre ON empleados
(nombre);
Para que no se puedan repetir los valores en la columna
nombre hay que definir un índice único, o bien definiendo una
restricción sobre la columna como te indicamos en la solución
1 o bien creando el índice único como te indicamos en la
solución 2.
Ejercicio 9
Solución 1
ALTER TABLE pedidos
ADD CONSTRAINT cp PRIMARY KEY (numpedido);
Solución 2
CREATE INDEX cp ON pedidos (numpedido) WITH
PRIMARY ;
Para añadir una definición de clave primaria hay que añadir
una restricción2.
Otra solución es crear un índice con la cláusula WITH
PRIMARY.
Descargar