Practica - Creacion de Tablas y Constraint - MySQL

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

UNIVERSIDAD FRANCISCO GAVIDIA

FACULTAD DE INGENIERIA Y ARQUITECTURA


PRACTICA
CICLO I - 2015
Asignatura: Diseo de Base de Datos
Profesor: Ing. Luis Enrique Reyes

Grupo: V01
Fecha desarrollo:
sbado 25/04/2015

Aula: Virtual

PRACTICA: CREACION DE TABLAS Y CONSTRAINT con MySQL


OBJETIVO:
Conocer la aplicacin de las restricciones (constraint) de las estructuras de
almacenamiento (tablas), las cuales permiten proporcionar la integridad de la
informacin.
DESARROLLO
En los ejercicios que se mostrarn a continuacin, se deber tomar de base el modelo de datos de la
base que se ha estado utilizando.
Procederemos a crear las tablas, y se conocern algunos de detalles a considerar durante la
construccin.

Veremos la justificacin del uso de las restricciones dentro de la creacin de las estructuras:
Unicidad
Dominios
Nulidad
Dependencias
Indices

EJECUCIN DE LA PRCTICA.

Ejercicio 1.
Creacin de tabla definiendo el nombre de la restriccin:
CREATE TABLE regions (
region_id
INT
NOT NULL,
region_name VARCHAR(25)
);
En el caso del campo region_name, al no colocar la frase NOT NULL, significa que el campo
no es obligatorio que posea informacin (le pudimos haber puesto la frase NULL).

Ejercicio 2.
Creacin de una llave primaria luego de haber creado una tabla:
ALTER TABLE regions
ADD ( CONSTRAINT reg_id_pk
PRIMARY KEY (region_id)
);
En este caso, despus de haber creado la tabla regions, podemos indicarle al DBMS que
requerimos agregar una llave primaria a la tabla, tambin se le puede dar un nombre a la
restriccin de llave primaria cuyo nombre sera reg_id_pk, para el campo region_id.

Ejercicio 3.
Otra forma de hacer directamente el ejercicio 1 y 2:
CREATE TABLE regions (
region_id
INTEGER NOT NULL PRIMARY KEY,
region_name VARCHAR(25)
);
Si en este caso se le muestra el mensaje de que la tabla ya existe, entonces deber utilizar la
siguiente instruccin antes de crearla:
DROP TABLE regions;

Luego intente crear la tabla de este ejercicio.

Ejercicio 4.
Creacin de las tablas definiendo al final la llave primaria de la tabla:
CREATE TABLE countries (
country_id
CHAR(2) ,
country_name VARCHAR(40) ,
region_id
INT ,
CONSTRAINT country_c_id_pk
);

PRIMARY KEY (country_id)

A diferencia del ejercicio anterior, otra forma de crear una llave primaria es colocar al final de
la instruccin el CONSTRAINT para crear la llave primaria.

Ejercicio 5.
Creacin de una dependencia despus de haber creado una tabla:
ALTER TABLE countries
ADD ( CONSTRAINT countr_reg_fk
FOREIGN KEY (region_id)
REFERENCES regions(region_id)
);
En este caso, definimos una restriccin la cual indica que se crear una llave primaria, este es el
caso cuando ya existe una tabla y deseamos que dependan sus datos de otra tabla.
Vemos que cada restriccin (CONSTRAINT) le asignamos un nombre. Esto es importante
cuando queremos borrarlo en algn momento.
En este caso la tabla countries, depender de la tabla regions. El enlace ser el campo region_id
en ambas tablas.

Ejercicio 6.
El ejercicio 4 y 5 definido en una sola instruccin.
CREATE TABLE countries (
country_id
CHAR(2)
country_name VARCHAR(40) ,
region_id
INT ,
CONSTRAINT country_c_id_pk
CONSTRAINT countr_reg_fk
);

NOT NULL ,

PRIMARY KEY (country_id) ,


FOREIGN KEY (region_id)
REFERENCES regions(region_id)

Ejercicio 7.
Creacin de la tabla Location, siguiendo el modelo de datos y otra forma de crear la llave primaria
y la llave fornea.
CREATE TABLE locations (
location_id
INT(4)
street_address
VARCHAR(40),
postal_code
VARCHAR(12),
city
VARCHAR(30)
state_province
VARCHAR(25),
country_id
CHAR(2) ,
CONSTRAINT loc_id_pk
CONSTRAINT loc_c_id_fk

NOT NULL AUTO_INCREMENT,

NOT NULL,

PRIMARY KEY (location_id),


FOREIGN KEY (country_id)
REFERENCES countries(country_id)

);

Ejercicio 8.
Creacin de la tabla departments
CREATE TABLE departments (
department_id
INTEGER(4)
department_name VARCHAR(30)
manager_id
NUMERIC(6),
location_id
INTEGER(4),
CONSTRAINT dept_loc_fk

NOT NULL PRIMARY KEY


AUTO_INCREMENT,
NOT NULL,

FOREIGN KEY (location_id)


REFERENCES locations (location_id)

);

