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.