Você está na página 1de 75

(

Captulo 4

BASES DE DATOS RELACIONALES. DISEO Y NORMALIZACIN DE UNA BASE DE DATOS

4.1 EL MODELO RELACION AL: CONCEPTOS BSICOS VA modelo rclacional de base de datos fue propuesto por E.F. Codd en i*>?(), Sin embargo, los productos comerciales no aparecieron en el mercado hasta ! > primeros aos de la dcada de los ochenta.

Las desventajas de los modelos jerrquico y en red condujeron a un intenso micros en el nuevo modelo de datos relacional cuando fue escrito por primera vez pir el Dr. Codd. El modelo relacional era un intento de simplificar la estructura de h\ hases de datos. Eliminaba las estructuras explcitas padre/hijo de la base de dttns, y en su lugar representaba todos los datos como sencillas tablas fila/columna tic valores.

lina base de datos relacional ha de cumplir al menos dos objetivos. El (vi inici es que el sistema debe presentar al usuario los datos en forma de tabla. ! ";i sota fila en una tabla corresponde a un registro, y una columna en una tabla u,iresponde a un solo campo en un

registro. De hecho, a menudo, utilizaremos con tenencia los trminos fila y registro como sinnimos. De la misma forma, uplearcmos indistintamente los trminos columna y campo.

Hay que destacar que, a diferencia del anterior diseo de red, no existe un ^ 'grama esquemtico explcito entre las tablas. Esta observacin podra conducir a *' eonclusin errnea de que una base de datos relacional es simplemente una f>r<-sentacn simplificada para el usuario del concepto clsico de archivo.

Sin embargo, esto no es as. La segunda earacterstiea importante de la,

1 ? *

de datos relacinales distingue claramente los sistemas de base de datos relacL? los astenias de archivo y de los sistemas anteriores de base de datos tipo red. Otra caracterstica esencial de cualquier base de datos relaciona) N I 1 I

acepte el lenguaje de consulta "set-at-a-time". Con los sistemas tradicional^ enguaje de consulta estaba orientado "record-at-a-time". Esto implicaba S

lenguaje de consulta solo era capaz de expresar una pregunta para obtener un i t rcglstro. Por lo tanto, si el programador deseaba obtener un conjunto de re,! f tema que escribir la orden para ejecutar la pregunta varias veces. Por cjemnll f qu.siramos obtener datos sobre todos los empleados del departamento de proc^ de datos y exoneran doscientos empleados que cumplieran esta condicin h f

consulta tendra que ser ejecutada 200 veces. Cada ejecucin aportara un registro? lo devolvera al programa de aplicaciones. ' I

Con un sistema relacional el proceso es bastante ms sencillo, ya que '\ lenguaje de consulta es mucho ms potente. El lenguaje es suficientemente potente para pedir cualquier subconjunto de filas y columnas. Cuando el usuario asigna una pregunta, el sistema recoge todos los datos y los devuelve al usuario. El usuario realiza solo una pregunta (sin iteraciones mltiples) y el sistema devuelve todos te datos deseados. 1 f 1 |

Otro punto importante es que los lenguajes relacinales para los producto,

de bases de datos son relativamente fciles de aprender. No es necesario ser un programador profesional para acceder a la base de datos. Un usuario iniciado en informtica puede utilizar un terminal o un microordenador c introducir una orden en el lenguaje de consulta. El sistema extraer las filas deseadas y har que aparezcan en pantalla.

' j 1

Se ha desarrollado un gran nmero de lenguajes de consulta de base de datos. El ms conocido de estos lenguajes es el SQL. Se trata de un lenguaje c base de datos "set-at-a-time" simple pero muy completo. i-jj os ltimos aos, numerosas firmas comerciales han introducido en el . productos de bases de datos relacinales orientados al SQL. Las versiones fflC**1^ d estos productos tambin estaban orientadas al SQL, pero eran #i&WfCdiosincrticas, es decir, desconectados o independientes. En respuesta a ;An el Instituto de Normalizacin Americano ANSI (American National i,n/v nstitute) ha establecido una nonnativa oficial. Ksta normalizacin ha permitido que la mayora de los productos actuales el SQL embebido (o inmerso). Esto permite que un programa de Sacioncs escrito en COBOL, FORTRAN, PL/1, C, Ensamblador u otro lenguaje Z wrainacin estructurado contenga cdigo SQL. Esto significa que un sistema . l^so tic datos con trabajo por lotes (batch) y/o con programas de transaccin i-tlv- tambin interactuar con el sistema gestor de base de datos. El SQL u-.*cto y el SQL embebido son similares. Sin embargo, se pueden destacar IlViatiis diferencias importantes. Por ejemplo, el SQL embebido debe identificar de llfiunu forma la posicin en la memoria donde se van a emplazar los datos despus lk ser estrados de la base de datos. Adems, debido a que los lenguajes de (wramacin tradicionales estn orientados al registro, se requiere un cdigo i-.veial SQL para procesar una pregunta que devuelva mltiples filas. La figura 4.1 muestra cmo funciona SQL. El sistema informtico de la ! nutra tiene una base de datos que almacena informacin importante. Si el sistema informtico estuviera en una empresa comercial, la base de datos podra almacenar 4.1S de inventario, produccin, ventas o nmina. En un computador personal, la kisc de datos podra almacenar datos referentes a los cheques que usted haya Jumado, lisias de personas y sus nmeros de telfono, o datos extrados de un '.f-.temu informtico mayor. El programa informtico que controla la base de datos denomina sistema de. gestin de base de datos (Datbase Management System) o >U\!S (en castellano SGBD).

a a aa

4.2 EL LENGUAJE SQL

El SQL (Structured Query Language) fue definido inicialmentc por D. D. Chamberlin y otros durante la ltima parte de la dcada de los setenta. Ai principise Je denomin SEQUEL (Structured English Query Language) y fue desarrollado junto con el prototipo de base de datos relacional de IBM: el System R. El System R es el predecesor del DB2 y del SQL/DS, mientras que el SEQUEL es el precursor del SQL. 1

tu-jn SOI.

Dalos

ODDO

Sistema Gestor Base de Datos

Base de Datos

Cuando se necesita recuperar datos de la base de datos, se utiliza lenguaje SQL para efectuar la peticin. El DBMS procesa la peticin Sof recupera los datos solicitados de la base de datos y los devuelve. Este proceso ! solicitar datos de la base de datos y de recibir los resultados se denomina consuk (query) a la base de datos; de aqu el nombre Structured Query Language gj nombre Structured Query Language es realmente y en cierta medida inapropiado En primer lugar, SQL es mucho ms que una herramienta de consulta, aunque es fue su propsito original y recuperar datos sigue siendo una de sus funciones mfe importantes. SQL se utiliza para controlar todas las funciones que un DBM proporciona a sus usuarios, incluyendo: Definicin de datos: SQL permite a un usuario definir la estructura y organizacin de los datos almacenados y de las relaciones entre ellos. Recuperacin de datos: SQL permite a un usuario o a un programa de aplicacin recuperar los datos almacenados de la base de datos y utilizarlos. Manipulacin de datos: SQL permite a un usuario o a un programa <k aplicacin actualizar la base de datos aadiendo nuevos datos, suprimiendo datos antiguos y modificando datos previamente almacenados. Control de acceso: SQL puede ser utilizado para restringir la capacidad de un usuario para recuperar, aadir y modificar datos, protegiendo as los datos almacenados frente a accesos no autorizados. Comparticin de datos: SQL se utiliza para coordinar la comparticin de datos por parte de usuarios concurrentes, asegurando que no interfieren unos con otros. Integridad de datos: SQL define restricciones de integridad en la base de datos, protegindola contra corrupciones debidas a actualizaciones inconsistentes o a fallos del sistema. Por tanto, SQL es un lenguaje completo de control e interactuacin con un sistema de gestin de base de datos. En segundo lugar, SQL no es realmente un lenguaje informtico completo como COBOL, FORTRAN o C. SQL no dispone de la sentencia JF para examinar condiciones, ni de la sentencia GOTO para bifurcaciones, ni de las sentencias DO o FOR para iteraciones. En vez de ello, SQL es un sublenguaje de base de datos, consistente en unas treinta sentencias especializadas para tareas de gestin de bases de datos. Estas sentencias SQL se incorporan a otro lenguaje (SQL embebido), como COBOL, FORTRAN o C para extender ese lenguaje y permitirle utilizar el acceso a la base de datos. Actualmente existe un lenguaje extensin de SQL denominado PLSQL, que incorpora a SQL los condicionales, las bifurcaciones, las iteraciones y otros elementos de los lenguajes de programacin estructurados. . t, SOI no es un lenguaje particularmente estructurado, especialmente , c Pasca[. bn vez

Finalmente, SQL no es un icnyMjv Va

^unas reglas

^ nenen sentido. A pesar de la imprecisin de su

^fToL ha8^o Zo el lenguaje estndar para la uti.izacn de bases de ^HcPonaS SQL es a la vez un potente lenguaje y un lenguaje fac de aprender. 4 2.1 Objetivos esenciales de SQL SOI no es en s mismo un sistema de gestin de base de datos ni un , , !t n No se puede ir a una tienda de informtica y "comprar SQL ,mHiucto de un sistema de gestin de base de datos, un

S K:?unfh nta para comunicarse con el DBMS. La Figura 4.2 muestra 5T* deoponente' de un DBMS tpico y cmo SQL acta como el "adhesivo" que los une.

(SU

La mquina de base de dalas es el corazn del DRMC SSSN^V rCCUPCrar rCalmCnte os ^Ttidi^ nct.uoncs SQL procedentes de otros componentes DBMS ^ * facihdad de formularios, un escritor de informes una fe r f * .ntcn.ct.vas, desde los programas de aplicac. ce rito pe "^ dC desde otros s.stemas informticos. Como muestra la FWa SOI T * papeles di terentes. A saber: 8 ' ^L Jcga nag

SQL es un lenguaje de consultas interactivas: Los usuarios escrib. SQL en un programa SQL interactivo para recuperar date y Z^V* > pantalla, proporcionando una herramienta conveniente y facVH [ consultas ad hoc de la base de datos. mlim m

SQL es un lenguaje de programacin de base de datos I os nm, asertan ordenes SQL en sus programas de aplicacin p^aMT base, lauto los programas escritos por el usuario como to^^t^ de la base de datos (tales como los escritores de informes v laTh ^ entrada de datos) utilizan esta tcnica para acceso a la 12 d/daTos ^* SQL es un lenguaje de administracin de base de datos: El administrad,,,* la base de datos responsable de gestionar una base de Z C maXCOmPutador ^ SQL para definir la estn de a base de daos y para controlar el acceso a los datos almacenados. SL? "A/'"8"3''6 diente/servd0^ Los Paramas de computador persona) utilizan SQL para comunicarse sobre una red de rea local con servidores* base de datos que almacenan ios datos compartidos. Muchas aplicacin* novedosas estn utilizando esta arquitectura de cliente/servidor, que minate el trafico por la red y permite que tanto los PCs como los servidores efectu mejor su trabajo.

SQL es un lenguaje de base de datos distribuidas: Los sistemas de aestii* de base de datos distribuidos utilizan SQL para ayudar a distribuir datos , travs de muchos sistemas informticos conectados. El software DBMS dt cada sistema utiliza SQL para comunicarse con los otros sistemas, envan*' peticiones para acceso a datos.

SQL es un lenguaje de pasarela de base de datos: En una red informan,.) con una mezcla de diferentes productos DBMS, SQL se utiliza a menudo en una pasarela (gateway) que permite que nuestro producto de DBMS se comunique con otro producto. , ,ier ido por tanto, como una herramienta potente y til para St datos almacenados en una base de Jemas informticos a los

C aractersticas de SQL ... ve/ un lenguaje fcil de entender y una herramienta completa ^V^^^Sgunas de las principales caractersticas de SQL y las ^Ti mercado que le han hecho tener xito: , n,ia de los vendedores: SQL es ofertado por todos los principales DBMS y ningn producto nuevo de base de datos puede tener xito ^,fCSI Wl Una base de datos basada en SQL y los programas que la *^*L^ transferirse de un DBMS al DBMS de otro vendedor con mnimo mmn p ,cd ; rcentrCnamiento del personal. Herramientas de base t X e SQL que funcionan con varios productos de DBMS, tales *^tX;'dc informe y generadores de aplicacin,

estn presentes cu c ! 1 .a independencia del vendedor proporcionada de esta manera poi SQL es I; fes razones ms importantes de su popularidad. friabilidad a travs de sistemas informticos: Los vendedores de DBMS en Mt oleran sus productos sobre sistemas informticos que van desde dadores personales y estaciones de trabajo hasta redes de arca local, ^.computadores y maxicomputadores. Las aplicaciones basadas en SQL que ,,nuen/an en sistemas monousuario pueden ser transferidas a sistemas mayores de ,-,mK,.,nputudores o maxicomputadores cuando crecen. Los datos procedentes de de datos corporativas basadas en SQL pueden ser extradas y remitidas a W, de datos departamentales o personales. Finalmente, los econmicos .-...pilladores personales pueden ser utilizados para construir prototipos de ... .aviones de bases de datos basadas en SQL antes de transferirlas a un sistema , JniMurio costoso. 1 i Mindares SQL: Hl American National Standards nstitute (ANSI) y la | .atumd Standards Organizada (ISO) han publicado conjuntamente un Piular oficia! para SQl ste se ha convertido tambin en un estndar del U.S. ^ a Information Processing Standard (F1PS), lo que le convierte en un - metimiento esencia! para los grandes contratos informticos del gobierno, hn ;'fl>a. X/OPEN, un estndar para un entorno de aplicacin por cable basado en f :'X. ha aadido SQL como el estndar para acceso a base de datos. La Open s "!rc Foundation (OSF), un grupo de vendedores de UNIX, planea basar su ; !-idar de acceso a base de datos en SQL. Estos estndares sirven como sello '!*al de aprobacin para SQL y han acelerado su aceptacin en el increado.

I une amento relacional: SQL es un lenguaje parbase de datos relacinales y* t popularizado juntamente con el modelo de base de datos relacional. La es'tL? f tabular de idas y columnas de una base de datos relacional es intuitiva Pa > usuarios y hace que el lenguaje SQL se mantenga simple y fcil de entender modelo relacional tiene tambin un fuerte fundamento terico que ha mkLf evolucin y la implemcntacin de las bases de datos relacinales. CabaS I I

sobre una ola de aceptacin provocada por el xito del modelo relacional SOI I ha convertido en el lenguaje de base de datos para las bases de datos relacinale^ Claridad y sencillez de sintaxis: Las sentencias SQL parecen sencillas frase, ingles, lo que hace que SQL sea fcil de aprender y entender. Esto es en mi I f

debido a que las sentencias de SQL describen los datos a recuperar, en lugaYl I especificar cmo hallar los datos. Las tablas y columnas de una base de datos SOt pueden tener nombres largos y descriptivos. Como consecuencia, la mayora de 1 sentencias SQL "dicen lo que significan" y pueden ser ledas como frases claras v naturales. "*> ! 1 1

Consultas interactivas ad hoc. SQL es un lenguaje de consultas interactivas que proporciona a los usuarios acceso ad hoc a los datos almacenados. Utilizando SQ1 interactivamente, un usuario puede obtener respuestas incluso a cuestiones complejas en minutos o segundos, en fuerte contraste con los das o semanas que le llevara a un programador escribir un programa de informe a medida. Debido a la potencia de consulta ad hoc de SQL, los datos son ms accesibles y pueden ser utilizados para ayudar a una organizacin a tomar decisiones mejores y ms informadas.

Acceso a la base de datos mediante programas: SQL es tambin un lenguaje de base de datos utilizado por los programadores para escribir aplicaciones que acceden a una base de datos. Las mismas sentencias SQL se utilizan para acceso interactivo y programado, de modo que las partes de acceso a base de datos de un programa pueden ser comprobadas primero con SQL interactivo y luego insertadas dentro del programa. En contraste, las bases de datos tradicionales proporcionan un conjunto de herramientas para acceso mediante programas y una facilidad de consulta aparte para peticiones ad hoc, sin ninguna sinergia entre los dos modos de acceso.

Vistas mltiples de datos: Utilizando SQL, el creador de una base de datos puede dar a diferentes usuarios de a base de datos distintas vistas (diferentes en su estructura y contenido). Por ejemplo, la base de datos puede ser construida de modo que cada usuario solo vea datos de su propio departamento o de su propia regin de ventas. Adems, los datos procedentes de diferentes partes de la base de datos, pueden combinarse y presentarse al usuario como una simple fila/columna . tabla Las vistas de SQL pueden ser utilizadas de este modo para mejorar la * '^jjad de una base de datos y para acomodarla a las necesidades particulares de 2'usuarios individuales. aie completo de base de datos: SQL fue inicialmcnte desarrollado como un ,JfflSaic de consulta ad hoc, pero su potencia va ahora ms all de la recuperacin T Has SQL proporciona un lenguaje complejo y consistente para crear una base t dnios gestionar su seguridad, actualizar sus contenidos, recuperar los datos y ivuiirlos entre muchos usuarios concurrentes. Los conceptos de SQL que son ^Tr-ndidos en una parte del lenguaje pueden ser aplicados a otras rdenes de SQL, haciendo ms productivos a sus usuarios.

Definicin dinmica de datos: Utilizando SQL, la estructura de una base de datos puede ser modificada y ampliada dinmicamente, incluso mientras los usuarios Uto accediendo a los contenidos de la base de datos. Este es un avance importante "bre los lenguajes de definicin de datos estticos, que impiden el acceso a la base Je datos mientras su estructura est siendo modificada. SQL proporciona de este modo: mxima flexibilidad, permitiendo que una base de datos se adapte a exigencias cambiantes mientras continan sin ser interrumpidas las aplicaciones en me.!. Vrquilectura cliente/servidor: SQL es un vehculo natural para imptementar aplicaciones utilizando una arquitectura cliente/servidor distribuida. En este papel, SOt sirve como enlace entre los sistemas informticos "frontales"' (front-end) optimizados para interaccin con el usuario y los sistemas "de apoyo" (back-end) r .peeializatlos para gestin de bases de datos, permitiendo que cada sistema rinda lo mejor pos ible. SQL tambin permite que los computadores personales funcionen como limtales de bases de datos mayores, dispuestas en minicomputadores y Muxieomputadorcs, proporcionando acceso a datos corporativos desde aplicaciones lonnticas personales. listas son esencialmente las razones por las que SQL ha emergido como la herramienta estndar para gestionar datos en computadores personales, '""computadores y maxicomputadores. 4.3 DISEO DE UNA BASE DE DATOS RELACIONAL Lo primero que hay que tener presente a la hora de disear una base de datos Nacional es el propio concepto de modelo relacional, que organiza los datos en una h<tse de datos como una coleccin de tablas teniendo presente inicialmcnte lo siguiente:

Cada tabla tiene un nombre que la identifica unvocamente. Cada tabla tiene una o ms columnas nominadas, que estn dispuestas en , orden especifico de izquierda a derecha. ** Cada tabla tiene cero o ms filas, conteniendo cada una un nico valor en oa L columna. Las filas estn desordenadas.

Todos los valores de una columna determinada tienen el mismo tipo de datos- r estos estn extrados de un conjunto de valores legales llamado el dominio la columna. c

A su vez, las tablas estn relacionadas unas con otras por los datos qUc contienen. El modelo de datos relacional utiliza claves primarias y claves secundarias (extemas o forneas) para representar estas relaciones entre tablas A la hora de definir las claves primarias y secundarias es necesario tener presente de entrada lo siguiente:

Una clave primaria es una columna o combinacin de columnas dentro de una tabla cuyo (s) valor (es) identifica (n) unvocamente a cada fila de la tabla. Cada tabla tiene una nica clave primaria. Una clave secundaria es una columna o combinacin de columnas en una tabla cuyo (s) valor (es) es (son) un valor de clave primaria para alguna otra tabla. Una tabla puede contener ms de una clave secundaria, enlazndola a una o ms tablas. Una combinacin clave primaria/clave secundaria crea una relacin padre/hijo entre las tablas que las contienen.

En el captulo anterior ya se han tratado de modo amplio todos estos conceptos de forma aislada. No obstante, en este captulo veremos cmo se trabaja de modo conjunto con todos estos conceptos para disear ordenadamente una base de datos.

4.3.1 Las reglas de Codd

Tcd Codd present en 1985 en un artculo publicado en Computerworld las doce reglas que una base de datos debe obedecer para ser considerada verdaderamente como relacional. Estas reglas se han convertido desde entonces en una definicin semioficial de una base de datos relacional. Las citadas reglas son las siguientes: ia de informacin: Toda la informacin de una bas< de datos relacional est ^sentada explcitamente a nivel lgico y exactamente de un modo mediante lores en tablas. ta de acceso garantizado: Todos y cada uno de los da:os (valores atmicos) de f base de datos relacional se garantiza que sean lgicamente accesibles recurriendo fua combinacin de nombre de tabla, valor de clave primaria y nombre de columna. Tratamiento sistemtico de valores nulos: Los valores nulos (distintos de la atkna de caracteres vaca o de una cadena de caracteres en blanco y distinta del tero o de cualquier otro nmero) se soportan en los DBMS completamente relacinales para representar la falta de informacin y la intimacin inaplicable de tJIi modo sistemtico c independiente del tipo de datos. Catlogo en lnea dinmico basado en el modelo relacioial: La descripcin de la base de datos se representa a nivel lgico del mismo modo que los datos ordinarios, de modo que los usuarios autorizados puedan aplicar a su interrogacin el mismo lenguaje relacional que aplican a los datos regulares. Regla de sublenguaje completo de datos: Un sistema rdacional puede soportar v nrios lenguajes y varios modos de uso terminal (por ejeirrjlo, el modo de rellenar con blancos). Sin embargo, debe haber al menos un lengua* cuyas sentencias sean expresables mediante alguna

sintaxis bien definida, como (adenas de caracteres, y que sea completa en cuanto al soporte de todos los puntos siguientes: Definicin de datos. * Definicin de vista. * Manipulacin de datos (interactiva y por programa). Restricciones de integridad. * Autorizacin. fronteras de transacciones (comienzo, cumplimentaciny vuelta atrs). Kegla de actualizacin de vista: Todas las vistas que seai tericas actualizablcs M,n tambin actualizablcs por el sistema. Insercin, actualizacin y supresin de alto nivel: La capacidad de manejar una elacin de base de datos o una relacin derivada como un tico operando se aplica

2;:':;:;z:*im * "b,"s- s

* " i *,;

independencia fsica de los rlatne- i finales p_ ^Sefe^^ erados, va sea a ,as representaciones de almacenUn^ TZ ^

relaciona, y almacenles en el catlogo, no ** d"tru:u5en,Ca ^ dStrbUdn: Un BMS rd * -dependencia de Reg a d e 0 subvers.on. S. un sistema relaciona! tiene un lenguaje de bajo nivel (un solo reparo cada vez), ese bajo nivel no puede ser utilizado Jara subvert suprimir las reglas de integridad y las restricciones expresad sTel e, ; relaciona! de nivel superior (mltiples registros a la vez). 8J

Como comntanos a las doce reglas de Codd podemos empezar diciendo que cS muy d.hc.1 que un DBMS satisfaga al pie de la letra todas llTrcZZ obstante, se intenta aproximarse lo ms posible a su contenido. relaeion'd oreSu-i^ la dofinici" "formal do una base de dato,

ruuuonai presentada ya anteriormente. datos en hbR1sfde2drufUCm deL mn n PT, dc las clavcs P^marias para localizar

, T'nbrC dC la taWa k>CaliZi ,a M "^ta, d nomba-

de i columna encuentra la columna correla y el valor de clave primaria encuentra a lila que contiene un dato individual de inters. encuentra

NLLL. La RCgla 3 rCqUC,'C SPOrtC Para fa'ta dc dat0S mcdi;illt^ I uso de valores

Fn otrasLnaSs l^f^ T * ^ **" rClaCna! ^ descriptiva, -n otras palabras, la base de datos debe contener ciertas tnhl ,l<> .,-.., columnas describan la estructura de la propia base de dato ^ , , Regla 5 ordena la utilizacin de un lenguaje dc base de datos relaciona 1 SO aunque no se requiera especficamente SQL. Hl lenguaje debe o * C0'T soporta todas las funciones bsicas dc un DBMS (creacin de una base ^ recuperacin y entrada de datos, implcmentac.n dc la segundad de la *" " de datos, etc) , a Reda 6 trata de las vistas, que son tablas virtuales utilizadas para da. a ; usuarios de una base de datos diferentes vistas de su estructura. Es una UZ ms difciles de implemcntar en la prctica, y ningn producto

^me'rciafsuclc satisfacerla totalmente hoy da. i , Reda 7 refuerza la naturaleza orientada a conjuntos de una base de , , w relacional. Requiere que las fdas sean tratadas como conjuntos en c c insercin, supresin y actualizacin. La regla esta diseada pa a ;Svr implementaciones que solo soportan la modificacin o recorrido tila a na Jv la base de datos. 1 as Reglas 8 y 9 aislan al usuario o al programa de aplicacin de la mlp,cmcn.acin de bajo nivel de la base de datos. Especifican que las tcmeas de iC Cso a almacenamiento especficas utilizadas por el DBMS, c incluso los rubios a la estructura dc las tablas en la base de datos, no deberan afectar a la capacidad del usuario dc trabajar con os datos. K

la b; o ra ( 1 a Regla 10 dice que el lenguaje de base dc datos debera soportar las fricciones de integridad que restringen los datos que pueden ser introducidos en ,se de datos y las modificaciones que puedan ser efectuadas en esta Esta es :1c las reglas que no soportan la mayora de los productos comerciales DBMS. La Regla 11 dice que el lenguaje dc base de datos debe ser capaz dc manipular datos distribuidos localizados en otros sistemas informticos. finalmente, la Regla 12 impide -otros caminos" en la base de datos que pudieran subvertir su estructura relacional y su integridad.

4.3.2 Integridad Ll trmino integridad de datos se refiere a la correccin y completitud dc l->s datos en una base de datos. Cuando los contenidos dc una base de datos se modifican con sentencias INSERT (insertar), DELETE (borrar) o UPDA1 h (actualizar), la integridad dc los datos almacenados puede perderse dc muchas maneras diferentes. Por ejemplo:

Pueden aadirse datos no vlidos a la base de datos, tales como un pedid* especifica un producto no existente. P

Pueden modificarse datos existentes tomando un valor incorrecto com ' ejemplo, si se reasigna un vendedor a una oficina no existente. ' *! Los cambios a la base de datos pueden perderse debido a un error del sistem ' a un fallo en el suministro de potencia. ^sna o Los cambios pueden ser aplicados parcialmente, como por ejemplo si se aftitAi un pedido de un producto sin ajustar la cantidad disponible para vender. Una de las funciones importantes de un DBMS relacional es preservar B integridad de los datos almacenados en la mayor medida posible. Qu es la integridad de datos? . o ^ prefrvar la insistencia y correccin de los datos almacenados n DBMS relacional impone generalmente una o ms restricciones de integridad! datos Estas restricciones restringen los valores que pueden ser insertados en k base de datos o creados mediante una actualizacin de la base de datos Vario? tipos diferentes de restricciones de integridad de datos suelen encontrarse en 1 bases de datos relacinales, incluyendo: Datos requeridos: Algunas columnas en una base de datos deben contener w valor de dato vlido en cada fila, es decir, no se permite que contengan valores NULL o que falten. Pueden

especificarse columnas requeridas cuando se crea un tabla, en cuyo caso, el DBMS impedir los valores NULL en esas columnas. Chequeo de validez: Cada columna de una base de datos tiene un dominio, o sea, un conjunto de valores que son legales para esa columna. El DBMS puede ser preparado para impedir otros valores de datos en estas columnas. Integridad de entidad: La clave primaria de una tabla debe contener un valor nico en cada fila, diferente de los valores de todas las filas restantes. Los valores duplicados son ilegales y el DBMS puede ser preparado para forzar esta restriccin de valores nicos. Las restricciones de integridad de entidad aseguran que la clave primaria identifique unvocamente a cada entidad representada en la base de datos. Integridad referencial: Una clave secundaria (externa o fornea) en una base de datos relaciona] enlaza cada fila de la tabla hijo que contiene la clave fornea con la fila de la tabla padre que contiene el valor de clave primaria correspondiente. E DBMS puede ser preparado para forzar esta restriccin de clave fornea/clave primaria. Las restricciones de integridad referencial aseguran que las relaciones entre entidades en la base de datos se preserven durante las actualizaciones. En -. lar la integridad referencial debe incluir reglas que indiquen cmo manejar psR!l'lV-;ri de filas que son referenciadas mediante otras filas. comerciales: Las actualizaciones de una base de datos pueden estar * idas por reglas comerciales que gobiernan las transacciones en el mundo estn representadas por las actualizaciones. El DBMS puede ser preparado comprobar cada nueva fila aadida a cada tabla asegurndose que el valor en fW i ia n0 viole las reglas comerciales. Estas reglas comerciales pueden ser t as por el DBMS mediante los disparadores, que permiten emprender -iones complejas en respuesta a eventos tales como sentencias INSERI sotar). DELETE (borrar) o UPDATE (actualizar). riinvistencia- Muchas transacciones del mundo real producen mltiples lualizaciones a una base de datos. Las sentencias INSERT y UPDATE deben todas ejecutarse, de modo que la base de datos contine en un estado correcto y insistente. El DBMS puede ser preparado para forzar este tipo de regla de consistencia o para soportar aplicaciones que implementen tales reglas. El estndar SQL ANS/ISO especifica algunas de las restricciones de integridad de datos ms simples. Por ejemplo, la restriccin de datos requeridos est soportada por el estndar ANSI/ISO e implementada de manera uniforme en uisi todos los productos SQL comerciales. Las restricciones ms complejas, tales tomo las restricciones de reglas comerciales, no estn especificadas por el estndar ANSI/ISO y existe una amplia variacin en las tcnicas y tas sintaxis SQL utilizadas para soportarlas.

Problemas de integridad referencial

Lxisten cuatro tipos de actualizaciones de bases de datos que pueden corromper la integridad referencial de las relaciones padre/hijo de una base de datos. La insercin de una nueva fila hijo: Cuando se inserta una nueva fila en la tabla 'ajo, su valor de clave fornea debe coincidir con uno de los valores de clave puntara en la tabla padre. Si el valor de clave fornea no coincide con ninguna eliive primaria, la insercin de la fila corromper la base de datos, ya que habr un tojo sin un padre (un "hurfano"). Observe que insertar una fila en la tabla padre nunca representa un problema; simplemente se convierte en un padre sin hijos. ' a actualizacin de la clave fornea en una fila hijo: Esta es una forma diferente del problema anterior. Si la clave fornea se modifica mediante una sentencia S PDATE, el nuevo valor deber coincidir con un valor de clave primaria en la -'hla padre. En caso contrario la fila actualizada ser hurfana.

La Supres.on de una fila padre: Si una fiia de la tabla padre que tiene unn hijos se suprime, las filas hijo quedarn hurfanas. Los valores de clave forestas lilas ya no se correspondern con ningn valor de clave primaria en?** padre. Observe que suprimir una fila de la tabla hijo nunca representa un ^ el padre de esta fila simplemente tendr un hijo menos despus de la suprcs0^ La actualizacin de la clave primaria en una fila padre: Esta es una rJ diferente del problema anterior. Si la clave primaria de una fila en la tabla L?* modifica, todos los hijos actuales de esa fila quedarn hurfanos puesto , claves forneas ya no corresponden con ningn valor de clave primaria ' % r, independencia de su nmero de tablas implicadas, los ciclos lcs presentan problemas especiales respecto a las restricciones de rcfCrcneial Para impedir interbloqueo de insercin al menos una de las . as cn un ciclo referencial debe permitir valores NULL. Debido a esta i0ra scra conveniente que las restricciones de integridad referencial no ^t:"0V,probadas hasta despus de que se efectuaran una serie de iones jnterrelacionadas. Los ciclos referenciales tambin restringen las **f de supresin que pueden especificarse para las relaciones que forman el * < tralir de evitar las supresiones en cascada incontroladas mediante la l,,, de' determinadas reglas de supresin (RESTRICT o SET NULL).

Las caractersticas de integridad referencial del estndar SQL ANSI/1S( ocupan de cada una de estas cuatro situaciones. El primer problema (INSERTc tabla hijo) se maneja comprobando los valores de las columnas de clave |>r antes de permitir ejecutar la sentencia 1NSERT. Si no coincide con un valo. clave primaria, la sentencia INSERT se rechazar con un mensaje de error El segundo problema (UPDATE de la tabla hijo) es anlogamente tratad mediante comprobacin del valor de clave fornea actualizado. Si no hay un valw de clave primaria correspondiente, la sentencia UPDATE se rechaza acompaa* de un mensaje de error.

El tercer problema (DELETE de una fila padre) es ms compiejo, pudicnd tomarse distintas medidas segn cada caso particular. El cuarto problema (UPDATE de la clave primaria en la tabla padre) tambin se maneja por prohibicin. Antes que la clave primaria pueda so modificada, el DBMS efecta comprobaciones para asegurar que no hay filas hijo que tengan valores de clave fornea correspondientes. Si existen tales filas hijo, la sentencia UPDATE se rechazar unto con un mensaje de error. Ciclos re fe re nc i a les

Supongamos que en una base de datos la tabla TI contiene la columna H que es clave fornea para la tabla T2. Supongamos adems que la tabla T2 contiene la columna C2 que es clave fornea para la tabla TI. Estas dos relaciones forman uncido referencial. En esta situacin, cualquier fila determinada de la tabla TI *' refiere a una fila de a tabla T2, la cual a su vez se refiere a una fila de la tabla TI. y as sucesivamente. Este ciclo afecta nicamente a dos tablas, pero tambin C posible construir ciclos de tres o ms tablas. Aparadores i: concepto de disparador (definido inicialmente por Sybase) es ilativamente sencillo. Para cualquier evento que provoca un cambio cn el t,aenido de una tabla, un usuario puede especificar una accin asociada que el jlBMS debera efectuar automticamente a la realizacin del evento. Los tres vffltos que pueden disparar una accin automtica asociada son ejecuciones de NSLRT, PELETE o UPDATE sobre filas de la tabla. La accin disparada por uno 3c estos ev entos se especifica mediante una secuencia de sentencias SQL. Los disparadores proporcionan un modo alternativo de implcmcntar las iffricciones de integridad referencial proporcionadas por claves forneas y claves pintaras. Incluso los disparadores pueden ser utilizados para proporcionar formas npliadas de integridad referencial no ofecidas por el estndar SQL ANS1/1SO. La principal ventaja de los disparadores es que las reglas comerciales (Hieden almacenarse en las bases de datos y ser forzadas consistentemente con cada ..la.di/aein de la base de datos. Esto puede reducir sustancialmente la . nplcjidad de los programas de aplicacin que acceden a la base de datos. Los " paradores tienen tambin algunas desventajas, siendo las ms importantes las ""lenles: : ""i'lcjidad de la base de dalos: cuando las reglas se trasladan al interior de la r > .f de datos, preparar la base de datos pasa a ser una tarca ms compleja. Los -MMos que razonablemente podan esperar crear pequeas aplicaciones propias "is SQL. encontrarn que la lgica de programacin de los disparadores hace la -' -." i mucho ms difcil.

'"'" > ocultas: con las reglas ocultas dentro de la base de datos, programas que Jr<-'cen efectuar sencillas actualizaciones de la base de datos pueden, de hecho,

4.3.3 Indices

base de datos es, conceptuataeT ^ ?T & ^ cualquier libro de texto De la mi, ?

M!

Un ,ndlcc encontrado al fin!?*

ndice para determinar' en n pagma?" ^ ^ dC U" 1bro -tema de base de datos IcerHn S paTa dT^ T seleccionados por una consulta SO ^terminar las posiciones de rcSi h

La Figura 4.3 muestra m^SSSSStT T"? "" dc J de a tabla CURSO definida en ^ ,BRE> basado en la columna CNOMRBt J diferencia de la tabla CURSO " anterr- 0bs os que dS2*|

^ ind.ee es Peqet^^S ^ Tf*^ orden" Jj*' probablemente, ms fcil que e sistema busaTe "r '* ^ Pw J ^ I con un valor CNOMBRE dado T1 J '"d,Ce para localizar reg !^ Por ejemplo, el ndice XCSB^S^I^ ^ C b-a ^e ese j; la siguiente sentencia SELECT: y Utli al sistcma cua"do ejecute l abia CURSO CAY/j CNOMBRE 022 i. ESFRUCTM S DA TOS 744 ^OMUNISAIO " ^SrEWCIAIJSAO CIRCUITOS DIGITALES \ ndice XCNOMBRE

^?C?. ORDENADORES ESTRUCTURAS DATOS l bUTEMT. DISCRETAS

i EAIPIRSY/ j ENISTXCIAUSMO \ | /7UNX4MENTAUSAIO j [___ ![ED(}\<SUO

!< !a()\AU:;xi()'' BASES DErDATOS7REL J^(^^T7Cmf(~ SOLIPSFSM \ | A. un ndice se 1c asigna un nombre de acuerdo con las mismas reglas que aplican para los nombres de tablas. El nombre debe comenzar con una letra que !l <dc ir sceuida de una o ms letras, dgitos o caracteres de subrayado. Su longitud * m-de exceder de un determinado nmero de caracteres. Suele seguirse una invencin comn de elegir "X" como la primera letra seguida del nombre de * duinna para formar el nombre del ndice. Sin embargo, esta convencin no es indispensable para el sistema. Para crear un ndice suele utilizarse la sentencia SQL 5 Kl Vf L INDEX, tal y como veremos a la hora de analizar la sintaxis SQL. Hn el ejemplo de la Figura 4.3, la tabla CURSO ya tiene registros almacenados en ella cuando se crea el ndice. El sistema explorar esta tabla para ohiener los valores CNOMBRE y las posiciones de los registros correspondientes MU construir el ndice En la prctica, es mejor asignar la sentencia CREATE INDt X antes de que se inserte ningn registro en la tabla. Sin embargo, como ilustra el ejemplo, puede crearse un ndice para una tabla que ya contenga registros. Una vez que se ha creado el ndice, el sistema lo mantendr automticamente Pnr ejemplo, si asignamos una sentencia 1NSERT para colocar un nuevo registro en la ub!,t CURSO, el sistema determinar automticamente el valor CNOMBRE y la H'sicn del nuevo registro, y colocar una nueva entrada en el ndice XCNOMBRE. ! dnis palabras, una vez que se crea el ndice, el sistema hace el resto. Al igual que a sentencia CREATE TABLA, CREATE INDEX producir .vtii.ilizacin del catlogo del sistema. En este caso, el sistema registrar la presencia de un nuevo ndice (XCNOMBRE) y su dependencia de la tabla CURSO.

No se produce ningn cambio en la codificacin de una sentencia de eleccin de registros (SELECT) de una tabla, debido a la presencia o ausencia de !" ndice. La sintaxis de todas las sentencias SELECT permanece igual. Por lo aiio. la mayora de los usuarios del sistema puede

que no perciban la existencia de !,n!iees de base de datos. Siempre que una sentencia SELECT sea introducida por "'iiano el sistema usa un mdulo interno especial llamado optimizados el cual "i.ih/a la sentencia para determinar si el uso de un ndice sera beneficioso. Si este 7 '"' c;,S0, c' s'stcma consultar el catalogo para determinar si se encuentra ^punible un ndice Si lo est, el sistema utilizar c! ndice. En caso contrario, el ' 'na realiza una operacin de exploracin en busca de los registros deseados.

uso de un optimizador para determinar el camino de acceso ms eficaz,

"i lea que el sistema posee la importante caracterstica de la independencia fsica de c,.''l0S' adminisrador dc la base de datos puede modificar las estructuras internas . ^ 4l"s sin producir cambios en los programas de aplicaciones escritos anteriormente _ ""creto, los ndices pueden ser creados y asignados sin que afecten a la validez de AS senloncias ya existentes o de futuras sentencias SELECT'.

Cules son las ventajas de los ndices? El sistema puede usar un ndice para aumentar la eficacia en divo circunstancias. Algunas de estas circunstancias se describen a continuacin % Acceso directo a un registro especificado: Suponiendo que un ndice se def sobre la columna apropiada, el sistema puede evitar la exploracin para loc? los registros identificados por una clusula WHERE. m Ordenacin: Observar que la Figura 4.3 muestra valores CNOMBRF en ,. alfabtico (realmente EBCDIC). El sistema puede usar este ndice para rccurZ rcg,stros de la tabla CURSO en secuencia CNOMBRE. En ausencia de fadS sistema debe iniciar una rutina de ordenacin interna que puede ser costa I 1 f 1

especialmente para un gran nmero de registros. Las versiones actuales de St f consideraran el uso de un ndice, siempre que la sentencia SELECT conten GROUP BY0 'UNION 108 Palabr3S C'aVC cIusulas: ORDER BY, DISTINC? i t Operacin join: La operacin join se presentar en un captulo posterior Fn este momento, simplemente, afirmamos que la operacin join puede ser difcil de ejecutar y que los ndices pueden reducir el coste de este proceso. No hay lmite en el nmero de ndices que se pueden crear para una tabla dada. Sin embargo, existe un coste asociado con cada ndice que puede contrarrestar sus ventajas. f

Cules son las desventajas de los ndices?

Existen dos factores de coste asociados con los ndices de base de datos que prohiben su uso ilimitado. Estos son:

Espacio de disco usado por el ndice: Un ndice, aunque sea ms pequeo queb tabla, puede ocupar una cantidad de espacio de almacenamiento considerable ene) disco. Una tabla con muchos registros significa que el ndice tendr mucha, entradas. Si la tabla tiene muchos ndices, el espacio total del disco usado por todos los ndices podra exceder el tamao de la tabla en s misma. Costes de actualizacin: Mientras los ndices facilitan el proceso de obtencin ck registros, dificultan el proceso de actualizacin. Siempre que un nuevo registrse inserte o se borre de una tabla, el sistema debe hacer el correspondiente cambio* los ndices. Si, por ejemplo, una tabla tiene cinco ndices, entonces una operacin .-n o de borrado obliga a una actualizacin de los cinco ndices, listo . o>ctar de una forma importante al tiempo de respuesta.

i sar el sistema siempre el ndice? Fl optimizador puede decidir no usar un ndice, incluso si se ha definido en nthima apropiada. Esto puede ocurrir en varios casos. Algunos de estos son: wbla es muy pequea: Debido a que se emplea mucho tiempo en leer el I ce, el optimizador puede decidir que es ms rpido, simplemente, explorar toda ndice, el ( U labia. I I Indice no es lo suficientemente selectivo: El opmizador podra estimar que vm a ser seleccionados tantos registros y que es ms eficaz realizar una operacin cKp|oracin para encontrar los registros deseados. No hay forma de indicarle al sistema que use explicitamente un ndice La decisin de usar un ndice para acceder a los datos la toma el opmizador. (Sin embargo, es posible modificar parte de la informacin del catlogo para influir en ,. opmizador para que especifique un camino de acceso que use un ndice. Esto HHII.I realizarlo el administrador de la base de datos o un programador de .spheaeiones que este usando el SQL embebido en un programa que se ejecutar muchas veces).

ndices compuestos, ndices nicos e ndices agrupados La sentencia CREATE INDEX ofrece otras ventajas, adems de las e.oecificadas anteriormente. Incluyendo palabras clave esenciales en la sentencia i;jie se describirn en el captulo correspondiente) puede crearse cualquiera de los '('<<; especiales de ndices siguientes: ndice compuesto: Un ndice puede crearse sobre varios nombres de columna. Un ' .' 'po simple de tal ndice es un ndice nombre-direccin (por ejemplo, 1 >MBRE-f'ADDR) para una tabla que contenga una columna para nombre del : nbro del personal docente y otra para la direccin. Observemos que un ndice '>n.puesto es, nicamente, un ndice simple en el que la clave se compone de datos i'-e >c encuentran en varias columnas. Destaquemos tambin que el orden de los "Ponentes del ndice es significativo. Por ejemplo, un ndice nombre-direccin ;^Xo\lBRHFADDR) es diferente de un ndice direccin-nombre (FADI)R-N( |MBRE). Las actuales versiones SQL permiten la especificacin de hasta 16 mininas para un ndice compuesto.

l~> RA-MA 118 ORAl'l.H IJg.CUKSOI'KACIH c)

ndice nico: Un ndice nico es un ndice que no puede contener valores duplicados. La presencia de un ndice nico hace que el sistema rechace cualquier actualizacin de la tabla que produzca valores duplicados en la(s) columna(s) cspecificada(s) por el ndice. Un ndice nico debe ser creado para la(s) columna(s) de clave primaria. Aunque solo se pueda especificar una clave primaria para una tabla, s es posible especificar un nmero indeterminado de ndices nicos para una tabla. Por ejemplo, si deseramos que el sistema reforzara la unicidad de los valores CNOMBRE, podramos incluir la palabra clave "UNIQUE" en la sentencia CREATE INDEX relativa a la Figura 4.3. ndice agrupado: Puede disearse un ndice por tabla como ndice agrupado. Cuando se ejecuta la utilidad de carga o de reorganizacin, el sistema almacenar los registros de la tabla en el orden fsico, de acuerdo con la clave del ndice agrupado. Para ciertas consultas, el optimizador puede capitalizar el conocimiento de los registros almacenados en una determinada secuencia. No existe an una secuencia en la que el sistema confe. (Aunque las inserciones en la tabla pueden hacer que los registros ignoren la secuencia, el optimizador puede, aun en este caso, encontrar el camino de acceso para satisfacer cualquier consulta). Estos tres tipos de ndices no se excluyen mutuamente, siendo posible que un nico ndice tenga todas las caractersticas anteriores. 4.3.4 Un ejemplo de diseo de una base de datos relacional

A modo de ejemplo se va a presentar el diseo de una base de datos en un contexto educativo cuyas tablas se refieren a los cursos que van a ser impartidos en distintas clases de un centro educativo por varios profesores pertenecientes a diversos departamentos y en los que se matricularn distintos estudiantes. En el centro educativo tambin existe personal no docente.

Es lgico considerar como tablas de la base de datos CURSO, DEPARTAMENTO, CLASE, ESTUDIANTE, MATRCULA, CLAUSTRO y PERSONAL. En los prrafos siguientes se van a definir las caractersticas de estas tablas y el diseo de la base de datos. En primer lugar consideramos la tabla de nombre CURSO, que va a definir las caractersticas de los cursos que van a ser impartidos. Los nombres de los campos y los tipos de datos se especifican a continuacin: Directamente relacionada con la tabla CURSO, vamos a considerar la tabla DEPARTAMENTO, que tiene un registro por cada departamento acadmico al que Pertenecen los profesores que imparten cursos. Sus campos van a ser el nombre Klentificativo de cada departamento, el edilicio al que pertenecen, el numero c despacho en que estn ubicados y el nmero de identificacin en el cuerpo docente del director del departamento. Los nombres de los campos, los tipos de datos y el contenido de la tabla se especifican a continuacin:

DEPT THEO CIS D.G. PHIL nW ,

~DEAJ1F 200 se se HU 300 100 100

DDESPACHO 10 80 _ 60

DCHFNO

7 ,qUC CamP DEPT t0ma Valores distintos Para todas las filas y m

debe e reS f AdCmS' SCgn 13 P0ltCa del centro educat-C cada cL! debe estar organizado por un departamento acadmico, lo que nos indica gu STASO61 Camp DEPT como c,ave primL de ^

CDFPT S i ,T, Siroco egndad * h baSe de dat0S' especificamos el campo DEPIRT MPTOCOM CLAVE SECUNDARIA ^UE REFCRENCIE ]A TABL* V*"

DEPARTAMENTO (se restringen los valores CDEPT de la tabla CURSO a rTfw qrnocoCUentran e" ^ Clumna DEPT de la tabla DEPARTAMENTO). DEP^TAM^TO68 tabla dependente tabIa hii de 'a tabla padre Adicionalmente consideramos la tabla CLASE, que tiene un registro para cada clase que ofrezca un curso. Los campos que contiene son: nmero de curso, numero de seccin, nmero de identificacin en el grupo de docentes del profesor, da y hora, edificio y sala en la que se encuentra la clase. Los nombres de ktf campos, los tipos de datos y el contenido de la tabla se especifican a continuacin:

Nombre CNO SEC

Tipo de dalo

v Longitud

Contenido

Carcter Carcter

3 (jijo) Nmero de curso 2 {.fijo) Nmero de seccin 2 (fijo) Nmero de profesor

C1NSTRENO CDIA

Carcter

Carcter

2 (fijo) Da de la semana U(fijo) Hora de la clase 2 (fijo) Edificio de la clase Sala ce la clase

CHORA Carcter CEDIF Carcter CDESPACHO

Entero 3

En esta tabla consideramos el par de campos (CNO, SEC) como clave rimara^ Adems, sabemos que debido a la poltica del centro educativo a cada ETcorresponde algn curso, por lo que cada valor del campo CNC.de * (1 ASE debe coincidir con algn valor CNO existente en la tabla CURSO De este ferma CNO en la tabla CLASE es clave secundaria que referencia CURSO con lo 4UC CURSO es tabla padre de CLASE, adems de depender (ser tabla hijo) de Di PART AMENTO. Puesto que CLASE es dependiente de CURSO, que por su Frte es dependiente de DEPARTAMENTO, decimos que CLASE es tabla descendente de DEPARTAMENTO. Las relaciones existentes entre las tres tablas que llevamos definidas en nuestra base de datos suelen representarse como se indica en la Figura 4.4.

DEPT

DEDIF DDESPACHO DCHFNO Padre de CURSO

CNO

CNOMBRE 3DESCP CRED CTARIFA CDEPT 1 Dependiente de DEPARTAMENTO y padre de CLASE

CNO

SEC CINSTRFNO CDIA CHORA CEDIF CDESP

Figura 4.4 A continuacin, consideramos las tablas MATRCULA (relativa a los nos recogidos cuando un estudiante se matricula en un curso) y ESTUDIANTE l!ene un registro para cada estudiante matriculado en el centro educativo). Los -"nipos que^contiene la tabla MATRCULA son: nmero de curso, nmero de -eecion. nmero de estudiante, fecha y hora de matriculacin del estudiante.

ORACI .Ii II. CURSO 1'RmCO

Nombre Tipo de datos Longitud Contenido CYVC 5C Caracte H fijo) Nmero de curso Carctei 2 (fijo) Nmero de seccin (fijo) Nmero de estudiante Date Time Fecha de matriculacin Hora de matriculacin

7VO Crdete) _MAT HORA _ MAT

~CO~ SEC CU cu en cu P33 P33 Til TU TU 01 01 02 02 01 01 01 01 01

SNO 325 800 100 150 100 800 100 150 800

FECHA MA 7 1987-01-04 1987-12-15 1987-12-17 1987-12-17 1987-12-23 1987-12-23 1987-12-23 1987-12-15 1987-12-15

HORA MAT 09.41.30 11.49.00 09.32.00 09.32.30 11.30.00 11.23.00 11.21.00 11.35.30 14.00.00

La clave primaria de la tabla MATRCULA es una composicin de tres tunmas (CNO, SEC, SNO). Para asegurar la integridad referencial, jipccincaramos dos claves secundarias en esta tabla. La clave secundaria puesta (CNO, SEC) referenciara la tabla ESTUDIANTE. De esta forma, MATRCULA es dependiente de dos tablas: CLASE y ESTUDIANTE. Supongamos, tambin, que todos los estudiantes deben especializarse en una asignatura correspondiente a algn departamento acadmico existente. Esto Minifica que la sentencia CREATE TABLE para ESTUDIANTE, especificara SESP (especialidad del estudiante) como clave secundaria que referencia la tabla DEPARTAMENTO. Por lo tanto, DEPARTAMENTO es padre de otras dos tablas, CURSO y ESTUDIANTE. La clave primaria para la tabla ESTUDIANTE es el campo SNO (nmero de estudiante). La Figura 4.5 refleja esta nueva visin expandida del diveo de nuestra base de datos.

DEPART. | DEPT 1

CNO

CD

EPT

Nombre Tipo de datos Longitud SNO Carcter Contenido

3(fijo) Nmero de estudiante 30 (variable) Nombre de estudiante

SNOMBRE

Carcter

SDOMI Carcter STLFNO Carcter S FN AC IM SIQ

15 (variable )

Domicilio

12 (fijo) Telfono 6(fijo) Fecha nacimiento Nmero id. centro Xfijo) Nmero id. departamen lo

Carcter

Smallint Carcter

SAD VFN O SESP

Carcter

Mfijo) Nombre id. departamen lo

LASE

CNO

SEC _j

ESTUD.

SESP

'I nUMA.i, 111;. U KSolVAl T,< o

Consideremos ahora la tabla Cl Al IS'i'Rn m > c, . miembro de. enerpo doeente de. centro^^ y cuyos campos son: nmero de identificacin de todos losTSres ^ direccin, fecha de contratacin, nmero de ayudantes o suborr dependen de l, sucldo e identificacin de. dcSZS, al l^^08 9* ^mrm^T 108 campos'ios tipos CLAUS1KO se especifican a continuacin: a ta^

Nombre FNO

Tipo de datos Longitud

Contenido ~~

Carcter

3 (fijo) Nmero de profesor 15 (fijo) Nombre de profesor Domicilio de profesor

FN O MB RE

Carcter

FDOMl Carcter FFCANTI FNUMDEP FSUELDO FDEP Date

20 (variable)

Fecha contratacin Nmero de ayudantes (7,2) Sueldo

Smallint Decimal

Carcter

4C/?o) Nombre id. departamento 1

FNO 06 \j

FNOMBRE KATUY PEPE

FDOMI FFECANTI CALLE DE LAPIEDU 1

FNUMDP 1979-01

ESUFI no -15 2

h'ICi*) * <t cy / J 41 j

35.000.00 10 08 85 60 65 so

l l'Ut / l'Hit -01 1 -09 -05 1 -06 3 45.000.00 2 7 TI IR

JESSIE MARTIN DR. DEL ESTE, 4 1969-09 JOSE COHN ( 'IS AL HARTLEY CS APTDO.CORREOS\m CALLE DE LA PIATA

1979-07 1979-09 -01

35.000.00 45,000.00 pilli

JULIA MARTIN DR. ESTE, 4 LISA BOBAK TITO

1969-09

45.000.00

CAMINO DE LA RISA, 771981-09 -16

36.000.00 35.000.00 ( TS

BARS Hl.AVATY Jj'}LLE DEL 489 1982-01 fV3

secundJii r t

Primana dc la labla ^AUSTRO. Las clave

tZn^J "r dCh?ldaS dC frma qUC Se cstabIc-a na relacin ciclici Supongamos que es norma de la escuela que a cada miembro del persona! docenti t-mh f f TnQTundcpartamcnto acadmico. Entonces, la columna EDEPT, en h DFPARTAiMPMTr^' esPec'^'t;ar'a no clave secundaria, reirenciando LPARAMEN70 (DEPARTAMENTO es la tabla padre y CLAUSTRO la tabi dependiente) Supongamos, tambin, que cl director de cada departamento o

DFPA R1rAMpIJTrn3' d0CCntC- EntOI1CCS' Cl valOT DCHFNO, en la tabi, r ! ' SC csPecifca como clave secundaria que referen^ CLAUSTRO. (Aqu, CLAUSTRO es la labla padre y DEPARTAMENTO es U tabla dependiente). La Figura 4.6 muestra esta relacin cclica o ciclo FDEPT FNO

APARTAMENTO

t i AUSTRO Figura 4.6 A veces, un ciclo incluye ms de dos tablas. La TABLA 1 podra ser padre de j() TABLA2, que es padre de la TABLA3, la cual es, a su vez, padre de la TABLA4, vendo sta padre dc la TABLA!. En general, se forma un ciclo si una tabla dependiente o descendente de cualquier tabla se convierte en padre de esa tabla. Es posible tambin que una tabla sea padre y dependiente de s misma, dando lugar a un ciclo recursivo. En otras palabras, la tabla contiene una clave secundaria .me se referencia a s misma. Por ejemplo, supongamos que algunos cursos exigen, al menos haber realizado otro curso, que es requisito indispensable (es decir, los alumnos estn obligados a realizarlo) para matricularse en una clase del curso. Podramos indicar cl curso que se exige como requisito para la matriculacin en la tabla CURSO, modificando esta tabla para incluir una nueva columna, PCNO, que contenga el iiineru de curso del curso que se pidi como prerrequisito a la matriculacin. En ese t.o, |,i orden CREATE TABLE para el curso contendra una clusula adicional dc clave secundaria, especificando PCNO como clave secundaria que referencia CURSO. I .le eielo de aulorefcrcncia se llama, a veces, relacin recursiva. El tipo de datos y la extensin dc cada componente dc una clave secundaria del*.- ser la misma que la clave primaria. Pero una clave secundaria, a diferencia dc la nmuna, puede contener valores nulos (es decir, no es necesario especificar NOT '*' I L para una columna que sea clave secundaria). Por ejemplo, existen muchos '- > introductorios que no necesitan un curso como requisito previo. Los registros dc :'-e<. HUSOS podran tener un valor nulo en la columna PCNO. Otro ejemplo es la |i,,l,"ta SESP en la tabla ESTUDIANTE. Si suponemos que algunos estudiantes no

' ' 'i cine declarar la especialidad, entonces los valores correspondientes de SESP ' *'n"in scr "nlos. Observemos, adems, que si cualquier parte dc una clave secundaria -<puCsta es nula, entonces toda la clave secundaria se considera como nula. En la base dc dalos existe una ltima tabla de nombre PERSONAL que tiene USIH) Para cada empleado que no pertenezca al cuerpo docente de la escuela -j'--.itana o facultad. Sus campos son: nombre, ttulo, sueldo c identificacin del wftamento del que dependa. Estos campos no tienen relacin con ninguna otra labla.

DRACI.K ll^ nmsu eKA( ll( ,:

no . HASiis DI: DA n >s RI-LACK >NAI.I S. DI.SI.NO Y M IKM.M I/ACH V

PERSONA! 's!!-^8-? CamPS' iS P0S dc datOS y cl *>**> de u , / ERSONAL se especifican a cont.nuacin (ENOMBRE es la elavc primaria) Nombre ENOMBRE CARGO ESUELDO DEPT DEPART. DEPT CURSO CNO COEPT SNO SADVFNO SI-SI'

MATRCULA PERSONAL podcmos^alSt^8 ^ rC,aCnCS C"trC las tabla* d* h base de dato, podemos realizar ya un diagrama completo que refleje su diseo final (Figura 4.7,. Hasta ahora, solo hemos considerado el aspecto estructural de la integridad rejcrencial. Destacaremos, ahora, algunas de las reglas de procesamiento que -fican la respuesta del sistema a la sentencia de manipulacin de datos de! $Q| la cual referencia valores de clave primaria y/o secundaria. Estas sentencias INSER UPDATE y DELETE) se describirn en captulos posteriores, j^lcionalmente tendremos en cuenta para la integridad referencial lo siguiente:

Insercin de la clave primaria: El sistema verificar que el valor de la clave rimaria es nico. Si no lo es, la insercin ser rechazada. Jwrcin de la clave secundaria: El sistema verificar que cualquier clave HVundaria tenga el mismo valor que alguna clave primaria existente en la tabla nTetdiciada. Si esto no se cumple, la insercin ser rechazada. Actualizacin de la clave primaria: El sistema rechazar la actualizacin, si ,-Msle un registro dependiente que referencie la clave primaria. Utual/acin de la clave secundaria: El sistema verificar que el nuevo valor de U elavc secundaria coincida con alguna clave primaria existente en la tabla teli-rcncada. Si esto no ocurre, la actualizacin ser rechazada. (turrado de la clave primaria: Se puede dirigir la respuesta del sistema a la -eliminacin de un registro que tenga una clave primaria igual a alguna clave M-eundaria correspondiente. Las opciones disponibles son: rechazar cualquier "fvnicin de borrado (RESTRICT), sustituir automticamente los valores nulos por valores correspondientes de la clave secundaria (SET NULE) y borrar 'limitneamente cualquier registro dependiente que tenga una clave secundaria m a la primaria (CASCADE). Nafrado de una clave secundaria: No existen restricciones (a menos que la clave lindara sea parte de la primaria en la que se apliquen otras restricciones). El diseador de la base de datos debe prestar una cuidadosa atencin a ' <- redas de procesamiento. Existen restricciones c implicaciones adicionales " t fts labias descendentes, especialmente aquellas afectadas por relaciones ' 'j **,v ' dlsco completo de las relaciones existentes entre las tablas (Figura 4.7) ""' rcslr'cciones de integridad son el corazn de una base de datos. ^NORMALIZACIN l as ^daciones entre los pases o entre departamentos de una compaa, o ,^ "'sllanos y diseadores son el resultado de circunstancias histricas M ares, que pueden definir las actuales relaciones aun cuando las

( i :s okAiri: i !J;. ri.Kso 'KAI IK (i t}R

circunstancias iniciales hayan pasado ya. Los electos producidos son, a mernjrf, unas relaciones anormales, o en un lenguaje ms asequible, disfuncionales i. historia y las circunstancias tienen a menudo los mismos efectos sobre los datc^ cmo son recogidos, organizados y presentados. Por esto, los datos tambin pue< llegar a ser anormales y disfuneionales.

La normalizacin es un proceso que pone las cosas en su sitio, hacindola normales. El origen de esta palabra viene del latn norma, que era una "escuadra^ carpintero" para conseguir el ngulo correcto. En geometra, cuando una lnea csij en ngulo recto con otra se dice que estn en un ngulo "normal". En una base 4-datos, el trmino tambin tiene un significado matemtico especfico, realizando una separacin de elementos de datos (tales como nombres, direcciones u oficios) en grupos afines y definiendo las relaciones normales o "correctas" entre ellos. Los conceptos bsicos de normalizacin se introducen aqu para que los usuarios puedan contribuir a disear una aplicacin que van a usar posteriormente, o para comprender una aplicacin que ya ha sido construida. La normalizacin es una tcnica eficaz para el diseo de bases de datos que puede aplicarse tanto a sistemas relacinales como a otros modelos. Con la tecnia de la normalizacin se trata de evitar la dependencia entre insercin, actualizaciones y borrado de elementos de las tablas de la base de datos. Tambin se reducen las operaciones de reorganizacin cuando hay que incorporar nuevos datos. La normalizacin tiene tres etapas que transforman las relaciones tu normales en normalizadas y que se denominan primera, segunda y ercers formas normales. 4.4.1 Primera forma normal El primer paso en la normalizacin es poner los datos en la primera lriiw normal. Esto se hace situando los datos en tablas separadas, de manera que Iu> datos de cada tabla sean de un tipo similar, y dando a cada tabla una clave primara y un identificador o etiqueta nica. Esto elimina los grupos repetidos de datos. Supongamos que, inicialmcntc, tenemos toda la informacin a incluir*-"' una base de datos en una sola tabla de nombre EMPLEADO cuyos campos puede" ser Nombre, Edad, Alojamiento, Responsable, Direccin, OficioI, Oficio- i Oficio3 (figura 4.8).

EMPLEADOS \ Nombre Edad Alojamiento Responsable Direccin OficioX Oficio! Oficio3

Figura 4.8

disponemos de tres posibilidades. Hn ,gar dc fijar el nmero. fi^^J^SZ phncn. tabla, cada oficio del trabajador se ^ De csta fonna se

onCH, con una fila por nombre, ^J'^^T^ la tabla EMPLEADO ,iimina |a necesidad de un nmero variable de o c^ ^ y esta solucion im)posible dc cualquier manera en una base de dato ADa ,,,nPre es mejor que limitar el nmero de oficios en la tabla EM1 LbA Sltu,cnte que se debe hacer es definir ^^ u.4a: aqucllaquc identificar de manera ^j^^^ ^^ una fila dc informacin. Por motivos dc simplicidad, W ^ ^ , clave J, los trabajadores son nicos, as que el nombre del traba,idor^se . ,M rym cAfl Puesto que cada trabajador puede tener va! aunara de la tabla EMPLEADO, i uesio que primaria til,s en la nueva tabla OFICIO, el nombre y el oficio sern a cu p npleta de la tabla OFICIO (las dos partes combinadas hacen presentan las dos nuevas tablas producto de a normalizacin !-it>la EMPLEADO inicial a primera forma normal. Tabla EMPLEADO Tab^-OFjT^ Nombre Oficio tota l). E, I ,,4, 4.9 se

4.4.2 Segunda oriua normal El segundo paso, que es la segunda forma normal, se centra en aislar } 1 datos que solo dependen de una parte de la clave. Para obtener la segunda f >* normal se deben sacar Oficio y Descripcin a una tercera tabla. La clave priru** de la tercera tabla es Oficio y su larga descripcin aparece solo una vezfc echamos un vistazo a la tabla OFICIO de la primera forma normal"L f * I

descripciones detalladas se repiten para cada trabajador que tenga ese "ofickf Adems, cuando el ltimo trabajador con conocimientos de herrero se marcha &\ ciudad, la descripcin del oficio de herrero se desvanece. f

Con la segunda forma normal, tanto "oficio" como su descripcin S permanecen en la base de datos, aunque en esc momento no haya ningn trabajad* i con esos oficios. Los "oficios" se pueden aadir incluso antes de que haya m ! trabajador con esos oficios. Por lo tanto normalizamos en segunda forma nonn*! I desdoblando la tabla OFICIO de la primera forma normal en otras dos tablas ' nombres OFICIO-EMPLEADO (con los campos Oficio y Calificacin) y OFICIO (con los campos Oficio y Descripcin). Vase la Figura 4.10.

Es obligado para que las tablas estn en segunda forma nonna! qw tambin lo estn previamente en primera forma norma!.

EMPLEADO Nombre Edad

OFICIO-EMPLEADO OFICIO Nombre Oficio

Oficio Descripcin Calificacin

Alojamiento Responsable Direccin Figura 4.10

4.4.3 Tercera forma normal El tercer paso, la tercera forma normal, implica deshacerse de cualq'11" elemento de las tablas que no dependa nicamente de la clave primaria. informacin de los trabajadores sobre el alojamiento depende de dnde e-.t-. viviendo (si se trasladan habr que actualizar la fila con el nuevo nombre < alojamiento en cl que vive), pero el patrn de la posada y su direccin >* independientes de si el trabajador vive ah o no. Por eso, la informacin * alojamiento se lleva a una tabla separada de nombre VIVIENDA > P* conveniencia, se usa una versin taquigrfica del nombre de la casa de alojanUt!-' como clave primaria, y el nombre total se guarda en el campo NomhreComp!ct<>, Faura 4.11 muestra las tablas en la tercera forma normal, y la Figura Lati: grficamente las relaciones que existen entre las tablas. OFPCIO Oficio Descripcin OTiaa-fMPJJiArzO Nombre Oficio

Calificacin i M1>1.HAD" S'ambre Jad \iojamienlo vez eme los datos estn en tercera forma normal, estn ya de manera la orimera y la segunda forma normal. Por tanto, el proceso total se citica en la primera y M YJYiENDA Alojamiento NombreCompleto Responsable Direccin Figura 4.11 vez normalizada la base de datos, presentamos el esquema de su (figura 4.12), en el que se observan las relaciones existentes. . Arx ^^sm^nte la tercera forma

Tabla VIVIENDA Alojamiento Nombre Oficio Nombre completo 1 Responsable Direccin ( 'alilieacin ubla OFICIO ,,tTi OI ICIO-EMPLEADO Clave externa de la tabla ALOJAMIENTO j Oficio Descripcin Figura 4.12 1 os campos clave primaria aparecen sombreados en las tablas.

CLIENTES, que contiene una fila por cada uno de /os clientes de la empresa campos son NUM CEIE (nmero de cliente), EMPRESA, REI CLlENTEmt de empleado del representante que atiende al cliente) y UM CREDITO (lmi crdito), REP\ ESTAS, que contiene una fila por cada uno de los diez vendedores &'& empresa. Sus campos wn \( M EMPL (nmero de empleado), NOMBRE, EDM OFICINA REP (nmero de oficina de representacin del vendedor), TTWm I CONTRATO, DIRECTOR, CUOTA (ventas' previstas) y VENTAS <vet^ l realizadas). | ' " ;':'4|

| * OFICINAS, que contiene una fila por cada una de las cinco oficinas en las*m I trabajan los vendedores. Sus campos son OFICINA (nmero de. ofi(jM j CIUDAD, REGION, DIR (nmero de empleado del director), OBJETIVO (vnM \ anuales previstas) y VENTAS (ventas anuales realizadas). \ ' pfODUCOS. que contiene una fila por cada tipo de producto disponible para la venta. Sus campos son ID FAB (identificador de fabricante, ID PRODUCTO (identificador de producto), DESCRIPCIN PRECIO l EXISTENCIA. . "1 | " PEDIDOS, que contiene una fila por cada pedido ordenado por un cliente. Por ] I simplicidad, se supone que cada pedido se refiere a un solo producto. Sus campos san | NUM PEDDO (nmero de pedido), FECHA PEDIDO (fecha del pedido), CUE (numero de cliente), REP (nmero de empleado del representante), FAB (identijkadoi \ de fabricante), PRODUCTO (identificador de pioducto), CANT (cantidad) f j IMPORTE. ,

j Realizar un diseo apropiado para las cinco tablas y las relaciones padre/hijo entr i las columnas que contienen. Introducir los datos de las cinco tablas de esta base 'k \ ijfajfrgjggf^^ diseo que soluciona el problema. 1

En una base de datos relaciona! bien diseada cada tabla tiene una columna < combinacin de columnas cuyos valores identifican unvocamente cada fila en la tabla. Esta columna (o columnas) se denomina clave primaria de la tabla. Miremos en primer lugar la tabla OFICINAS. A primera vista, tanto la columna OFICINA como la columna CIUDAD podran servir como clave primaria para la tabla, pero si la empresa se ampla y abre dos oficinas de ventas en la misma ciudad, la columna CIUDAD ya no podra servir como clave primaria. En la prctica, "numoros de ID", tales como el nmero de oficina (OFICINA en la tabla ^ ^ C \l>l 11 '| t M. 1 \S1S IH.IUI IS Rl I \t H IN.VI i S. i SI M i V \! !/., o CN . I ;:

ICINAS), el nmero de empleado (NUM EMP cn la tabla REPVENTAS) y los oros de clientes (NUM CEIE cn la tabla CLIEN TES) se eligen con frecuencia ""'"i claves primarias. En el caso de la tabla PEDIDOS no hay eleccin, ya que lo SnK, me identifica unvocamente un pedido es el nmero de pedido ruco M11^ (\[]\\ PEDIDO). La tabla PRODUCTOS es un ejemplo de una tabla donde la clave primaria '-he ser una combinacin de columnas. La columna ID_FAB identifica al Dbrieante de cada producto cn la tabla y la columna ID PRODUCT especifica c! mmiero de producto del fabricante. La columna ID PRODUCT podra ser una buena clave primaria, pero no hay nada que impida que dos fabricantes diferentes utilicen el mismo nmero para sus productos. Por tanto, debe utilizarse una ^nibinacion de las columnas ID FAB e ID PRODUCT como clave primaria de la laida PRODUCTOS. Cada producto de la tabla se garantiza que tiene una combinacin nica de valores en estas dos columnas. En cuanto a las claves secundarias, tendremos en cuenta que una columna de una labia cuyo valor coincide con la clave primaria de alguna otra tabla se denomina secundaria, externa o fornea. En nuestra base de datos, la columna MICINA REP es una clave fornea para la tabla OFICINAS. Aunque es una columna en la tabla REPVENTAS, los valores que esta columna contiene son nmeros de oficina. Coinciden con valores en la columna OFICINA, que es la clave rumana para la tabla OFICINAS. Juntas, una clave primaria y una clave fornea reaii una relacin padre/hijo entre las tablas que las contienen, del mismo modo que Lis relaciones padre/hijo de una base de datos jerrquica. Por la misma razn, la o.lumna DIR de la tabla OFICINAS es una clave fornea para la tabla Kl PVENTAS, ya que los valores que esta columna contiene son nmeros de empicado que coinciden con valores de la columna NUM EMPL que es clave primaria en la tabla REPVENTAS. En idntica situacin est la columna REP CEIE de la labia CLIENTES, que tambin es una clave fornea para la tabla ><1 PVENTAS, ya que los valores que esta columna contiene son nmeros do empleado que coinciden con valores de la columna NUM EMPL que es clave p'imaria en la tabla REPVENTAS. Incluso la columna DIRECTOR de la tabla e'EPVENTAS puede considerarse como una clave fornea de la propia tabla RfPVENTAS, ya que los valores que esta columna contiene son nmeros de ' '"picado que coinciden con valores de la columna NUM EMPL que es clave primaria cn la tabla REPVENTAS. Lo mismo que una combinacin de columnas puede servir como clave primaria de una tabla, una clave fornea puede ser tambin una combinacin de "'''minas. De hecho, la clave fornea ser siempre una clave compuesta """ 'Iticolumna) cuando referencia a una tabla con una clave primaria compuesta.

134 OKACI.K 1 lu. CURSO l'KAC I ICO

rRA-MA

Obviamente el nmero de columnas y los tipos de datos de las columnas ertjg clave fornea y en la clave primaria deben ser idnticos unos a otros.

Una tabla puede contener ms de una clave fornea si est relacionada c% ms de una tabla adicional. En nuestra base de datos podemos definir tres clav forneas en la tabla PEDIDOS. Seran las siguientes: La columna CLIE es una clave fornea para la tabla CLIENTES, que relacin cada pedido con el cliente que lo remiti. La columna REP es una clave fornea para la tabla REPVENTAS qu relaciona cada pedido con el vendedor que lo tom.

Las columnas FAB y PRODUCTO juntas son una clave fornea compuesta para la tabla PRODUCTOS, que relaciona cada pedido con el producto solicitado. PRODUCTOS REPVENTAS ID_FAB E) PRODUCTO DESCRIPCIN PRECIO EXISTENCIA NM_EMP1. NOMBRE ' EDAD OFICNA_REP TTULO CONTRATO DIRECTOR CUOTA VENTAS

PEDIDOS NTMJPHSDO CLIE REP FAB PRODUCTO CANT EMPORTE FECHA PEDIDO

Una vez discutido el diseo de la base de datos, podemos representarlo como se indica en la Figura 4.13. Por ltimo, se presentarn los datos de cada tabla:

OFICINAS OFICINA CIUDAD REGIN DIR OBJETIVO VENTAS CLIENTES MJMCLIE EMPRESA REP_CLIE LEVI CREDITO

UK \CI II,.. CUK.SOI'KACMCU

'RA

-MA

CAPI na o-,. iiAsi'S i ; DA IOS KI'I.ACUINAI.I.S. DISI-NO Y NI IKMAI I/ACIN.

1 12% I 113012 I 1298) 113051 112968 I 10036 i 13045 I 12963 113013 113058 112997 112983 1 13024 113062 112979 113027 113007 13069 113034 112992 I 12975 I 13055 11.3048 1 12995 1 I 3065 1 1300! I 15049 1I29S7 113057 113042

Una vez diseada la base de datos, se crean sus tablas y se introducen sus arnpos y registros mediante la sintaxis SQL que se especifica a continuacin: CREATE TABLE clientes ( ciie integer not null PRIMARY KEY,

japresa char (20) not null, INTO ;S:4KKT INTO INTO INTO w.KHTINTO KKHT INTO KCKttl' INTO UVKKT INTO .sr.KHT INTO ;K:;KRT INTO KKHT INTO INTO clientes VALUES (2101, clientes VALUES (2102, el ientes VALUES(2103,

clientes VALUES (2105, clientes VALUES (2106, clientes VALUES (2107, clientes VALUES (2108 , clientes VALUES (2109, clientes VALUES (2111, clientes VALUES (2112, clientes VALUES (2113, clientes VALUES (2114 ,

I NTO clientes VALUES (2115, 1 NTO clientes VALUES (2117, -NKKRT INTO :N::KKT INTO );;: y.Wi :::::i:|.T clientes VALUES (2118 , clientes VALUES (2119, INTO clientes VALUES(2120 ,

1 NTO clientes VALUES(2121,

::;.';r.KT I NTO clientes VALUES (2122, B.-KRT 1 NTO clientes VALUES (2123, .'. V.VV .1 NTO clientes VALUES(2124,

Rpclie integer, Uite_credito numeric

'Jones Mfg.', 106, 6500O); 'First. Corp.', 101, 65000); 'Acme Mfg.', 105, 50000); 'A7AA Investments', 101, 45000); 'Fred Lewis Corp.', 102, 65000); 'Ace International', 110, 35000); 'Holm Landis', 109, 55000); 'Chen Associates', 103, 25000); 'JCP Inc. ' , 103, 50000); 'Zetacorp', 108, 50000); ' Ian Schmidt', 104, 20000); 'Orion Corp.', 102, 20000); 'Smithson Corp. ', 101, 20000); 'J.P. Sinclair', 106, 35000); 'Midwest Systems', 108, 60000); 'Solomon Inc.', 109, 25000); 'Rico Enterprises', 102, 50000); 'QMA Assoc.', 103, 45000); 'Three-Way Lines', 105, 30000); ' Carter Sons', 102, 40000); 'Peter Brothers', 107, 40000);

REP VENTAS CONTRATO 12121014192013120114DIRECTOR ~ 104 101 108 F CUOTA VENTAS \ 3"5?O,00 300.00,00 350.000,00 275 1100,00 106 367.911.0.11

- FEB -88 -OCT- 99 DIC-U JUN-U NULI. MAY-XT OCT-86 104 ENE -90 10! OC'7-89 M-87 104

392.725.00 j 474.05. j

299.912.0; 142.594.lKI !

21)0.000,00 500.000,00

305673.1! j

NULI. 75.985.00! 106 3.50.000,00 275.000,00 1 300.000,00 361.865.0ll :

286.775.o0: 186.042.0;

AW-88 IOS

CREATE TABLE repventas ( Hum empl integer not null PRIMARY KEY,

Sombre char (15) not null, Krtrt integer, ;->ficina rep integer, Titulo char(10) , '-ontrato date not null,

director integer, i-uota numeric, ' mtas numeric not null

OFICINAS

OFICINA

CIUDAD Denver New York Chicago Atlanta \ U>s .Invela

REGIN ' Oeste 108 liste Este liste 106 104 105

DIR 300 575 800 350 725

OBJETIVO .000 ,00 -000 ,00 .000 ,00 000 ,00 367 000 ,00 835

VENTAS 186 692 735 .042' ,00 .637 ,00 .042 ,00

.91 1 ,00 91.5 ,00

Oeste 108

""';'; "vro repventas VALUES (101, -.'.Z'3986'' 104 ' 300000, 305673); 1 , iNT0 rePventas VALUES (102, 108' 350000, 474050); INTO repventas VALUES (103, 'Paul Cruz' ' 104 ' 275000, 286775); r..-r INTO repventas VALUES (104, 106, 200000, 142594);

45, 12, 'Rep Ventas' , 48, 21, 'Rep Ventas', '1229, 12, 'Rep Ventas', '0133, 12, 'Dir Ventas', '19-

< >KA< :i \: ! Is:. . t .RSO I'R.U Mi li

INSERT INTO repventas VALUES (.105, 02-1988', 104, 350000, 3679.11); INSERT INTO repventas VALUES (106, 1988', null, 275000, 299912); INSERT INTO repventas VALUES (107, '14.11-1988', 108, 300000, 186042) INSERT INTO repventas VALUES (108, 10-1989', 106, 350000, 361865); INSERT INTO repventas VALUES (10 9, 10-1999', 106, 300000, 392725); INSERT INTO repventas VALUES (110, 14.01-1990', 101, null, 75985); CREATE TABLE Oficina Ciudad Region Dir Ob j etivo Ventas ) ;

INSERT INTO Oficinas VALUES (11, INSERT INTO oficinas VALUES (12, INSERT INTO oficinas VALUES INSERT INTO oficinas VALUES 335915) ; INSERT INTO Oficinas VALUES (22, (13, (21,

INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INS ERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO

productos productos productos productos productos productos productos productos productos productos productos productos productos productos productos

VALUES( 'ACI VALUES( 'ACI VALUES( ' ACI VALUES( ' ACI VALUES( 1 ACI VALUES( ' ACI VALUESCACI VALUES( 'BIC VALUES( ' BIC VALUES( ' BIC VALUES( ' FEA VALUES( ' FEA VALUES( ' IMM VALUES( ' IMM VALUES' ' EMM

'Bill Adams' 'Sam Clark', 3 7, 13, 52, 11, - RA-i* 'Rep Ventas' 'VP Ventas', 575000, 692637) 800000, 735042) 350000, 36791.1.) 108, 725000,

'Oeste', 108, 300000, 186042), 'Nancy Angelli', 49, 22, 'Rep Ventas' 'Larry Fitch', 62, 21, 'Dir Ventas' i 'Mary Jones', 31, 11, 'Rep Ventas' 'Tom Snyder', 41, null, 'Rep ventas' '41001', 'Artculo Tipo 1', 55, ! '41002', 'Artculo Tipo 2', 76, '> : '41003', 'Artculo Tipo 3', 107, -V '41004', 'Artculo Tipo 4', 117, -'4100X', 'Ajustador', 25, 37); '4100Y','Extractor', 2.750, 25); '4100Z','Montador', 2.500, 28); '41003','Manivela', 6 52, 3); '41089','Retn', 225, 78); '41672','Pate', 180, 0); '112 ','Cubierta', 148, 115); '114 ', 'Bancada Motor', 243, 15: '773C ', 'Riostra 1/2 Trn', 975, 2<S: '775C ', 'Riostra 1-Ttn' , 1.425, 5>f '779C ', 'Riostra 2 Tm', 1.875, ?: !

,-,\l'i ICI.u I. IIASI S 1)1 DA IOS KIIACU INAI KS. DIM-.NO \ N. 1RMAI U Vi' > CVA'}...

r T0 productos VALUES ('IMM', '878H ','Soporte Riostra', 54, 221!; 3**T i^I0 productos VALUES ( ' IMM' , '887P ', 'Perno Riostra', 250, 24); I productos VALUES ('IMM', ' 887X ', 'Retenedor Riostra', 475, 32);

j*4S8T productos VALUES CQSA', 'XK47 ','Reductor' , 355, 38); ' ^^Z. NTO productos VALUES CQSA', 'XK48 ','Reductor' , 134, 203); '*lfZ "v'ro productos VALUES CQSA1, 1XK4 8A','Reductor' , 117, 37); ^"I TNTO productos VALUES ('REI', '2A44G', 'Pasador Bisagra', 350, 14); m**Z IiT0 productos VALUES ('REI', '2A44L', ' Bisagra Izqda. 1 , 4.500, 12); ;;:** pr0duct08 VALUES CREI', '2A44R', ' Bisagra Dcha.' , 4.500, 12); !S.r NTO productos VALUES ('REI', '2A45C','V Stago Trinquete' , 79, 210); <SATE TABLE pedidos ( pedido integer not nuil PRIMARY KEY, #ba pedido date not nuil,

integer not nuil REFERENCES clientes jftffl clie) , integer REFERENCES repventas (Num empl), rjt) char(3) not nuil, char(5) not nuil,

H-oducto

+'**nt integer not nuil,

importe , ' ACI ' , " IOS, IOS, 101, REI ' AC I ' ACI '

number not nuil 1.002' , , 22500); '2A44L' ;, 31500); ' 4 1004. ' 28, 3275);

'41004 '34, 3 978); '2A44G' 6 , 2100) ; '410055' 6, 150CJ);

1.03 , REI ' 102 , >l AC I '

,r;r: j-.-dldos VALUES (110036, '30-01-1990', 2107, lio , IM-Ili |..wlidoS VALUES (112961, '17-12-1989', 2117

p.;didon VALUES (112963, '17-12 -1989', 2103 ;;; !-: >..>d idos VALUES (112968, '12-101989', 2102 : :>:: : p-didos VALUES (112975, '12 -10-1989', 2111 '.' :.'.m ;., ] i dos VALUES (1 12979, ' 12 -10 - 1.98 9 1 , 211.4 106 , 108 , 102 , 107 , 109 , 108 , 105 , 103 , 103, >, '. 110, ' RE ' ' FEA ' ' 114 ' , i, 1.4 6 8} ; ' ACI ' '41002' 1 0 , ' REI ' 'BIC ' 2A45C 2 4 , ' 41003'1, 760) ; 18 96) 6 52) ; 3, 6 925) ; , 3 3 , 3715) 6 52) 7 1 DO) ; ",.1, I 1G1 ) ; 5 3 2) ; .12 9 00) ,46: 09I; ' '50) ; 6, i 1 30) ! 625) ;

' IMM ' 1 7 7 9C ' , ' IMM ' ' 773C , !, 2 ' ACI ' ' 4100 !' B re ' '41003' , 1 , ' OSA 1 'XK47' , 2 0 , UO 02 ' , , '2A4 5C , '2A44R' 1A44K', 11

1 0 1 , R EI ' i, 'REr , ' 102 , 108,

' IMM ' , '779C. 'OSA' , ' XK47 ' ,

108 , 201, 103, 10 9, 107,

'QSA' 'ACI '

, 'XK47', , 4100X'

i, :

4 2 il ! : I50);

ACI 1 , '41007' ' FEA ' , '112', 10, " ' FEA 1 , ' 114 ' ,

2 "1

o;,j ;

4 .3 0 ; 10, 6, 22, 4 50) ; 1301 ; ',1 350)

10 2 , ' OSA ' , ' XK-47 1 , 107, ' IMM ' , '775C',

: :!;: > i. -diijoa VALUES (112983, '27-12-1989', 2103, 105, 'ACI', '41004 :.v:-. p.'dido;; VALUES (112987, '31-12-1989', 2103, 105, ' ACI' , '4100Y |>.:didos VALUES (112989, '04.01-1990', 2101 J 'di dos VALUES (112992, '04.11-1989', 2118 >M>< ['"'iidoc. VALUES (112993, '04.01-1989', 2106 UE LI:

VALUE! .'ALOES

' 10 -02-1990 ' , "211 '10-02 1990', 211 ,'UKS (113055, '11 "JES ! 1 i 1067 , ' 1! J*Jt fio 4.2. Supongamos que hay que realizar una base de datos relativa a un ^1^^**" !as siguientes caractersticas: Nmero del alumno, Direccin del f C 1' ^a'f'caciones< Nmero de aula, Nombre del Tutor, Direccin del Tutor 0^ ac'"n final. Definir un conjunto razonable de tablas para la base de - Re constituyan un diseo totalmente normalizado.

Dado que el campo Calificaciones podra tomar varios valores, uno Nmero del alumno Asignatura Nmero de evaluacin Calificacin Calificacin global una de las asignaturas, podramos obtener la primera forma normal mediante tablas:

Nmero del alumno Nombre del alumno Direccin del alumno Nmero de aula Nombre del Tutor Direccin del Tutor Calificacin final 0~43 Conldrulrla base de datos en un contexto educativo estudiada como l e este captulo a partir de la pgina 98. Crear las tablas segn las C^^ionesya especificadas y rellenar sus registro segnlosdaio^^ La sintaxis SQL para crear las tablas y aadir sus registros es la siguiente: -*JKATE TABLE departamento ( <*RBAi& char(4) not nuil PRIMAR Y KEY,

ntespacho Deh f no char(2) not nuil, pedir char(3) mteger not nuil.

Nmero del alumno Nombre del alumno Direccin del alumno Nmero de aula Nombre del Tutor Direccin del Tutor Calificacin final Nmero del alumno Asignatura Nmero de evaluacin Calificacin Nmero del alumno Nmero de evaluacin Calificacin global

' HU' SC , 1 SC 1 HU 1 ItlTO departamento VALUES { ' THEO' , ( 1 CIS 1 , (' D. G. ' ,

.i-;.-!- IMT0 departamento VALUES f]>S 1NTO departamento VALUES

-.1

'i' UNTO departamento VALUES ('PHIL1,

CREATE TABLE curso { C(10 char (3) not null PRIMARY KEY, char (22) not null,

Ctiombre

C'doscp char (2 5) not null, Ct aria VI ftp t COopt ) l i fj-od integer not null.

number not null, char(4) not null REFERENCES departamento > VALUES ;o VALUES so VALUES ,o VALUES i VALUES ii. VALUES :o VALUES CC11' ('C22' CC33' , ('C44' ('C5S' I 066' ( ; '11 { pas CP.li' I ' P4 4 1 ! '13 1 ( 'T44 1 INTROD. A LAS CC. ' , ' PAPA NOVATOS', ?, 100, 1 'ESTRUCT. DE DATOS1 , 'MUY UTIL1 , 3, 50, 'CIS'} 'MATEMTICAS DISCRETAS' , 1 ABSOLUTAMENTE NECESARIO', ' CIRCUITOS DIGITALES ' , ' AH HA! 1 , 3, 0, 'CIS'); 'ARQUITECT. COMPUTADOR' , ' MAQ . 7CN UEUMANN' . 1 BASES DE DATOS RELAC, 'IMPRESCINDIBLE', 3, 'EMPIRISMO', ' VERLO PARA CREERLO' , 3, .100, 'i 'RACIONALISMO' , 'PARAUSARLOS CIS', 3, 30, 'II 'EXIETENCIALISMO', ' PAPA USMPLOS U IS ' , i, 200, SOLJPSISMO' , ' PARA MI MISMO' , 6, 0, 'PHIL'i; 'ESCOLASTICISMO', "PARA BEATOS' , i, 150, 'THSX 1 FUNDAMRNTAI.ISMO' , ' PARA DESCUIDADOS , 3, 9', ' HEDONISMO' , 1 PARA SANOS' , 3, 0, 'TOSO'); 'COMUNISMO1, ' PARA AVAROS' , 6, 200, 'THEO');

Nmero del alumno Nombre de! alumno Direccin del alumno Nmero de aula Calificacin final Nmero de aula

Nombre del Tutor Direccin del Tillar Nmero del alumno Asignatura Nmero de evaluacin Calificacin Nmero del alumno Nmero de evaluiui'* Calificacin global

fKKVK TABLE claustro ( char(3) not null PRIMARY KEY, "' .ti rB''ldo char(15) not null, char(20) not null, date not null, integer, number not null, char(4) not null REFERENCES departamento (Dept)

to VAU 1RS ('Oft' in VALUES 010'

'KATHYPEH', 't'AiIK A PIEDRA, V, '1.6-01 1070', 2, fcOOO, 'Mil.'); 'JESSIE MARTIN', l'i I'M, IS11, 4', '01 <r> Vv>', 2, 13000, "HIT;');

'CIS-),. 'AP. CORREOS 1138', '09-07-1979', 2, 35000, GALLE DE IA PLATA', '05-09-1979', 7, 45000, 'Dr. DELESTE, 4', '01-09-1969', 1, 45000,' CAMBD RISA, 77', '06-09-1981', 0 , 36000, 'CALLE DEL SUR, 489', '16-01-1982', 3, 35000,

INSERT INTO claustra VALUES ('08' , 'JOSE COIN' , INSERT INTO claustro VALUES ('85', 'AL HARTLEY' , INSERT INTO claustro VALUES ('60', 'OTILIA MAROTN' INSERT INTO claustro VAI1IES (' 65', ' LISA BOBAK' , INSERT INTO claustro VALUES ('80', 'BARB HLAVATY', CREATE TABLE clase Crio Sec Cinstrfno Cdia Chora Cedif Cdespacho 'CK',. (Cno) ( char(3) not null REFERENCES curso char(2) not null, char(2) not null, char(2) not null, char(14) not null, char(2) not null, integer not null. CONSTRAINT claseJj*no_Sec PRIMARY KEY (Cno, Sec) ) ;

INSERT INTO AM' , INSERT INTO AM' , INSERT INTO AM' ,

clase 'SC , clase 'SC , clase 'SC ,

VALUES ('CU' , ' 01 ' , '08 ' , 305)

'LU' ,

' 08

00 00 00

-09 -09 -10

00 00 00

VALUES ('Cll1 , ' 02 ' , ' 08 ' , 1 MA' , ' 08 306), 305); VALUES CC33' , 01', 1 80 ' , 'MI ' , '09

INSERT INTO AM' , INSERT INTO AM' , INSERT INTO AM' , INSERT INTO AM' , INSERT INTO AM' , INSERT INTO AM' ,

clase 'HU' , clase 'H' ,

VALUES CC55' , ' 01 ' , ' 85 ' , ' JU' , 306) VALUES ( ' PU ' , ' 01 ' , '06' , 102)

' 11

00 00 00 00 00 00

-12 -10 -12 -11 -11 -12

00 00 00 00 00 00

1 JU' , ' 09 '11 ' 10 ' 10

clase VALUES (1P33', ' 01 ' , ' 06 ' , 'VI ' , ' HU' , 201), clase 'HU' , clase 'HU' , clase 'HU' , VALUES ('Til', 101} ; VALUES ('Til', 102) j ' 01 1 , ' 10 ' , 'LU' , ' 02 ' , ' 65 ' , 'LU' ,

VALUES ('T331, ' 01 ' , ' 65 ' , 'MI ' , ' 11 1011)

SS? INTO tKSSRT INTO

'SEER? INTO CMATB TABLE PerSOnalha<r{ ^Ve chart S* -teg ptpt VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES INTO INTO INTO INTO INTO INTO INTO INTO INTO M 5IKMRT JHSKRT INSERT SSiSBRT SSJSEKT !4-;)T personal personal personal personal personal personal personal personal personal ' 10O' '150' '10O' '80O' ' 100' ' 150' ' 800 ' ' 02 ' ' 02 ' 1 01 ' ' 01 ' ' 01' ' 01' '01' ( 'Cll ', ('Cll', ('P33', ('P33', ('Til', ( 'Til ' , ('Til',

17-12-1987' , ' 17-12-1987' , '24.12-1987', '24.12-1987', '24.12-1987' , '15-12-1987', ' 15-121987' ,

('LUCAS', 'EVANG1', 53, 'THEO'); ('MARCOS', ' EVANG2 1 , 52, ' THEO 1 ) ; ('MATEO', ' EVANG3 ' , 51, 'THEO'); ('DICK NIX', 'LADRN', 25001, 'PHIL'); ('HANK KISS', 'BUFN', 25000, 'PHIL'); ('JUAN', 'EVANG4' , 54, 'THEO') ; ('EUCLIDES', 'AYTE. LAB.', 1000, 'MATH') ( ' ARQUIMEDES 1 , 'AYTE. LAB.', 200, ' ENG ' ) ('DAVINCI', 'AYTE. LAB.', 500, ' ');

char(3) not null PRIMARY KEY, char(30) not null, char(15) not null, char(12) not null, char(6) not null, integer not null, char(3) not null, char(4) not null REFERENCES departamento (Dept)

);

' CURLEY DUBA Y ' 'THEO'); ' LARRY DUBAY' , 'CIS'); INSEKT INTO estudiante VALUES ('325' '204.124.4567', '780517', 122, '10', INSERT INTO estudiante VALUES ('150' '204.124.4567', '780517', 121, '80', INSERT INTO estudiante VALUES ('100', ' MOE DUBAY', ' '204.124.4567', '780517', 120, '10', 'THEO'); INSERT INTO estudiante VALUES ('800', 'ROCKY BALBOA' 1121122', '461004', 99, '60', 'PHIL');

'CONNECTICUT' 'CONNECTICUT' CONNECTICUT' 'PENSYLVANIA'

CREATE TABLE matricula ( Cno Sec char(3) not null, char(2) not null,

Sno

char(3) not null REFERENCES estudiante (Sno), date not null, char(10) not null,

Fecha_mat Horamat

CONSTRAINT matriculaCnoSecSno PRIMARY KEY (Cno, Sec, Sno) ) ; INSERT INTO matricula VALUES ('Cll', '01', '325', '04.01-1987', '09.41.30')'' INSERT INTO matricula VALUES ('Cll*, '01', '800', '15-12-1987', '11.49.00')'

Captulo 5

SQL*PLUS

5.1 EL ENTORNO DE SQL*PLUS

SQL*PIus es una herramienta que permite establecer conexin con c! servidor de base de datos Oracle y comenzar el trabajo con la informacin de la base de datos, in el apartado anterior ya hemos visto cmo se realiza la conexin a la base de datos mu SQI ,*Plus y cmo se llega a la ventana de aplicacin de la Figura 5.1. Para seguir los ejemplos de este captulo es conveniente conectarse a Mus con el usuario SCOTT y la clave TIGER (o la que se haya establecido por 'lotelo al instalar). Los comandos SQL para el trabajo con la base de datos se introducen en la lnea de comandos finalizndose con un punto y coma ( Figura 5.1). Al pulsar ENTER se ejecuta el comando y su resultado aparece "'"icdiatamentc debajo (Figura 5.2). Las consultas SQL pueden ocupar varias lincas en ventana de aplicacin.

Para pasar de una linca a otra basta pulsar ENTER {antes de escribir el punto y u"" ";" de finalizacin de consulta). Finalizada la escritura de la consulta cu varias ""cas se escribe punto y coma ";" y se pulsa ENTER, con lo que la consulta se Mccutar (Figura 5.3). Se observa que cada linca de una consulta SQL viene precedida l'c su correspondiente nmero.

11> i K.W I.I: ; i,... ri uso CKA< un > ! '<VMA Linca de comandos SCU. Plus SQWlus: Release 11.1.8.6 .8 - Production oh Mar Die 7 14:26:5? 2810 Copyright <c> 1982. 2007, Oracle. . fill eights reserved. Introduzca el nfcftbre de usuaria: SCOTT Intradu2<r la eontrass*a: Conectado a: -; ': . " Oracle Database 11 Enterprise Edition Release" 11.1 8.6 0 - Production With the Partitioning. OMP, Data Mining** Real fepiiCati. ltLi?/loptianS ' 'HC ,.

Figura 5.1

Ventuna de aplicacin k

Se puede utilizar SQL*Plus para manejar el lenguaje SQL (que permite ilmaccnar y recuperar datos en Oracle) y su extensin PL/SQL (que permite enlazar varios comandos SQL a travs de procedimientos lgicos). SQL*Plus permite maTiipular comandos SQL y bloques PL/SQL blocs, y ejecutar otras tareas adicionales entre las que destacan las siguientes: Introducir, editar, almacenar, recuperar y ejecutar comandos SQL y bloques PL/SQL.

Dar formato, ejecutar clculos, almacenar c imprimir resultados de consultas en formato de informe. Listar definiciones de columnas para cualquier tabla. Acceder y copiar datos entre bases de datos SQL. Enviar mensajes a usuarios y recibir sus respuestas. Ejecutar tarcas de administracin de bases de datos. 5.2 EDICIN DE SINTAXIS DE CONSULTAS O COMANDOS Ya heios visto que la forma ms fcil de editar el contenido de la lnea de comandos en SQL*Plus es utilizar la opcin Edil > Editor Invocar Editor I'gura 5.4). No obstante, tambin es posible editar el contenido del bfer mili/ando las instrucciones que se indican en la tabla siguiente:

'VVM texto A texto Aade el texto al final de la linea actual JHH* 'R/antiguo/nuevo C/antiguo/nuevo actual /t^xt <>C /texto Cambia "antiguo" por "nuevo" en la lnea

Borra "texto" de la lnea actual

CL B'JFF Borra todas las lincas del bfer .:1L' (nada) Borra la linca aclual (nada) Borra la linea n -" (nada) Borra la lnea actual (nada) Borra desde la lnea n hasta la linea actual

LJ *

il_i-AST _ii_ ro n

(nada) Borra la ltima 1 inca (nada) Borra desde la lnea ni hasta la n

(nada) Borra desde la lnea actual hasta la n -L'UT I -IILLLL texto sr I, Aade una o ms lneas 1 texto Aade una lnea formada por "texto" fasta todas las lneas del bfer

KAUA

c.Ai'i 11 .i . soi 1 n \ .s i-i'

instruccin

Abreviatura

LIST n L n o n Lisia ia lnea n ^^^^^^^^^ LIST * L * LIST n * L n * LIST LAST LIST m n LIST * n L * n Lista la lnea actual " Lista desde la lnea n hasta la actual ~ *~H L LAST Lista la ltima linea ~~~~"" Lmn Lista desde la lnea m hasta la n ""- i

Lista desde la lnea actual hasta la n "~H

A continuacin (Figura 5.4), se presenta un ejemplo de consulta en la n, se seleccionan los campos DEPTNO, ENAME y SAL de la tabla EMP V cumplen la condicin DEPTNO = 10. Al escribir la primera lnea de la consulta* comete un error tecleando DPTNO en vez de DEPTNO, lo que provoca un error en la ejecucin de la consulta. Para corregir este error podemos realizar los siguiente, pasos: Listar la primera columna (la que presenta el error) mediante la instruccin LIST 1 (abreviado L 1) para situar esta lnea como lnea actual en el bier. Utilizar la instruccin CHANCE (abreviado c) para cambiar DPTNO or DEPTNO (c /DPTNO/DEPTNO).

Utilizar la instruccin LIST para ver la sintaxis corregida y comprobar su exactitud.

Utilizar el comando r para volver a ejecutar la consulta. -3 MANIPULANDO SINTAXIS DE CONSULTAS O ' COMANDOS En SQL*Plus es posible guardar la sintaxis generada al realizar consultas o construir comandos para utilizarla o editarla posteriormente. . Para guardar en fichero la sintaxis del comando actual se utiliza SAVE nombreJichero. Para editar de nuevo el fichero almacenado previamente se usa GET nombreJichero. Para ejecutar la sintaxis de un comando almacenado se usa START nombreJichero. Para ejecutar la sintaxis de un comando almacenado tambin se usa @ nombreJichero. Para ejecutar la sintaxis de la ltima consulta se usa el smbolo / en la linca de comandos. Para borrar el bfer de memoria se utiliza CLEAR BUFFER. ("orno ejemplo (Figura 5.5), vamos a ejecutar la sintaxis de la ltima consulta:

,.Ql> / OEPTNO ENAME 18 CLARK 18 KING 18 MILLER Mil > ST4L~5 STtTJE CLOTSTTCTA Creado aren luit CONSULTA . sijl SQL > eCONSULTR DEPTHO CHOME SAL 18 CLARK 2.HSVS 10 KING 5008 10 MILLER 13 00 2W8 580) 1308 SfiL

SQL> I

18 CLARK 18 KING 18 MILLER PQL>

2U58 1388

5.4 FORM ATE AN DO SALIDAS DE CONSULTAS O COMANDOS

La tabla siguiente muestra varios comandos de formateo de salidas:

COLUMN nombre HEADING cabecera Asigna la cabecera especificada a la"colwna~*l cuyo nombre cs el dado i COLUMN nombre HEADING cl\c2 columna cuyo nombre es el dado SET UNDERLINE = Asigna una cabecera de dos lneas (el y c2)*a la

Sita el carcter = para usar en el subravado U l . . ^_7

COLUMN nombre FORMAT formato

Asigna el formato dado a la columna cuyo "' nombre es el especificado BREAK ON columna Suprime valores duplicados en la columna j Inserta n lneas blancas entre cada valor distinto de la columna

BREAK ON columna SKIP n dada j

BREAK ON columna SKIP PAGE Imprime en pgina nueva cada valor distinto de ! la columna dada i BREAK ON ROW SKIP n Inserta n lneas blancas despus de cada fila de : la salida I BREAK ON ROW SKIP PAGE BREAK ON REPORT SKIP n Inserta una pgina despus de cada fila de la salida Inserta n lneas blancas despus de acabar un informe

BREAK Lista todas las inserciones activas CLEAR BREAKS Elimina todas las inserciones activas

COMPUTE SUM OF cJ ON c2 (tambin cs posible usar AVG, COUNT, MAX, MIN, STD, VAR y NUM en vez de SUM en COMPUTE) Calcula las sumas del campo el para cada valor \ del campo c2. Es necesaria la orden previa BREAK ON c2 SKIP n \ CLEAR SCREEN Borra la pantalla , ,.

SET PAGESIZE n Sita en n el n mximo de lincas porj>gjna SET L1NESIZE n Sita en n el n mximo de caracteres por lnea SET NEWPAGE n pginas .J Sita en n el n de lincas en blanco entre :

SET PAUSE ON Detiene la visualizacin de la pantalla entre dos ; pginas. Se desactiva con SE L PAUSE OLI' SET HEADS HP carcter Sita el smbolo a utilizar para dividir un ttulo de pgina o una cabecera de columna que cs ms larga que una lnea \ REMARK (o REM) Indica a SQL*Plus que las palabras que siguen

deben tratarse como comentarios HOST comando Enva el comando al sistema operativo 1 EDIT Sale de SQL*Plus y pasa al editor por defecto

j^ffTitulo ' (admite las opciones ARIGHT, CENTER, COL n y SKEEP 'alinear el ttulo a izquierda, derecha, ,. f\iradm .,

"sTta^Mltij^^ inferior de cada pgina de la salida .

" '-tro columna n o insertar antes de su fxfttST'Ttoilo ' (admite las opciones de ^^JLIF^ CN BLANC0 > Enva la salida de SQL* Plus al fichero fichero Ast. Se dcsactiyjrconjff^

TruTATN DEPTNO ; r SELECT deptno, ename. FROM enp WHERE deptno>10 SQL> SQL> 1 2 3 Las Figuras 5.7 a 5.14 presentan ejemplos ilustrativos de los comandos anteriores. sal S0TF3ELECT deptno, ename, sai it* ORDER BV deptno FROM emp WHERE deptno>18 U ORDER BY deptno; DEPTNO ENAME 880 2975 3888 3088 1180 1688 958 1588 2858 1258 1250 OEPTNO ENAME SAL 888 2975 3 800 3 080 1180 1608 950 1580 285 0 1250 1258 28 SMITH JONES SCOTT FORD AD MS 38 ALLEN JAMES TURNER BLAKE MARTIN WARD SAL Figura 5.7 set pagesize 35; BREOK ON DEPTNO SKIP 2;

f SELECT deptno, ename, s FRON enp WHERE <leptno>10 ORDER BY deptno 28 SMITH 28 JONES 28 SCOTT 28 FORD 20 ADAMS 38 ALLEN 38 JAMES 3 8 TURNER 38 BLAKE 38 MARTIN 3 8 UARD is IH >' !S(JI > RUI > i 1 i V I a i n Figura 5.S SQL> SQL> SQL> SQL> SQL> COLUMN DtPTNO HEADING Department COLUMN EHAHE HEADING Employee COLUMN SAL HEADING Salary COLUMN COMH HEADING Conmissian SELECT DEPTNO, ENAME, SAL, COMH

Salary Cnnmission SOL 880 2975 3888 3800 11 88 DEPTNO ENFINE 20 SMITH JONES SCOTT I ORO ft o mis FROM EHP WHERE JOB = 'SALESMAN'; 388 589 1488 1608 1258 12511 1588 Department Employee 1608 958 1588 2858 1250 1 2 SO

OLLEN JONES TURNER BLOKE lift RT IN WORD 30 ALLEN WARD MARTIN TURNER Figura 5.9

SQL> Ligure 5. IO

RA.MA

Para obtener informacin exhaustiva de cada uno de los comandos anteriores con todas sus opciones y subopciones, basta con teclear lielp comando en la linca de comandos de SQL*Plus y pulsar linter. A continuacin (Figura 5.16) se presenta la informacin sobre los comandos variable y hreak: 5fjL> help~uCa7^aTle; - ~ UARIA8LE

Declares a bind variable that can then be referenced in PL/SQL. UARIABLE with no arguments displays a list of all wariables declared in the session. UARIABLE followed by a name lists that uariable. UAR[IABLE] [uariable [NUMBER | CHAR | CHAR (n [CHAR|BYTE ]) | NCHAR | NCHAR <n) | UARCHAR2 (n [CHAR|BYTE]) j NUARCHAR2 (n) | CLOB | NCLOB | REFCURSOR])

SQL> help break; BREAK

Specifies where and how to make format changes to a report. BRE[AK] [ON reportelement [action [action)]] ... where report_j?lement has the following syntax: {column | expression | ROU | REPORT} and where action has the following syntax: [SKT[P] n | [SK1[P]] PAGE] [NODUP[LICATES] | DUP[LICBIES]] SQL> Figura 5.16 ] 5.6 UTiLfZANDG TECLAS DE COMANDO EN SQL*PLUS

f'

5.7 FORMATOS NUMRICOS EN SQL*PLUS En SQL*Plus es posible utilizar distintos formatos numricos para las columnas de las tablas. Estos formatos se asignan a las columnas a travs de la opcin FORMAT del comando COLUMN de SQL*Plus.

La tabla que se presenta a continuacin muestra los formatos numricos ms importantes acompaados de un ejemplo y una descripcin sencilla de la especificacin de cada formato:

Elemento Ejemplos

Descripcin *

9 9999 El nmero de nueves especifica el nmero de dgitos significativos devueltos. Los blancos se muestran como ceros al comienzo. 0 0999 9990 Muestra los ceros como ceros en la posicin indicada en wTik mostrar los blancos como ceros. $ $9999 Sita como prefijo el smbolo del dlar. ~~

B9999 Muestra el cero como blanco. ~~

MI 9999MI Muestra "-" despus de un valor negativo. Para valores positivosT sita un espacio. S S9999 Devuelve "+" para valores positivos y "-" para valores negativos.

PR 9 9 9 9 PR Muestra valores negativos entre parntesis. Para valores positivos y sita un espacio al principio. D 99D99 Muestra el carcter decimal en la posicin indicada para separar l,n partes entera y decimal de un nmero. G C L 9G999 Muestra el grupo separador en la posicin indicada. C999 L999 Muestra el smbolo de moneda ISO en la posicin indicada. Muestra el smbolo de moneda local en la posicin indicada. 9, 999 Muestra una coma en la posicin indicada.

, (comma)

. (period) 99.99 Muestra un punto decimal en la posicin indicada, separando fo> partes entera y decimal de los nmeros. V 999V99 Multiplica el valor por 10", donde n es el nmero de nueves despus A1 'V". Vlucstra el valor en notacin cientfica.

F H F F 9.999EEEE

RN o enRN Vluestra numerales romanos en maysculas o minsculas. I 'alores pueden variar entre l v 3.999. DATI; DATE Muestra valores como fechas en formato MM/DD/YY. .

5.8 FUNCIONES A UTILIZAR EN SQL*PLUS En SQL*P!us es posible utilizar distintas funciones como argumentos de i-sentencia COMPUTE. La tabla siguiente muestra las ms importantes de estas funciono CA'I Utos. SOI TI US I ' F Funcin Calcula Tipos de datas a los que se aplica NUMBER

Media de valores no nulos

N de valores no nulos fodos los tipos Mximo valor NUMBER, CHAR, NCI IA R, VARCHAR2 (VARCHAR), NVARCHAR2 (NCHAR VARYING) Mnimo valor VARYING) JM"[BER] NUMBER, CHAR, NCHAR, VARCHAR2 (VARCHAR), NVARCHAR2 (NCHAR all types

Nmero de tilas

KTD j Desviacin tpica de valores no nulos NUMBER NUMBER NUMBER

Suma de valores no nulos F/SNCE]

Varianza de valores no nulos

5.9 VARIABLES EN SQL*PLUS En SQL*Plus se pueden definir variables utilizables fuera del propio programa. Una variable en SQL*Plus puede asimilarse a una columna de una tabla un una sola fila de datos. Las variables, igual que las columnas de bases ce ias tablas, tienen asignado un tipo de dato (numrico, carcter...) y contienen datos. I as variables se definen utilizando el comando DEFINE, mediante la sintaxis:

DEFINE Nombre de la variable = "Valor de la variable" Mediante la sintaxis anterior hemos asignado el valor especificado a la variable cuyo nombre es el dado. Es conveniente encerrar entre comillas el valor > agnado a las variables para poder incluir espacios en el texto. ." <:.-1 i .i.- i "-.i .! ' . SQl-> *.v*?<:r. iL.ptruo ft-o iitp uitiere. *ft>>tno-" ".w " ; .f L.j.<juo iueH o* r Ktl 3 :* 3fl 3fl 3 ) :I ni > Figuro 5.1 y I as variables definidas previamente pueden utilizarse cu la ejecucin de "astillas precediendo el nombre de la variable del signo & (ampersand) y '-"'cerrndolo entre comillas simples. En el ejemplo siguiente (Figura 5. i 7) '-huimos la variable de nombre v y valor 30 y, a continuacin, la utilizamos para -leccionar de la tabla de aquellos empicados cuyo nmero de departamento es 30. 1: ^i;lett cl?ptio !-ru<>t *np whert' dl.'pt 11 ' tu"

i : swlect flu|itiifi f i'itm <.mp wli.?ro rit?p ti> ~ " UH'

I SS ( >KA<'LI- I Ig. (.'I ;RS< > l'KAC I It <>

..e/KA-M,

c .'.: ! 101.0 v si n.'i'i 1 s 1 .'.

Para visualizar todas las variables que se han definido, introduzca e comando DEFINE sin ningn argumento (Figura 5.18).

Para borrar una variable se utiliza el comando UNDEFINE seguido del nombre de la variable. Por ejemplo, en la Figura 5.19 se borra la variable de nombre v y posteriormente se observa con el comando DEFINE que ya no existe h variable. I .QL> 6CpTRE^ >EFIHE _SQLPLUS_RELEASE - "000918981" (CUOR) 'EFINE ^EDITOR lEFINE _0_UERSION - "Notepad" (CHAR) - "0racle9i Enterprise Edition Release

lith the Partitioning option ISeruer Release 9.8.1.1.1 - Production" (CHPIR) iEF I HE _0_RELEflSE EFINE U ;QL> Figura 5.18 En ocasiones se desea evitar que Oracle pida mltiples veces el valor de t?na variable que se utiliza de forma repetida. Para esta finalidad se definen las variables precedidas del doble signo &&, en cuyo caso Oracle pide el valor de la variable solo una vez. Cuando se define una variable mediante &&, es necesario eliminarla con el comando UNDEFINE cuando se desee darle un valor diferente. = "9 08010181" (CHAR) = -3B- (CHAR)

En el ejemplo de la Figura 5.21 se seleccionan la media de los salarios bajos (HISAL) y la media de los salarios altos (HISAL) de la tabla nivel salarial de los empleados {salgrade) utilizando dos variables de sustitucin (bajo y alto) cuyos valores se sustituirn solo una vez (la primera vez que aparezcan en cualquier consulta). Para poder volver a utilizar estos nombres de variable es necesario .mular su definicin con el comando UNDEFINE. Esa es la razn por la que antes de ejecutar la consulta se utiliz dicho comando para ambas variables (por si acaso va haban sido definidas como tales previamente).

SQL> undefine bajo; SQL> undefine alto; SQL> select aug(&f,bajo), aug(e,&alto) fron salgrade; Introduzca un ualor para bajo: LOSftL Introduzca un ualor para alto: HlSfil. antiguo 1: select aug(S&bajo), aug(&&alto) from salgrade nueuo aug(HISflL) from salgrade AUG(LOSflL) HUG(HISflL) 1666,8 3519,8 SQL> Figura 5.21 Oracle presenta dos lneas encabezadas por antiguo y nuevo cuando sustituye 'lores de las variables. Se puede eliminar la presencia de estas dos lincas mdo el comando SET VER1FY OFF, que puede abreviarse medanle SET VER E' Figura 5.22 presenta la salida de la 5.21, pero con SET VER OFF. SQL> undefine bajo; "' SQL> undefine alto; SQL> set uer off; SQL> select auq(?,Vha jo;, aug(&&alto) from salgrade; Introduzca un ualor para bajo: LOSfiL Introduzca un ualor para alto: HISftL HUG(LOSflL) HUG(HISHL) 1600,8 3519,8 SQL> Figura 5.22 1: select aug(LOSHL),

KA--

Ejercicio 5.1. A partir ce la instancia ORACLE instalada por defecto, selectem los empleados (tabla EMP) cuyo trabajo sea administrativo (CLESK)^ dependiente (SALESMAN) y cuyo nmero

de departamento est entre 10 y 3 calculando la suma de salarios (SAL) por departamento (DEPT) y el salario medu por tipo de trabajo (JOB). 11!

Sl|i > Sii! > ;\ J 'i

CIJI MI'!N Siti IIIKI'IAI SV , *>*> > ,V90. Y ; SILICI DLPIKH. .18. INANI. SAS HHIH Mie UHI Hi .MIO IN ('CLIItK', ' SAI LS11AN" > ANO DEPTNO IN (18, 38) UftPFK BV Dfr.PINn, .188;

EMPI. OYLE NA ML DEE[NU JU 18 CLERK

SAL S1.3 08.08 $1 ,388.80

qu. Comenzamos ejecutando SQL*Plus mediante Todos los Programas ... Oracle-OraDb I Ogjrome l- Desarrollo de aplicaciones * SQL*Plus continuacin, en la pantalla Conectar, utilizamos el Usuario SCOTT, la (7U! TIGER (o la que se haya situado en el proceso de instalacin. La sintaxis utilizaremos y la salida correspondiente se presentan en la Figura 5.23.

3 ci ERK DF P T NO .ino

EMPI. UVEE HftML

SI.380.08 $9S8-A $VS8.e SAI

30 SALESMAN SALESMAN SALESMAN SALESMAN tu y

ALLEN MORD MAH f t N TURNER

$1,080-80 $1 ,2'SO. 88 $1 ,250. ,18 Sl.SHO.88 $ 1 ,400.80 %fi ,15"50. 08

OEPTNO JOB 1 CLERK auo, ***S* Kit ; Silfi i

DEPTNO JOD

E NAHE HILLER

E NAHE

SAL 1308 1308 1388 V5 'J SU

SAL

Figura 5.24

tjtrcicia 5.3. A partir de la instancia ORACLE instalada por defecto, hallar los fitbtotales de salarios de los empleados por departamentos restringindose a los departamentos 10 y 20 y no imprimiendo las etiquetas relativas a los suhtotules. Hallar el salario total sin etiqueta.

Fus Figuras 5.25 y 5.26 presentan la sintaxis a utilizar y la salida:

i SALESMAN SALESMAN SALESMAN SALESMAN .3 u q

ALLEN WARD MARTIN TURNER

1B 125 8 1258 l'Jflfl

Hi an

Sl)L> Stil > SUL>

COLUMN DUMMY NOP R INT; t.'IJIIPUn: SUM Uh SAL UN DUMMY; BREAK ON DUMMY SKIP 1;

S<]1 > SELECT DEPTNO DUMMY, DEPTNO, t". ' 'i I-HOM F1P WHIRL Ai.PTNlK-28 URDES UV PEPIMI);

Figura 5.23

Ejercicio 5.2. Rea/izar la misma tarea del problema anterior, pero presentte los salarios precedidos del smbolo monetario. _

La Figura 5.24 presenta la sintaxis a utilizar y la salida.

DEPTHH E NAME 1 CI ARK 1 II XI HG IB Mi i I I It

28 2 SI 28 2 II 28

SMITH I1DAMS (URI) SCOII .IONES

Ut P I NU

tNflrlfc

SAL tt Sii S 88 V.I II

8 80 1 1 88 088 3 8 88 297 SAI

Ss(ji.> S<JL> SUI / ism > I2

frrcici(> 5.5. Volver a obtener el informe del problema anterior, pero ahora lando al principio el ttulo "SALARIOS COMISIONES TOTALES Y .\j REMAS" alineado a la izquierda. Adems, situar a la derecha del ttulo el nmero de pgina. Separar el ttulo y los resultados por dos lneas en blanco. La Figura 5.29 presenta la consulta y el resultado:

.<:: til mi "lilil" ini "SHifiititix v iMtMis i UNES miniti; v i Miiiijins' iiuiiti 't'w: INO : " sili -PNII SKII1 / . tt'lfll ni-; v IM i s i INFS tu rni r.-.; v FXTOFNAS Sili CttMI'l iMtiitin: i

i 6 ti it rj t ii IIH :. , ! tu 12V1I It.rtl ;,, ,,!,,i IMUt ^titilliti tf'tll II

Ejercicio 5.4, A partir de la instancia ORACLE instalada por defecto, hallar salario medio y la comisin media de los vendedores de la tabla Emplead* incluyendo su nombre). Obtener tambin un informe que presente simultneamente .fifl!x"tu)L el mnimo y el total de salarios y comisiones de los vendedores. l:"MM [IN

rost imuos:

!<:ot > liftt-itti UN Iti POH 1 S(JI> sul. > 7 l CUMPU1F nWG 1 rtHFI SFLLt: t ENAttr. . :;m Fittili FKP WMLltr JI1B 'SiLLSi

Id I ftl '.Mlin HUK ! I ti i "UMFU

Figura 5.29

NitPl I.I.I.N A H l> IMARTTN (llIRrlIJi .M i H I l'Ili MS I M' I I i Al

SAI 1 , tt

tAl'lli'iit itri-i

Olitili ;l na 1**88 )

Você também pode gostar