Ejercicio 9.
Creacin de la tabla job, para crear otras dependencias segn el modelo
CREATE TABLE jobs (
job_id
VARCHAR(10),
job_title
VARCHAR(35)
NOT NULL,
min_salary
NUMERIC(6),
max_salary
NUMERIC(6),
CONSTRAINT job_id_pk PRIMARY KEY(job_id)
);

Ejercicio 10.
Al crear la tablas y al incluir condiciones de validacin entre campos.
CREATE TABLE job_history (

employee_id
INTEGER(6)
start_date
DATE
end_date
DATE
job_id
VARCHAR(10)
department_id
INTEGER(4),
CONSTRAINT jhist_date_interval
);

NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,
CHECK (end_date > start_date)

Vemos que la restriccin indica que al ingresar las fechas de inicio y fin, la condicin ser que
la fecha fin siempre deber ser mayor, nunca menor o igual.

Ejercicio 11.
Creacin de las tablas que incluyen validacin de datos, llave nica y que corresponde a la ltima
tabla a crear debido a las dependencias:
CREATE TABLE employees (
employee_id
INTEGER(6),
first_name
VARCHAR(20),
last_name
VARCHAR(25)
email
VARCHAR(25)
phone_number
VARCHAR(20),
hire_date
DATE
job_id
VARCHAR(10)
salary
NUMERIC(8,2),
commission_pct NUMERIC(4,2),
manager_id
INTEGER(6),
department_id
INTEGER(4),
CONSTRAINT emp_salary_min
CONSTRAINT emp_email_uk
);

NOT NULL,
NOT NULL,
NOT NULL,
NOT NULL,

CHECK (salary > 0),


UNIQUE (email)

En este caso al campo emp_salary_min, se le est indicando que el valor del salario deber
tener como valor mnimo 100, nunca sern valores negativos.
En el caso del campo emp_email_uk, lo que se le indica es que el contenido del campo nunca
deber repetirse. Normalmente estas son llamadas llaves alternas.

Ejercicio 12.
Podremos definir varias dependencias hacia otras tablas.
ALTER TABLE employees
ADD (
CONSTRAINT emp_emp_id_pk
);
ALTER TABLE employees

PRIMARY KEY (employee_id)

ADD (
CONSTRAINT
CONSTRAINT
CONSTRAINT

emp_dept_fk FOREIGN KEY (department_id)


REFERENCES departments(department_id),
emp_job_fk FOREIGN KEY (job_id)
REFERENCES jobs (job_id),
emp_manager_fk
FOREIGN KEY (manager_id)
REFERENCES employees (employee_id)

);
En este caso, se hacen dos ALTER TABLE debido a que hay que crear primero la llave primaria
de la tabla empleado pues en seguida ser utilizada para crear una llave fornea.

Ejercicio 13.
Creacin de las tablas con llaves primarias compuestas:
ALTER TABLE job_history
ADD (
CONSTRAINT jhist_emp_id_st_date_pk
CONSTRAINT jhist_job_fk
CONSTRAINT jhist_emp_fk
CONSTRAINT jhist_dept_fk

PRIMARY KEY (employee_id, start_date),


FOREIGN KEY (job_id)
REFERENCES jobs (job_id),
FOREIGN KEY (employee_id)
REFERENCES employees (employee_id),
FOREIGN KEY (department_id)
REFERENCES departments (department_id)

);
En este ejercicio se muestra que la llave primaria es una llave compuesta. Para ello,
simplemente colocamos los campos separados por comas para indicar cules son los esos
campos. Debe tenerse cuidado en el orden que se colocan pues normalmente cuando se crea
una llave primaria, automticamente se crea un ndice y no ser lo mismo que se cambie el
orden de los campos por efecto de rendimiento y bsqueda.

Ejercicio 14.
Creacin de ndices simples
CREATE UNIQUE INDEX reg_id_pk
ON regions (region_id);
En este caso, el ndice creado es en la tabla regions, en el que se le indica el campo region_id.
La palabra UNIQUE, est indicando que no habran datos duplicados.
Una aclaracin importante es que los ndices se crean automticamente en orden ascendente.
Ejercicio 15.
Creacin de ndices simples controlando el orden en que estarn los datos

CREATE UNIQUE INDEX jhist_st_date_pk


ON job_history (start_date) ;
En este caso, el ndice creado es en la tabla job_history, en el que se le indica el campo
start_date.
Una aclaracin en este caso es que el ndice se crear de manera descendente, es decir, a la hora
de hacer bsqueda de datos por medio de este campo el registro ms inmediato es el que posea
una fecha ms reciente.

Ejercicio 16.
Creacin de ndices compuestos en el que incluye dos campos. Lo mismo puede suceder si se
tienen ndices de ms de dos campos.
CREATE INDEX emp_name_ix
ON employees (last_name, first_name);
En este caso la table employees tendr un ndice compuesto por dos campos.
El uso de este tipo de ndices debe ser bien analizado, en el sentido de cul debera ser la
bsqueda de datos ms frecuentes. Esto significa que si la bsqueda ms frecuente es primero
por nombre y luego por apellido deber cambiarse la forma de creacin del ndice de la
siguiente manera:
CREATE INDEX emp_name_ix
ON employees (first_name, last_name);

También podría gustarte