|
Solución ejercicios tema
8. El DDL
|
|
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).
|
|
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).
|
|
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.
|
|
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.
|
|
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,
CONSTRAINT cf_prod FOREIGN KEY (fab,producto) REFERENCES productos );
|
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.
|
|
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).
|
|
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.
|
|
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.
|
|
Solución
1
ALTER TABLE pedidos
ADD CONSTRAINT cp PRIMARY KEY (numpedido);
|
Para añadir una definición de clave primaria
hay que añadir una restricción2.
|
|
Solución
2
CREATE INDEX cp ON pedidos (numpedido) WITH PRIMARY ;
|
Otra solución es crear un índice con
la cláusula WITH PRIMARY.
|
|
CREATE INDEX i_region
ON oficinas (region) ;
|
|
|
DROP INDEX i_region
ON oficinas ;
|
|
|
Aviso legal: este curso es gratuito
siempre que se visualice desde la página web de aulaClic. No está permitido descargar el curso y utilizarlo en academias o centros de enseñanza
privados sin estar conectado a Internet.
|
© aulaClic. Todos los derechos reservados.
Free Computer tutorials .
Prohibida la reproducción por cualquier medio.
Julio -2001.aulaClic.com
|
|
|