Sunteți pe pagina 1din 8

Ejemplo prctico de implementacin

Introduccin
En este captulo, estudiaremos un ejemplo, para recopilar los conocimientos aprendidos a lo largo del curso. El problema en s es mantener una base de datos de ornitologa (ciencia que estudia las aves). Se desea almacenar la informacin de cada una de las especies del pas. De cada especie se quiere conocer el nombre de la misma, el nombre cientfico, la clase a la que pertenece y el tipo de rbol en el que anida, as como si es un ave migratoria o no. De cada clase de rbol, se desea conocer su nombre, el tipo de hoja, y la regin de la cual es autctono. Por consiguiente, tenemos las siguientes entidades: ave: cod_ave, nombre, nom_cientifico, clase, migratoria, observaciones rbol: cod_arbol, nombre, tipo_hoja regin: cod_region, desc_region

Las relaciones que tenemos son las siguientes: ave-rbol: un ave puede anidar en varios tipos de rboles, y en un rbol pueden anidar varias especies (N-M). rbol-regin: un rbol puede ser autctono de varias regiones, y en una regin puede haber distintas clases de rboles (N-M).

Bases de datos con SQL Server 2000 Transact SQL

Grupo EIDOS

Con la anterior informacin, podemos obtener el diagrama entidad-relacin que vemos en la Figura 94.

Figura 94

Una vez realizado el diseo conceptual, el siguiente paso es realizar el diseo lgico, cuya primera etapa es el paso a tablas. Cada entidad genera una tabla, con sus atributos, y las relaciones N-M generan tambin tabla, con las claves de ambas entidades como atributos. Con esto, nos queda el esquema lgico que muestra la Figura 95.

Figura 95

El siguiente paso en el diseo es realizar el diseo fsico, ya que en nuestro caso no se aplicarn mtodos de normalizacin o particionamiento. Lo que realizaremos es codificar las instrucciones necesarias en Transact SQL, para obtener el esquema fsico. Destacar que lo que aqu entendemos por diseo fsico, tambin engloba al diseo lgico especfico, al usar un SGBD concreto para la implementacin. Para implementar el esquema en Transact SQL, utilizaremos el Query Analizer de SQL Server.

Lenguaje de definicin de datos


Lo primero que haremos ser crear la base de datos, a la que denominaremos ornitologa, para lo cual escribimos el Cdigo fuente 195.

CREATE DATABASE ornitologia Cdigo fuente 195

Una vez creada la base de datos, nos conectamos a ella, seleccionndola de la lista desplegable que aparece en la parte superior derecha del Query Analizer.

196

Grupo EIDOS

23. Ejemplo prctico de implementacin

A continuacin crearemos las tablas obtenidas en el esquema lgico. Empezaremos por crear la tabla ave.

CREATE TABLE ave ( cod_ave smallint NOT NULL, nombre varchar(30) NOT NULL, nom_cientifico varchar(30), clase varchar(10), migratoria bit) Cdigo fuente 196

En la anterior sentencia cabe destacar que los atributos cod_ave y nombre han sido declarados como no nulos, es decir, no se podr insertar filas que no tengan valores nulos para dichos atributos. Para especificar si un ave es migratoria o no, se utilizar un campo bit, es decir, un 0 para indicar que el ave no es migratoria, y un 1 si lo es. Anlogamente, creamos la tabla arbol.

CREATE TABLE arbol ( cod_arbol smallint NOT NULL, nombre varchar(30) NOT NULL, tipo_hoja varchar(10)) Cdigo fuente 197

Seguimos con la tabla de regiones.


CREATE TABLE region ( cod_region smallint NOT NULL, desc_region varchar(30) NOT NULL) Cdigo fuente 198

Y por ltimo las tablas que las relacionan, que son ave_arbol, y arbol_region:

CREATE TABLE ave_arbol ( cod_ave smallint NOT NULL, cod_arbol smallint NOT NULL) CREATE TABLE arbol_region ( cod_arbol smallint NOT NULL, cod_region smallint NOT NULL) Cdigo fuente 199

Una vez creadas las tablas, el siguiente paso es crear los ndices para ellas. Empezaremos por crear un ndice nico que ser la clave de la tabla ave, al que llamaremos clave, y que utilizar el campo cod_ave.

197

Bases de datos con SQL Server 2000 Transact SQL

Grupo EIDOS

