Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Primery Key
Primery Key
Introduccin
Hasta ahora hemos estudiado las sentencias que forman parte del DML (Data Management
Language) lenguaje de manipulacin de datos, todas esas sentencias sirven para recuperar,
insertar, borrar, modificar los datos almacenados en la base de datos; lo que veremos en este tema
son las sentencias que afectan a la estructura de los datos.
El LDD (Data Definition Language) es la parte del SQL que ms vara de un sistema a otro ya que esa
rea tiene que ver con cmo se organizan internamente los datos y eso, cada sistema lo hace de
una manera u otra.
El LDD de SQL permite la especificacin no slo de un conjunto de relaciones, sino tambin de
alguna informacin relativa a esas relaciones, incluyendo:
El lenguaje de definicin de datos (en ingls Data Definition Language, o DDL), es el que se encarga
de la modificacin de la estructura de los objetos de la base de datos. Existen cuatro operaciones
bsicas: CREATE, ALTER, DROP y TRUNCATE.
6.2
La norma SQL soporta un conjunto de tipos de dominios predefinidos, que incluye los siguientes:
char(n): Cadenas de caracteres de tamao fijo, con una longitud n especificada por el usuario
de hasta un mximo de 255. Tambin se puede utilizar la palabra completa character.
varchar(n): Es una cadena de caracteres de longitud variable, con una longitud n especificada
por el usuario de hasta un mximo de 2000 caracteres. Tambin se puede utilizar la forma
completa character varying.
int: Es un entero. Tambin se puede utilizar la palabra completa integer.
smallint: Es un entero pequeo (Un subconjunto del dominio de los enteros).
numeric(p,d): Es un nmero en coma flotante, cuya precisin la especifica el usuario. El
nmero est formado por p dgitos y de esos p dgitos d pertenecen a la parte decimal.
real, double precision: Son respectivamente nmeros en coma flotante y nmeros en coma
flotante de doble precisin, con precisin dependiente de la mquina.
float(n): Es un nmero en coma flotante, cuya precisin es de al menos n dgitos.
date: Es una fecha del calendario, que contiene un ao (de cuatro dgitos), un mes y un da del
mes.
time: Es la hora del da, expresada en horas, minutos y segundos.
timestamp: Es una combinacin de date y time. Los valores de fecha y hora se pueden
especificar como:
date 2009-05-11
time 09:30:00
Ejemplo: Utilizacin de la clusula check para simular un tipo enumerado especificando que
nivel_estudios debe ser <<Graduado>>, <<Licenciado>>, <<Doctorado>>.
create table estudiante(
(nombre_est varchar(30) not null,
no_carnet varchar(10) not null,
nivel_estudios char(15) not null,
primary key(no_carnet),
check (nivel_estudios in (Graduado, Licenciado, Doctorado))
)
unique (Aj1,Aj2..Ajn): Indica que los atributos Aj1,Aj2..Ajn forman una clave candidata; es
decir; no puede haber tuplas en la relacin con todos los atributos que forman la clave
candidata iguales. Sin embargo, se permite que los atributos que formal la clave candidata sean
nulos, a menos que se hayan declarado como not null.
Ejemplo:
create table ejemplo(
col1 integer constraint pk primary key,
col2 char(25) not null,
col3 CHAR(10) constraint uni1 unique,
col4 integer,
col5 int constraint fk5 references ejemplo2
);
Con este ejemplo estamos creando la tabla ejemplo compuesta por: una columna llamada col1 de
tipo entero definida como clave principal, una columna col2 que puede almacenar hasta 25
caracteres alfanumricos y no puede contener valores nulos, una columna col3 de hasta 10
caracteres que no podr contener valores repetidos, una columna col4 de tipo entero sin ninguna
restriccin, y una columna col5 de tipo entero clave fornea que hace referencia a valores de la
clave principal de la tabla ejemplo2.
Ejemplo: Definicin de datos en SQL para parte de la Base de Datos del Banco
create table Cliente(
(nombre_cliente char(20) not null),
calle_cliente varchar(50),
ciudad_cliente char(30)),
primary key (nombre_cliente)
)
create table Sucursal(
(nombre_sucursal varchar(30) not null)
ciudad_sucursal char(30)),
activo float,
primary key (nombre_sucursal),
check (activo>=0)
)
Tambin nos permite crear nuevas restricciones o borrar algunas existentes. La sintaxis puede
parecer algo complicada pero sabiendo el significado de las palabras reservadas la sentencia se
aclara bastante; ADD (aade), ALTER (modifica), DROP (elimina), COLUMN (columna), CONSTRAINT
(restriccin).
La sintaxis de la instruccin es:
alter table r add A D
Donde r es el nombre de la relacin existente, A es el nombre del atributo que se desea aadir y D
es el dominio (tipo de dato) del atributo A.
Para aadir una nueva restriccin en la tabla podemos utilizar la clusula ADD restriccion2 (ADD
CONSTRAINT...).
Ejemplo:
alter table tab1 add constraint c1 unique (col3)
Con este ejemplo estamos aadiendo a la tabla tab1 un ndice nico (sin duplicados) llamado c1
sobre la columna col3.
Para borrar una columna basta con utilizar la clusula drop column (column es opcional) y el
nombre de la columna que queremos borrar, se perdern todos los datos almacenados en la
columna.
Ejemplo:
alter table tab1 drop column col3
Tambin podemos escribir:
alter table tab1 drop col3
El resultado es el mismo, la columna col3 desaparece de la tabla tab1.
Para borrar una restriccin basta con utilizar la clusula drop constraint y el nombre de la
restriccin que queremos borrar, en este caso slo se elimina la definicin de la restriccin pero
los datos almacenados no se modifican ni se pierden.
Ejemplo:
alter table tab1 drop constraint c1
Con esta sentencia borramos el ndice c1 creado anteriormente pero los datos de la columna col3
no se ven afectados por el cambio.
6.3.4 Drop Table
La sentencia drop table sirve para eliminar una tabla. No se puede eliminar una tabla si est
abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial (si
interviene como tabla padre en una relacin y tiene registros relacionados).
La sintaxis es la siguiente:
drop table r
Tiene una repercusin ms drstica que: delete from r
6.4
Creacin de ndices
En la definicin de los esquemas relacionales es muy importante la definicin de ndices con el fin
de mejorar el rendimiento en cuanto al acceso de los datos de la Base de Datos. Se debe tener
cuidado en no utilizar en forma innecesaria la creacin de ndices ya que al actualizarlos afectan el
desempeo de ciertas operaciones como borrado e insercin, por lo que se recomienda indexar
hasta que se han introducido una cantidad considerable de tuplas.
La sintaxis para la creacin de ndices en SQL es la siguiente:
create index
El efecto es que se crea el un archivo ndice para una determinada tabla definida en el comando.
La lista de Campos indica los atributos que conformarn el ndice siendo el primero de la lista el
principal.
Ejemplo:
create index Ind_1 on Estudiante (Nombre);
El efecto es que se crea un ndice con nombre Ind_1 que afectar al atributo Nombre de la tabla
Estudiante
Un ndice ya creado se elimina con el comando:
drop index <Nombre del ndice>