ALTER TABLE ave ADD CONSTRAINT clave_av PRIMARY KEY (cod_ave) Cdigo fuente 200

Anlogamente hacemos con las dems tablas, donde los ndices de clave nica sern por cod_arbol para la tabla arbol, por cod_regin para la tabla regin, por cod_arbol y cod_region para la tabla.arbol_region, y por cod_ave y cod_arbol para la tabla ave_arbol:

ALTER ALTER ALTER ALTER

TABLE TABLE TABLE TABLE

arbol ADD CONSTRAINT clave_ab PRIMARY KEY (cod_arbol) region ADD CONSTRAINT clave_re PRIMARY KEY (cod_region) ave_arbol ADD CONSTRAINT clave_aa PRIMARY KEY (cod_ave,cod_arbol) arbol_region ADD CONSTRAINT clave_ar PRIMARY KEY (cod_arbol,cod_region) Cdigo fuente 201

Oh, !vaya!, nos hemos olvidado de definir un atributo para la tabla ave. Pero eso no es problema, ya que podemos modificar cmodamente el esquema de dicha tabla, mediante la sentencia ALTER, para introducir un nuevo campo.

ALTER TABLE ave ADD observaciones text NULL Cdigo fuente 202

Por ltimo, es labor del administrador el decidir a quien y sobre que objetos otorga qu permisos. Nosotros, de momento, crearemos una vista para consultar todas las aves que son migratorias

CREATE VIEW migratorias AS SELECT nombre FROM ave WHERE migratoria = 1 Cdigo fuente 203

Lenguaje de manipulacin de datos


Hasta ahora hemos estado utilizando el Lenguaje de Definicin de Datos, para definir el esquema. A continuacin utilizaremos el Lenguaje de Manipulacin de Datos para introducir informacin en el esquema, y para realizar algunas consultas. Empezaremos aadiendo los siguientes datos: Tabla ave Cod_ave Nombre 1 2 Flamenco Pato salvaje Nom_cientifico Clase Zancuda Migratoria Observaciones Si Migran en grupo hacia lugares clidos

Palmpedo No

198

Grupo EIDOS

23. Ejemplo prctico de implementacin

3 4

Mirlo Blanco Golondrina Golondrina comn


Tabla 33

Si Si

Emite un sonido muy peculiar Famosas por los versos de Becquer

INSERT INTO ave (cod_ave, nombre, clase, migratoria, observaciones) VALUES (1, 'Flamenco', 'Zancuda', 1, 'Migran en grupo hacia lugares clidos') INSERT INTO ave (cod_ave, nombre, clase, migratoria) VALUES (2, 'Pato salvaje', 'Palmipedo', 0) INSERT INTO ave (cod_ave, nombre, migratoria, observaciones) VALUES (3, 'Mirlo Blanco', 1, 'Emite un sonido muy peculiar') INSERT INTO ave (cod_ave, nombre, nom_cientifico, migratoria, observaciones) VALUES (4, 'Golondrina', 'Golondrina comn', 1, 'Famosas por los versos de Becquer') Cdigo fuente 204

Tabla rbol Cod_arbol Nombre Tipo_hoja 1 2 3 4 Encina Roble Naranjo Pino Caduca Perenne Caduca Perenne
Tabla 34

INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES

INTO arbol (cod_arbol, nombre, (1, 'Encina', 'Caduca') INTO arbol (cod_arbol, nombre, (2, 'Roble', 'Perenne') INTO arbol (cod_arbol, nombre, (3, 'Naranjo', 'Caduca') INTO arbol (cod_arbol, nombre, (4, 'Pino', 'Perenne')

tipo_hoja) tipo_hoja) tipo_hoja) tipo_hoja)

Cdigo fuente 205

199

Bases de datos con SQL Server 2000 Transact SQL

Grupo EIDOS

Tabla regin Cod_region Desc_region 1 2 3 4 5 Centro Sur Nor-noroeste Pirineos Levante


Tabla 35

INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES

INTO region (cod_region, (1, 'Centro') INTO region (cod_region, (2, 'Sur') INTO region (cod_region, (3, 'Nor-noroeste') INTO region (cod_region, (4, 'Pirineos') INTO region (cod_region, (5, 'Levante')

desc_region) desc_region) desc_region) desc_region) desc_region)

Cdigo fuente 206

Supongamos ahora que nos dicen que puede haber pinos en las regiones centro, nor-noroeste y Pirineos, naranjos en la regin Levante, encinas en las regiones centro, sur y nor-noroeste y robles en la regin centro. Lo que tenemos que hacer es dar de alta estas filas en la tabla arbol_region, con los valores correspondientes a cada cdigo de arbol y regin.

INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES INSERT VALUES

INTO arbol_region (4, 1) INTO arbol_region (4, 3) INTO arbol_region (4, 4) INTO arbol_region (3, 5) INTO arbol_region (1, 1) INTO arbol_region (1, 2) INTO arbol_region (1, 3) INTO arbol_region (2, 1)

(cod_arbol, cod_region) (cod_arbol, cod_region) (cod_arbol, cod_region) (cod_arbol, cod_region) (cod_arbol, cod_region) (cod_arbol, cod_region) (cod_arbol, cod_region) (cod_arbol, cod_region)

Cdigo fuente 207

200

Grupo EIDOS

23. Ejemplo prctico de implementacin

Supongamos ahora que nos dicen que el mirlo blanco anida en los naranjos y en los pinos, y que los patos salvajes anidan en los estanques donde preferentemente haya encinas. Lo que hay que hacer es crear las filas correspondientes a cada uno de los cdigos en la tabla ave_arbol.

INSERT VALUES INSERT VALUES

INTO ave_arbol (cod_ave, cod_arbol) (3, 3) INTO ave_arbol (cod_ave, cod_arbol) (3, 4)

INSERT INTO ave_arbol (cod_ave, cod_arbol) VALUES (2, 1) Cdigo fuente 208

Puesto que de momento no hemos encontrado ningn mirlo blanco, cambiaremos este ave por el mirlo comn. Para ello debemos actualizar la fila correspondiente, con la sentencia que aparece en el Cdigo fuente 209.

UPDATE ave SET nombre = 'Mirlo comn' WHERE nombre = 'Mirlo blanco' Cdigo fuente 209

Supongamos ahora que queremos realizar las siguientes consultas, cuyas sentencias se especifican a continuacin: Todos los rboles de la regin centro:

SELECT nombre FROM arbol, arbol_region, region WHERE region.desc_region = 'centro' AND region.cod_region = arbol_region.cod_region AND arbol_region.cod_arbol = arbol.cod_arbol Cdigo fuente 210

Lo que hace la anterior sentencia es obtener el atributo desc_arbol de la tabla arbol. Para ello, primero se pone la condicin de que la regin debe ser centro. Con las filas obtenidas, hacemos un join contra la tabla arbol_region, para obtener el cdigo de los rboles cuya regin es centro. Si ahora queremos obtener la descripcin del rbol, deberemos realizar otro join contra la tabla rbol. El resultado obtenido son los rboles pino, encina y roble. El nmero de aves que son migratorias. Para ello deberemos contar todas las filas de la tabla ave, cuyo atributo migratoria tenga el valor true.

201

Bases de datos con SQL Server 2000 Transact SQL

Grupo EIDOS

SELECT count(*) FROM ave WHERE migratoria = 1 Cdigo fuente 211

El resultado obtenido es el de 3 aves. El nombre de las aves que anidan en rboles de hoja caduca ordenados alfabticamente. Lo que debemos hacer es seleccionar primero todas las filas cuyo atributo tipo_hoja para luego hacer el join de estas filas con la tabla ave_arbol por el campo cod_arbol, para obtener as el cdigo de las aves que anidan en dichos rboles. Acto seguido, si queremos obtener el nombre de las aves, deberemos realizar un join de las filas obtenidas, con la tabla ave, por el atributo cod_ave y proyectar sobre nombre. La anterior explicacin se resume en la sentencia mostrada en el Cdigo fuente 212.

SELECT ave.nombre FROM arbol, ave_arbol, ave WHERE arbol.tipo_hoja = 'caduca' AND arbol.cod_arbol = ave_arbol.cod_arbol AND ave_arbol.cod_ave = ave.cod_ave ORDER BY ave.nombre Cdigo fuente 212

Como resultado del Cdigo fuente 212, obtenemos que dichas aves corresponden al mirlo blanco y al pato salvaje Si ahora queremos consultar todas las aves que son migratorias, podemos aprovechar la vista anterior, para hacerlo ejecutamos el Cdigo fuente 213.

SELECT * FROM migratorias Cdigo fuente 213

202

S-ar putea să vă placă și