INTRODUCCIN A LOS SISTEMAS GESTORES DE BASES DE DATOS
El trmino de bases de datos fue escuchado por primera vez en 1963, en un simposio celebrado en California, Estados Unidos. Una base de datos se puede definir como un conjunto de informacin relacionada que se encuentra agrupada o estructurada. Desde el punto de vista de la informtica, la base de datos es un sistema formado por un conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un conjunto de programas que manipulen ese conjunto de datos. Conceptos de bases de datos: 1. Base de Datos: es la coleccin de datos aparentes usados por el sistema de aplicaciones de una determinada empresa. 2. Base de Datos: es un conjunto de informacin relacionada que se encuentra agrupada o estructurada. Un archivo por s mismo no constituye una base de datos, sino ms bien la forma en que est organizada la informacin es la que da origen a la base de datos. 3. Base de Datos: coleccin de datos organizada para dar servicio a muchas aplicaciones al mismo tiempo al combinar los datos de manera que aparezcan estar en una sola ubicacin 1 Requerimientos de las bases de datos El anlisis de requerimientos para una base de datos incorpora las mismas tareas que el anlisis de requerimientos del software. Es necesario un contacto estrecho con el cliente; es esencial la identificacin de las funciones e interfaces; se requiere la especificacin del flujo, estructura y asociatividad de la informacin y debe desarrollarse un documento formal de los requerimientos. Requerimientos administrativos: La bases de datos es una disciplina organizacional, un mtodo, ms que una herramienta o una tecnologa. Requiere de un cambio conceptual y organizacional, en funcin directa. 1. Elementos claves de organizacin en un ambiente de Bases de Datos 2. Sistema de administracin de base de datos 3. Administracin de informacin 4. Tecnologa de administracin de base de datos 5. Usuarios 6. Planeacin de informacin y tecnologa de modelaje 2 Caractersticas de las bases de datos Una base de datos contiene entidades de informacin que estn relacionadas va organizacin y asociacin.
La arquitectura lgica de una base de datos se define mediante un esquema que representa las definiciones de las relaciones entre las entidades de informacin.
La arquitectura fsica de una base de datos depende de la configuracin del hardware residente. Sin embargo, tanto el esquema (descripcin lgica como la organizacin (descripcin fsica) deben adecuarse para satisfacer los requerimientos funcionales y de comportamiento para el acceso al anlisis y creacin de informes
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. 3 Ventajas en el uso de bases de datos La utilizacin de bases de datos como plataforma para el desarrollo de Sistemas de Aplicacin en las Organizaciones se ha incrementado notablemente en los ltimos aos, se debe a las ventajas que ofrece su utilizacin, algunas de las cuales se comentarn a continuacin: 1. Globalizacin de la informacin: permite a los diferentes usuarios considerar la informacin como un recurso corporativo que carece de dueos especficos. 2. Eliminacin de informacin inconsistente: si existen dos o ms archivos con la misma informacin, los cambios que se hagan a stos debern hacerse a todas las copias del archivo de facturas. 3. Permite compartir informacin. 4. Permite mantener la integridad en la informacin: la integridad de la informacin es una de sus cualidades altamente deseable y tiene por objetivo que slo se almacena la informacin correcta. 5. Independencia de datos: el concepto de independencia de datos es quizs el que ms ha ayudado a la rpida proliferacin del desarrollo de Sistemas de Bases de Datos. La independencia de datos implica un divorcio entre programas y datos. Caractersticas de los Sistemas Gestores de Bases de Datos
Un sistema gestor de bases de datos o SGBD (aunque se suele utilizar ms a menudo las siglas DBMS procedentes del ingls, Data Base Management System) es el software que permite a los usuarios procesar, describir, administrar y recuperar los datos almacenados en una base de datos.
En estos Sistemas se proporciona un conjunto coordinado de programas, procedimientos y lenguajes que permiten a los distintos usuarios realizar sus tareas habituales con los datos, garantizando adems la seguridad de los mismos. DBMS
El xito del SGBD reside en mantener la seguridad e integridad de los datos. Lgicamente tiene que proporcionar herramientas a los distintos usuarios. Entre las herramientas que proporciona estn: Herramientas para la creacin y especificacin de los datos. As como la estructura de la base de datos. Herramientas para administrar y crear la estructura fsica requerida en las unidades de almacenamiento. Herramientas para la manipulacin de los datos de las bases de datos, para aadir, modificar, suprimir o consultar datos. Herramientas de recuperacin en caso de desastre Herramientas para la creacin de copias de seguridad Herramientas para la gestin de la comunicacin de la base de datos Herramientas para la creacin de aplicaciones que utilicen esquemas externos de los datos Herramientas de instalacin de la base de datos Herramientas para la exportacin e importacin de datos Los SGBD tienen que realizar tres tipos de funciones para ser considerados vlidos.
1-Funcin de descripcin o definicin Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Permite al diseador de la base de datos crear las estructuras apropiadas para integrar adecuadamente los datos. Esta funcin es la que permite definir las tres estructuras de la base de datos (relacionadas con sus tres esquemas). Estructura interna Estructura conceptual Estructura externa
Esta funcin se realiza mediante el lenguaje de descripcin de datos o DDL. Mediante ese lenguaje: Se definen las estructuras de datos Se definen las relaciones entre los datos Se definen las reglas que han de cumplir los datos
2-Funcin de manipulacin Permite modificar y utilizar los datos de la base de datos. Se realiza mediante el lenguaje de modificacin de datos o DML. Mediante ese lenguaje se puede: Aadir datos Eliminar datos Modificar datos Buscar datos
Actualmente se suele distinguir aparte la funcin de buscar datos en la base de datos (funcin de consulta). Para lo cual se proporciona un lenguaje de consulta de datos o DQL.
3-Funcin de control Mediante esta funcin los administradores poseen mecanismos para proteger las visiones de los datos permitidas a cada usuario, adems de proporcionar elementos de creacin y modificacin de esos usuarios. Se suelen incluir aqu las tareas de copia de seguridad, carga de ficheros, auditoria, proteccin ante ataques externos, configuracin del sistema, etc.
El lenguaje que implementa esta funcin es el lenguaje de control de datos o DCL.
El esquema siguiente presenta el funcionamiento tpico de un SGBD:
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
El esquema anterior reproduce la comunicacin entre un proceso de usuario que desea acceder a los datos y el SGBD: 1. El proceso lanzado por el usuario llama al SGBD indicando la porcin de la base de datos que se desea tratar 2. El SGBD traduce la llamada a trminos del esquema lgico de la base de datos. Accede al esquema lgico comprobando derechos de acceso y la traduccin fsica (normalmente los metadatos se guardan una zona de memoria global y no en el disco) 3. El SGBD obtiene el esquema fsico 4. El SGBD traduce la llamada a los mtodos de acceso del Sistema Operativo que permiten acceder realmente a los datos requeridos 5. El Sistema Operativo accede a los datos tras traducir las rdenes dadas por el SGBD 6. Los datos pasan del disco a una memoria intermedia o buffer. En ese buffer se almacenarn los datos segn se vayan recibiendo 7. Los datos pasan del buffer al rea de trabajo del usuario (ATU) del proceso del usuario. Los pasos 6 y 7 se repiten hasta que se enve toda la informacin al proceso de usuario. 8. En el caso de que haya errores en cualquier momento del proceso, el SGBD devuelve indicadores en los que manifiesta si ha habido errores o advertencias a tener en cuenta. Esto se indica al rea de comunicaciones del proceso de usuario. Si las indicaciones son satisfactorias, los datos de la ATU sern utilizables por el proceso de usuario. Estructuras operacionales Actualmente casi todos los sistemas gestores de base de datos poseen tambin la misma idea operacional (la misma forma de funcionar con el cliente) en la que se entiende que la base de datos se almacena en un servidor y hay una serie de clientes que pueden acceder a los datos del mismo. Las posibilidades son: Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Estructura Cliente-Servidor. Estructura clsica, la base de datos y su SGBD estn en un servidor al cual acceden los clientes. El cliente posee software que permite al usuario enviar instrucciones al SGBD en el servidor y recibir los resultados de estas instrucciones. Para ello el software cliente y el servidor deben utilizar software de comunicaciones en red. Cliente multi-servidor. Ocurre cuando los clientes acceden a datos situados en ms de un servidor. Tambin se conoce esta estructura como base de datos distribuida. El cliente no sabe si los datos estn en uno o ms servidores, ya que el resultado es el mismo independientemente de dnde se almacenan los datos. En esta estructura hay un servidor de aplicaciones que es el que recibe las peticiones y el encargado de traducirlas a los distintos servidores de datos para obtener los resultados. Cliente-Servidor con facilidades de usuario-Servidor de base de datos. Se trata de una forma de conexin por el que los clientes no conectan directamente con la base de datos sino con un intermediario (normalmente un Servidor Web) que tiene una mayor facilidad para comunicarse con los usuarios. Modelos de organizacin de la base de datos Se distinguen principalmente estos tipos:
Modelo de jerrquico de datos: Una clase de modelo lgico de bases de datos que tiene una estructura arborescente. Un registro subdivide en segmentos que se interconectan en relaciones padre e hijo y muchos ms. Los primeros sistemas administradores de bases de datos eran jerrquicos. Puede representar dos tipos de relaciones entre los datos: relaciones de uno a uno y relaciones de uno a muchos
Modelo de datos en red: Es una variacin del modelo de datos jerrquico. De hecho las bases de datos pueden traducirse de jerrquicas a en redes y viceversa con el objeto de optimizar la velocidad y la conveniencia del procesamiento. Mientras que las estructuras jerrquicas describen relaciones de muchos a muchos.
Modelo relacional de datos: Es el ms reciente de estos modelos, supera algunas de las limitaciones de los otros dos anteriores. El modelo relacional de datos representa todos los datos en la base de datos como sencillas tablas de dos dimensiones llamadas relaciones. Las tablas son semejantes a los archivos planos, pero la informacin en ms de un archivo puede ser fcilmente extrada y combinada. Es el que estudiaremos con ms detalle.
Modelo orientado a objeto: Las bases de datos orientadas a objetos, tienen una organizacin similar a la de los rboles. Donde cada nodo del rbol representa un campo y cada rbol un registro, cada tipo de nodo tiene un mtodo distinto de bsqueda. Que es equivalente a decir que todos los campos pueden ser utilizados como campos llave, pero complica el diseo. Si la base de datos es demasiado grande, o tiene relaciones demasiado complejas el grafo resultante se vuelve una maraa ininteligible.
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Bases de Datos relacionales En una computadora existen diferentes formas de almacenar informacin. Esto da lugar a distintos modelos de organizacin de la base de datos: jerrquico, red, relacional y orientada a objeto. Los sistemas relacionales son importantes porque ofrecen muchos tipos de procesos de datos, como: simplicidad y generalidad, facilidad de uso para el usuario final, perodos cortos de aprendizaje y las consultas de informacin se especifican de forma sencilla.
Las tablas son un medio de representar la informacin de una forma ms compacta y es posible acceder a la informacin contenida en dos o ms tablas. Ms adelante explicaremos que son las tablas.
Las bases de datos relacionales estn constituidas por una o ms tablas que contienen la informacin ordenada de una forma organizada. Cumplen las siguientes leyes bsicas: Generalmente, contendrn muchas tablas. Una tabla slo contiene un nmero fijo de campos. El nombre de los campos de una tabla es distinto. Cada registro de la tabla es nico. El orden de los registros y de los campos no est determinados. Para cada campo existe un conjunto de valores posible. Origen de las bases de datos relacionales
Edgar Frank Codd defini las bases del modelo relacional a finales de los 60. En 1970 publica el documento A Relational Model of data for Large Shared Data Banks (Un modelo relacional de datos para grandes bancos de datos compartidos). Actualmente se considera que ese es uno de los documentos ms influyentes de toda la historia de la informtica. Lo es porque en l se definieron las bases del llamado Modelo Relacional de Bases de Datos. Anteriormente el nico modelo terico estandarizado era el Codasyl que se utiliz masivamente en los aos 70 como paradigma del modelo en red de bases de datos.
Codd se apoya en los trabajos de los matemticos Cantor y Childs (cuya teora de conjuntos es la verdadera base del modelo relacional). Segn Codd los datos se agrupan en relaciones (actualmente llamadas tablas) que es un concepto que se refiere a la estructura que aglutina datos referidos a una misma entidad de forma independiente respecto a su almacenamiento fsico.
Lo que Codd intentaba fundamentalmente es evitar que las usuarias y usuarios de la base de datos tuvieran que verse obligadas a aprender los entresijos internos del sistema. Pretenda que los usuarios/as trabajaran de forma sencilla e independiente del funcionamiento fsico de la base de datos en s. Fue un enfoque revolucionario.
Aunque trabajaba para IBM, esta empresa no recibi de buen grado sus teoras (de hecho continu trabajando en su modelo en red IMS). De hecho fueron otras empresas (en especial Oracle) las que implementaron sus teoras. Pocos aos despus el modelo se empez a utilizar cada vez ms, hasta finalmente ser el modelo de bases de datos ms popular. Hoy en da casi todas las bases de datos siguen este modelo.
Codd persegua estos objetivos con su modelo: Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Independencia fsica. La forma de almacenar los datos, no debe influir en su manipulacin lgica. Si la forma de almacenar los datos cambia, los usuarios no tienen siquiera porque percibirlo y seguirn trabajando de la misma forma con la base de datos. Esto permite que los usuarios y usuarias se concentren en qu quieren consultar en la base de datos y no en cmo est realizada la misma. Independencia lgica. Las aplicaciones que utilizan la base de datos no deben ser modificadas porque se modifiquen elementos de la base de datos. Es decir, aadir, borrar y suprimir datos, no influye en las vistas de los usuarios. De una manera ms precisa, gracias a esta independencia el esquema externo de la base de datos es realmente independiente del modelo lgico. Flexibilidad. La base de datos ofrece fcilmente distintas vistas en funcin de los usuarios y aplicaciones. Uniformidad. Las estructuras lgicas siempre tienen una nica forma conceptual (las tablas). Sencillez. Facilidad de manejo (algo cuestionable, pero ciertamente verdadero si comparamos con los sistemas gestores de bases de datos anteriores a este modelo). Elementos de una base de datos relacional
Relacin o tabla Segn el modelo relacional (desde que Codd lo enunci) el elemento fundamental es lo que se conoce como relacin, aunque ms habitualmente se le llama tabla (o tambin array o matriz). Codd defini las relaciones utilizando un lenguaje matemtico, pero se pueden asociar a la idea de tabla (de filas y columnas) ya que es ms fcil de entender. No hay que confundir la idea de relacin segn el modelo de Codd, con lo que significa una relacin en el modelo Entidad/Relacin de Chen. No tienen nada que ver.
Las relaciones constan de: Atributos. Referido a cada propiedad de los datos que se almacenan en la relacin (nombre, dni,...). Tuplas. Referido a cada elemento de la relacin. Por ejemplo si una relacin almacena personas, una tupla representara a una persona en concreto. Puesto que una relacin se representa como una tabla; podemos entender que las columnas de la tabla son los atributos; y las filas, las tuplas.
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Tupla Cada una de las filas de la relacin. Se corresponde con la idea clsica de registro. Representa por tanto cada elemento individual de esa relacin. Tiene que cumplir que: Cada tupla se debe corresponder con un elemento del mundo real. No puede haber dos tuplas iguales (con todos los valores iguales). Dominio Un dominio contiene todos los posibles valores que puede tomar un determinado atributo. Dos atributos distintos pueden tener el mismo dominio.
Un dominio en realidad es un conjunto finito de valores del mismo tipo. A los dominios se les asigna un nombre y as podemos referirnos a ese nombre en ms de un atributo.
La forma de indicar el contenido de un dominio se puede hacer utilizando dos posibles tcnicas: Intensin. Se define el nomino indicando la definicin exacta de sus posibles valores. Por intensin se puede definir el dominio de edades de los trabajadores como: nmeros enteros entre el 16 y el 65 (un trabajador slo podra tener una edad entre 16 y 65 aos). Extensin. Se indican algunos valores y se sobreentiende el resto gracias a que se autodefinen con los anteriores. Por ejemplo el dominio localidad se podra definir por extensin as: Palencia, Valladolid, Villamuriel de Cerrato,... Adems pueden ser: Generales. Los valores estn comprendidos entre un mximo y un mnimo Restringidos. Slo pueden tomar un conjunto de valores Grado Indica el tamao de una relacin en base al nmero de columnas (atributos) de la misma. Lgicamente cuanto mayor es el grado de una relacin, mayor es su complejidad al manejarla.
Cardinalidad Nmero de tuplas de una relacin, o nmero de filas de una tabla.
Diseo de Bases de Datos Relacionales El primer paso para crear una base de datos, es planificar el tipo de informacin que se quiere almacenar en la misma, teniendo en cuenta dos aspectos: la informacin disponible y la informacin que necesitamos.
La planificacin de la estructura de la base de datos, en particular de las tablas, es vital para la gestin efectiva de la misma. El diseo de la estructura de una tabla consiste en una descripcin de cada uno de los campos que componen el registro y los valores o datos que contendr cada uno de esos campos.
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Los campos son los distintos tipos de datos que componen la tabla, por ejemplo: nombre, apellido, domicilio. La definicin de un campo requiere: el nombre del campo, el tipo de campo, el ancho del campo, etc.
Los registros constituyen la informacin que va contenida en los campos de la tabla, por ejemplo: el nombre del paciente, el apellido del paciente y la direccin de este. Generalmente los diferente tipos de campos que su pueden almacenar son los siguientes: Texto (caracteres), Numrico (nmeros), Fecha / Hora, Lgico (informaciones lgicas si/no, verdadero/falso, etc., imgenes.
En resumen, el principal aspecto a tener en cuenta durante el diseo de una tabla es determinar claramente los campos necesarios, definirlos en forma adecuada con un nombre especificando su tipo y su longitud.
En general, el objetivo del diseo de una base de datos relacional es generar un conjunto de esquemas de relaciones que permitan almacenar la informacin con un mnimo de redundancia, pero que a la vez faciliten la recuperacin de la informacin. Una de las tcnicas para lograrlo consiste en disear esquemas que tengan una forma normal adecuada. Para determinar si un esquema de relaciones tiene una de las formas normales se requiere mayor informacin sobre la empresa del "mundo real" que se intenta modelar con la base de datos. La informacin adicional la proporciona una serie de limitantes que se denominan dependencias de los datos
Antes, de hablar de formas normales y dependencias de datos es conveniente considerar los defectos que pueden tener una base de datos mal diseada.
Supongamos las siguientes relaciones:
PERSONA (DNI, NOMBRE, APELLIDOS) COCHE (MATRICULA, MARCA. TIPO, POTENCIA, COLOR) TENER (DNI, MATRICULA, FECHA, PRECIO)
Si en lugar de las anteriores relaciones que componen la BD, optsemos por una nica relacin, formada por los atributos de las tres, sta tendra los siguientes defectos:
1. En primer lugar, algunos datos sern redundantes; en general en esta relacin una persona aparecer tantas veces como coches posea. 2. Esta redundancia conlleva unos riesgos de incoherencia durante las actualizaciones: por ejemplo, si resulta que el nombre de Lpez no es Pedro sino Juan, hay que tener cuidado y actualizar todas las tuplas en las que aparece Lpez. 3. Es preciso admitir la presencia de valores nulos en una relacin de este tipo para poder mantener en la base, coches sin propietarios o personas que no tienen coches. Si muchos de los atributos no se aplican a todas las tuplas de la relacin, acabaremos con un gran nmero de nulos en esas tuplas. Esto puede originar un considerable desperdicio de espacio de almacenamiento Ej: Si slo el 10% de los empleados tiene oficinas. individuales, no se justificar incluir un atributo NUM_OFIC en la relacin EMPLEADO; ms bien, podramos crear una relacin OFICINAS_EMPL (DNIEMP, NUM_OFIC) contenga exclusivamente tuplas para los empleados con oficinas individuales). Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
Por lo tanto adems de hacerse ms complicada la actualizacin (insercin, eliminacin y modificacin), se desperdicia espacio. Uno de los objetivos en el diseo de esquemas es minimizar el espacio de almacenamiento que ocupan las relaciones base (archivos). La agrupacin de atributos en esquemas de relacin tiene un efecto significativo sobre el espacio de almacenamiento, se requiere ms.
La metodologa para el diseo de las bases de datos, est basado en las siguientes tres fases:
1. Modelado conceptual (con el modelo entidad/interrelacin 2. Diseo lgico (con las dos subfases, estndar y especfico) 3. Diseo fsico. El modelo entidad-relacin Cuando se utiliza una base de datos para gestionar informacin, se est plasmando una parte del mundo real en una serie de tablas, registros y campos ubicados en un ordenador; crendose un modelo parcial de la realidad. Antes de crear fsicamente estas tablas en el ordenador se debe realizar un modelo de datos. Se suele cometer el error de ir creando nuevas tablas a medida que se van necesitando, haciendo as el modelo de datos y la construccin fsica de las tablas simultneamente. El resultado de esto acaba siendo un sistema de informacin parcheado, con datos dispersos que terminan por no cumplir adecuadamente los requisitos necesarios. Entidades y Relaciones El modelo de datos ms extendido es el denominado ENTIDAD/RELACIN (E/R) En el modelo E/R se parte de una situacin real a partir de la cual se definen entidades y relaciones entre dichas entidades: Entidad.- Objeto del mundo real sobre el que queremos almacenar informacin (Ej: una persona). Las entidades estn compuestas de atributos que son los datos que definen el objeto (para la entidad persona seran DNI, nombre, apellidos, direccin,...). De entre los atributos habr uno o un conjunto de ellos que no se repite; a este atributo o conjunto de atributos se le llama clave de la entidad, (para la entidad persona una clave seria DNI). En toda entidad siempre hay al menos una clave que en el peor de los casos estar formada por todos los atributos de la tabla. Ya que pueden haber varias claves y necesitamos elegir una, lo haremos atendiendo a estas normas: Que sea nica. Que se tenga pleno conocimiento de ella.- Por qu en las empresas se asigna a cada cliente un nmero de cliente?. Que sea mnima, ya que ser muy utilizada por el gestor de base de datos. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Relacin.- Asociacin entre entidades, sin existencia propia en el mundo real que estamos modelando, pero necesaria para reflejar las interacciones existentes entre entidades. Las relaciones pueden ser de tres tipos: Relaciones 1-1.- Las entidades que intervienen en la relacin se asocian una a una (Ej: la entidad HOMBRE, la entidad MUJER y entre ellos la relacin MATRIMONIO). Relaciones 1-n.- Una ocurrencia de una entidad est asociada con muchas (n) de otra (Ej: la entidad EMPERSA, la entidad TRABAJADOR y entre ellos la relacin TRABAJAR-EN). Relaciones n-n.-Cada ocurrencia, en cualquiera de las dos entidades de la relacin, puede estar asociada con muchas (n) de la otra y viceversa (Ej: la entidad ALUMNO, la entidad EMPRESA y entre ellos la relacin MATRCULA). Representacin grfica de Entidades y Relaciones Para asimilar fcilmente un diseo de datos cuando se emplea el modelo E/R se utilizan los siguientes elementos grficos:
La utilizacin de estos elementos dar como resultado lo que se denomina el esquema entidad-relacin de la base de datos. Los ejemplos que se incluyen en el apartado anterior, grficamente quedaran como sigue:
Cmo se pasa del esquema E/R a las tablas? Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Para cada entidad del esquema se crear una tabla con tantos campos como atributos tenga la entidad. Ejemplo: Tabla 'TRABAJADOR' DNI NUM_SS nombre-apellidos ... 11111111 XXXXXXXXXXX Fulano de tal ... 22222222 YYYYYYYYYYY Mengano de cual ... ...... ...... ...... ...... Las relaciones 1-1 se pueden reflejar incluyendo en una de las dos tablas un campo en el que poder colocar la clave del elemento de la otra tabla con el que se est relacionado. Ese nuevo campo que se incluye en la tabla recibe el nombre de clave ajena. Ejemplo: Tabla 'HOMBRE' DNI Nombre ... 11111111 ... ... 22222222 ... ... ... ... ... Tabla 'MUJER' DNI Nombre ... DNI-ESPOSO 33333333 ... ... 11111111 44444444 ... ... (nulo) ... ... ... ... Donde el campo DNI-ESPOSO es clave ajena de la tabla HOMBRE. Aqu hay que hacer notar que el campo DNI-ESPOSO puede tomar o bien un valor nulo, en el caso de aquellas mujeres que no estn casadas, o bien el valor de alguno de los DNI de la tabla HOMBRE, en el caso de las mujeres casadas; en este segundo caso, ese DNI (la clave ajena) no se deber repetir en ningn otro registro de la tabla MUJER. Las relaciones 1-n se representan de forma muy parecida a como se ha explicado para las relaciones 1-1. La diferencia est en que ahora no es Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. indiferente donde se coloque la clave ajena, esta debe estar obligatoriamente en la tabla del 'mucho' (n); y adems, para este caso si se permitir que haya valores repetidos en dicho campo. Ejemplo: Tabla 'EMPRESA' CIF Nombre ... XX-1111-AA ... ... YY-2222-BB ... ... ... ... ... Tabla 'TRABAJADOR' DNI Nombre ... CIF 11111111 ... ... XX-1111-AA 22222222 ... ... YY-2222-BB 33333333 ... ... YY-2222-BB 44444444 ... ... XX-1111-AA ... ... ... ... Para representar las relaciones n-n en tablas lo que se hace es crear una nueva tabla solamente para la relacin. Esta nueva tabla tendr dos claves ajenas y su propia clave estar formada por la unin de las claves ajenas. Ejemplo: Tabla 'ALUMNO' DNI Nombre ... 11111111 ... ... 22222222 ... ... ... ... ... Tabla 'ASIGNATURA' COD-ASIGNATURA Nombre ... 01 ... ... Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. 02 ... ... ... ... ... Tabla 'MATRCULA'(esta es la relacin) DNI COD_ASIGNATURA NOTA 11111111 01 7.5 11111111 02 6.25 22222222 01 5.5 22222222 02 8 ... ... ... En la tabla MATRCULA es donde se refleja la relacin. La clave de dicha tabla est formada por los campos DNI y COD-ASIGNATURA ; y cada uno de ellos es clave ajena, el primero de ALUMNO y el segundo de ASIGNATURA. Hacer ver aqu que la tabla MATRICULAS puede tener ms campos adems de los que son clave ajena como ocurre en el ejemplo; la tabla aade adems un campo NOTA. Ejemplo de una Universidad Creacin de Tablas Tabla Alumno En una Universidad, si tenemos la entidad Alumno que definimos como: Tabla ALUMNO(DNI, Nombre, Apellido1, Apellido2, Telefono, Calle, Ciudad, Provincia, FNacimiento, EstadoCivil) CP: DNI Creando la tabla en vista "Diseo" obtenemos:
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Tabla Asignatura Y la entidad Asignatura definida como: ASIGNATURA(Codigo, Nombre, Creditos, Dni_prof, Observaciones) CP:Codigo Tabla Matricula Y sabiendo que un alumno se puede matricular de muchas asignaturas y que una asignatura a su vez puede tener muchos alumnos matriculados, podemos definir entre ambas entidades la relacin (n-m) matricula como: MATRICULA(DNI, Codigo_asig, Fecha, Nota) CP:DNI,Codigo_asig,Fecha Y la tabla quedara como:
Creacin de Relaciones Agregamos las tablas (Alumno,Asignatura y Matricula) Que son:
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Y por ltimo slo falta arrastrar los campos relacionados de la tabla con la relacin 1 a la tabla con la relacin muchos, es decir crear las relaciones, en las que seleccionaremos siempre:
Exigir Integridad Referencial Actualizar en cascada los campos relacionados Eliminar en cascada los registros relacionados En el caso de Alumno-Matricula (1 Alumno.DNI se puede repetir n veces en Matricula.DNI) arrastramos el Alumno.DNI sobre la Matricula.DNI:
Y si repetimos la misma operacin entre Asignatura.Codigo y Matricula.Codigo_asig queda el esquema E-R en Access segn se muestra en la figura siguiente: Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
Normalizacin de una base de datos
1. Descomposicin y Normalizacin
Siempre que un analista de sistemas de base de datos arma una base de datos, queda a su cargo descomponer dicha base en grupos y segmentos de registros. Este proceso es la descomposicin; el mismo es necesario independientemente de la arquitectura de la base de datos - relacional, red o jerrquica-. Sin embargo, para la base de datos relacional, la accin correspondiente puede dividirse y expresarse en trminos formales y se denomina normalizacin a la misma.
La normalizacin convierte una relacin en varias subrelaciones, cada una de las cuales obedece a reglas. Estas reglas se describen en trminos de dependencia. Una vez que hayamos examinado las distintas formas de dependencia, encontraremos procedimientos a aplicar a las relaciones de modo tal que las mismas puedan descomponerse de acuerdo a la dependencia que prevalece. Esto no llevar indefectiblemente a formar varias subrelaciones a partir de la nica relacin preexistente.
En definitiva, la normalizacin es el proceso de organizar los datos de una base de datos. Se incluye la creacin de tablas y el establecimiento de relaciones entre ellas segn reglas diseadas tanto para proteger los datos como para hacer que la base de datos sea ms flexible al eliminar la redundancia y las dependencias incoherentes.
Los datos redundantes desperdician el espacio de disco y crean problemas de mantenimiento. Si hay que cambiar datos que existen en ms de un lugar, se deben cambiar de la misma forma exactamente en todas sus ubicaciones. Un cambio en la direccin de un cliente es mucho ms fcil de implementar si los datos slo se almacenan en la tabla Clientes y no en algn otro lugar de la base de datos. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
Qu es una "dependencia incoherente"? Aunque es intuitivo para un usuario mirar en la tabla Clientes para buscar la direccin de un cliente en particular, puede no tener sentido mirar all el salario del empleado que llama a ese cliente. El salario del empleado est relacionado con el empleado, o depende de l, y por lo tanto se debera pasar a la tabla Empleados. Las dependencias incoherentes pueden dificultar el acceso porque la ruta para encontrar los datos puede no estar o estar interrumpida.
Hay algunas reglas en la normalizacin de una base de datos. Cada regla se denomina una "forma normal". Si se cumple la primera regla, se dice que la base de datos est en la "primera forma normal". Si se cumplen las tres primeras reglas, la base de datos se considera que est en la "tercera forma normal". Aunque son posibles otros niveles de normalizacin, la tercera forma normal se considera el mximo nivel necesario para la mayor parte de las aplicaciones.
Al igual que con otras muchas reglas y especificaciones formales, en los escenarios reales no siempre se cumplen los estndares de forma perfecta. En general, la normalizacin requiere tablas adicionales y algunos clientes consideran ste un trabajo considerable. Si decide infringir una de las tres primeras reglas de la normalizacin, asegrese de que su aplicacin se anticipa a los problemas que puedan aparecer, como la existencia de datos redundantes y de dependencias incoherentes. Primera forma normal Elimine los grupos repetidos de las tablas individuales. Cree una tabla independiente para cada conjunto de datos relacionados. Identifique cada conjunto de datos relacionados con una clave principal. No use varios campos en una sola tabla para almacenar datos similares. Por ejemplo, para realizar el seguimiento de un elemento del inventario que proviene de dos orgenes posibles, un registro del inventario puede contener campos para el Cdigo de proveedor 1 y para el Cdigo de proveedor 2.
Qu ocurre cuando se agrega un tercer proveedor? Agregar un campo no es la respuesta, requiere modificaciones en las tablas y el programa, y no admite fcilmente un nmero variable de proveedores. En su lugar, coloque toda la informacin de los proveedores en una tabla independiente denominada Proveedores y despus vincule el inventario a los proveedores con el nmero de elemento como clave, o los proveedores al inventario con el cdigo de proveedor como clave.
Segunda forma normal Cree tablas independientes para conjuntos de valores que se apliquen a varios registros. Relacione estas tablas con una clave externa. Los registros no deben depender de nada que no sea una clave principal de una tabla, una clave compuesta si es necesario. Por ejemplo, considere la direccin de un cliente en un sistema de contabilidad. La direccin se necesita en la tabla Clientes, pero tambin en las tablas Pedidos, Envos, Facturas, Cuentas por cobrar y Colecciones. En lugar de almacenar la direccin de un cliente como una entrada independiente en cada una de estas tablas, almacnela en un lugar, ya sea en la tabla Clientes o en una tabla Direcciones independiente.
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Tercera forma normal Elimine los campos que no dependan de la clave. Los valores de un registro que no sean parte de la clave de ese registro no pertenecen a la tabla. En general, siempre que el contenido de un grupo de campos pueda aplicarse a ms de un nico registro de la tabla, considere colocar estos campos en una tabla independiente. Por ejemplo, en una tabla Contratacin de empleados, puede incluirse el nombre de la universidad y la direccin de un candidato. Pero necesita una lista completa de universidades para enviar mensajes de correo electrnico en grupo. Si la informacin de las universidades se almacena en la tabla Candidatos, no hay forma de enumerar las universidades que no tengan candidatos en ese momento. Cree una tabla Universidades independiente y vinclela a la tabla Candidatos con el cdigo de universidad como clave.
EXCEPCIN: cumplir la tercera forma normal, aunque en teora es deseable, no siempre es prctico. Si tiene una tabla Clientes y desea eliminar todas las dependencias posibles entre los campos, debe crear tablas independientes para las ciudades, cdigos postales, representantes de venta, clases de clientes y cualquier otro factor que pueda estar duplicado en varios registros. En teora, la normalizacin merece el trabajo que supone. Sin embargo, muchas tablas pequeas pueden degradar el rendimiento o superar la capacidad de memoria o de archivos abiertos.
Puede ser ms factible aplicar la tercera forma normal slo a los datos que cambian con frecuencia. Si quedan algunos campos dependientes, disee la aplicacin para que pida al usuario que compruebe todos los campos relacionados cuando cambie alguno.
Otras formas de normalizacin La cuarta forma normal, tambin llamada Forma normal de Boyce Codd (BCNF, Boyce Codd Normal Form), y la quinta forma normal existen, pero rara vez se consideran en un diseo real. Si no se aplican estas reglas, el diseo de la base de datos puede ser menos perfecto, pero no debera afectar a la funcionalidad.
Normalizar una tabla de ejemplo Estos pasos demuestran el proceso de normalizacin de una tabla de alumnos ficticia.
Tabla sin normalizar:
Primera forma normal: no hay grupos repetidos. Las tablas slo deben tener dos dimensiones. Puesto que un alumno tiene varias clases, estas clases deben aparecer en una tabla independiente. Los campos Clase1, Clase2 y Clase3 de los registros anteriores son indicativos de un problema de diseo.
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
Segunda forma normal: eliminar los datos redundantes
Observe los diversos valores de N clase para cada valor de N alumno en la tabla anterior. N clase no depende funcionalmente de N alumno (la clave principal), de modo que la relacin no cumple la segunda forma normal.
Las dos tablas siguientes demuestran la segunda forma normal:
Alumnos
Registro
Tercera forma normal: eliminar los datos no dependientes de la clave
Alumnos: Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
Personal:
En el ltimo ejemplo, Despacho-Tut (el nmero de despacho del tutor) es funcionalmente dependiente del atributo Tutor. La solucin es pasar ese atributo de la tabla Alumnos a la tabla Personal, segn se muestra a continuacin:
Ejercicio prctico Tenemos una empresa pblica donde los puestos de trabajo estn regulados por el Estado, de modo que las condiciones salariales estn determinadas por el puesto. Se ha creado el siguiente esquema relacional EMPLEADOS (nss, nombre, puesto, salario, emails) con nss como clave primaria.
1. Normalizar esta tabla explicando cada paso. 2. Realiza el modelo entidad relacin para la tabla empleados y supn que hay tres tablas ms, empresa, almacn y vehculo. Imagina que eres el gerente de una empresa de paquetera y logstica con todos los problemas y tareas que eso implica. Inventa en base a ese supuesto que campos pondras a las tres nuevas tablas y justifcalos. 3. Realiza el diagrama entidad-relacin que correspondera y explica las dependencias y las claves externas
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Practica N.0: PHP: MySQL y acceso a una base de datos Resumen Aprender a administrar una base de datos con MySQL. Conocer algunas herramientas que ayudan a administrar una base de datos de MySQL. Aprender a acceder a una base de datos desde PHP. Aprender a realizar una consulta SELECT y mostrar el resultado en una pgina web. Contenido 1. Objetivos 2. Qu tengo que hacer? 3. Cmo lo hago? 4. Recomendaciones 5. Recursos Objetivos Aprender a administrar una base de datos con MySQL. Conocer algunas herramientas que ayudan a administrar una base de datos de MySQL. Aprender a acceder a una base de datos desde PHP. Aprender a realizar una consulta SELECT y mostrar el resultado en una pgina web.
Qu tengo que hacer? MySQL es el sistema gestor de bases de datos de cdigo abierto ms popular en la actualidad. MySQL est disponible para distintos sistemas operativos, como Linux, Mac OS X, Solaris, Windows y otros ms. MySQL es muy popular en el desarrollo de aplicaciones web, ya que forma parte como sistema gestor de bases de datos de las plataformas LAMP, BAMP, MAMP y WAMP. En esta prctica tienes que crear una base de datos en MySQL para almacenar los datos que emplea el sitio web. La base de datos se tiene que llamar "pibd" y tiene que tener las siguientes tablas (se indica el tipo de dato ms apropiado para cada columna, pero se puede cambiar segn la necesidad de cada uno): Tabla Usuarios IdUsuario : entero, autoincremento y clave primaria. NomUsuario : texto (longitud mxima 15 caracteres) y valor nico. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Clave : texto (longitud mxima 15 caracteres). Email : texto. Sexo : entero pequeo. FNacimiento : fecha. Ciudad : texto; no se relaciona con una tabla porque los nombres de todas las ciudades del mundo es imposible de conocer. Pais : entero y clave ajena a Paises. Foto : texto; contiene el nombre y quizs la ruta del fichero que almacena la foto, el uso de este campo depende de la implementacin que realice el alumno. FRegistro : marca de tiempo (fecha y hora); fecha de registro en el sistema del usuario. Tabla Paises IdPais : entero, autoincremento y clave primaria. NomPais : texto. Tabla Albumes IdAlbum : entero, autoincremento y clave primaria. Titulo : texto. Descripcion : texto. Fecha : fecha; fecha en el que fueron tomadas las fotografas del lbum, si es un perodo de tiempo se puede poner la fecha del primer da o dejar en blanco. Pais : entero y clave ajena a Paises; pas en el que se tomaron las fotos, si son varios se puede dejar en blanco. Usuario : entero y clave ajena a Usuarios. Tabla Fotos IdFoto : entero, autoincremento y clave primaria. Titulo : texto. Fecha : fecha; fecha en la que fue tomada la foto, se puede dejar en blanco. Pais : entero y clave ajena a Paises; pas en el que se tomo la foto, se puede dejar en blanco. Album : entero y clave ajena a Albumes. Fichero : texto; contiene el nombre y quizs la ruta del fichero que almacena la foto, el uso de este campo depende de la implementacin que realice el alumno. FRegistro : marca de tiempo (fecha y hora); fecha de registro en el sistema de la foto, se emplea para mostrar las ltimas cinco fotos introducidas. Nota: este diseo de la base de datos se ver modificado en prcticas posteriores cuando se incorporen algunas funcionalidades adicionales. El mantenimiento de la tabla Paises se realiza directamente a travs de la base de datos: los datos se introducen directamente en la tabla. Respecto a las otras tablas, el mantenimiento se realizar en una prxima prctica, pero por ahora introduce los datos directamente en las tablas para poder hacer pruebas. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Adems, tienes que modificar las siguientes pginas (Figura 1) para que realicen la consulta SELECT correspondiente y visualicen el resultado obtenido (sustituye los datos estticos que tengas en las pginas web por los datos devueltos por la base de datos): Pgina principal Contiene un listado con un resumen (foto, ttulo, fecha, pas) de las ltimas cinco fotos que se han introducido. Pgina con el formulario de registro como nuevo usuario En la lista desplegable para seleccionar el pas, mostrar los pases a partir de la tabla Paises de la base de datos. Pgina con el formulario de bsqueda En la lista desplegable para seleccionar el pas, mostrar los pases a partir de la tabla Paises de la base de datos. Pgina con el listado resultado de una bsqueda A partir de los datos recibidos desde la [Pgina con el formulario de bsqueda] (ttulo, fecha y/o pas) debe realizar una bsqueda en la tabla Fotos y mostrar el resultado obtenido. Pgina detalle foto Muestra toda la informacin sobre una foto seleccionada en la pgina anterior (foto, ttulo, fecha, pas, lbum de fotos y usuario al que pertenece). Pgina control de acceso Controla el acceso a la parte privada para los usuarios registrados (los que figuran en la tabla Usuarios). Si el usuario est registrado, mediante una redireccin en la parte del servidor se debe mostrar la pgina con el men de usuario registrado; si el usuario no est registrado, mediante una redireccin en la parte del servidor se debe mostrar la pgina principal del sitio web. Pgina "Crear lbum" En la lista desplegable para seleccionar el pas, mostrar los pases a partir de la tabla Paises de la base de datos. Pgina "Mis lbumes" Muestra un listado con todos los lbumes del usuario. Pgina "Ver lbum" Desde la [Pgina "Mis lbumes"], muestra todas las fotos que contiene un lbum. Pgina "Aadir foto a lbum" Contiene un formulario con los datos necesarios para aadir una foto (ttulo, fecha, pas, foto y lbum al que se aade la foto). Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 1: Diagrama de pginas que componen el sitio web Cmo lo hago? Creacin de la base de datos desde la lnea de comandos Para crear la base de datos en MySQL tienes diferentes alternativas. Por un lado, puedes acceder a MySQL a travs de MySQL monitor que se encuentra en el directorio \xampp\mysql\bin . En la Figura 2 podemos ver una sesin de ejecucin con los siguientes comandos: mysql -u root : inicia la conexin a la base de datos con el usuario root. show databases; : muestra las bases de datos que existen. use library; : selecciona una base de datos. show tables; : muestra las tablas que existen en la base de datos. describe books; : muestra el esquema de la tabla. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 2: Acceso a MySQL desde la lnea de comandos Para crear la base de datos debemos emplear el lenguaje de definicin de datos (Data Definition Language, DDL) de SQL que permite definir las estructuras de la base de datos que almacenarn los datos. En concreto, los comandos SQL ms importantes que se utilizan para crear y mantener una base de datos son: CREATE DATABASE : crea una base de datos con el nombre dado. DROP DATABASE : borra todas las tablas en la base de datos y borra la base de datos. CREATE TABLE : crea una tabla con el nombre dado. ALTER TABLE : permite cambiar la estructura de una tabla existente. DROP TABLE : borra una o ms tablas. Adems, MySQL es un sistema gestor de bases de datos que funciona con usuarios y permisos. Cuando se realiza una conexin a Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. una base de datos desde una pgina web se debe emplear un usuario especial para reducir los riesgos de seguridad y evitar que un usuario malintencionado pueda modificar o incluso eliminar toda una base de datos. El usuario para conectarse desde una pgina web debe tener otorgados nicamente los permisos para manipular los datos ( SELECT, INSERT, UPDATE y DELETE ) y NO los permisos para cambiar la estructura ( CREATE, ALTER , etc.) o administrar ( GRANT, SHUTDOWN , etc.) la base de datos. En MySQL se puede crear una cuenta de usuario de tres formas: Usando el comando GRANT . Manipulando las tablas de permisos de MySQL directamente. Usar uno de los diversos programas proporcionados por terceras partes que ofrecen capacidades para administradores de MySQL, como phpMyAdmin. Desde la lnea de comandos el mtodo preferido es usar el comando GRANT , ya que es ms conciso y menos propenso a errores que manipular directamente las tablas de permisos de MySQL. Por ejemplo, las siguientes instrucciones crean un nuevo usuario llamado wwwdata con contrasea abc , que slo se puede usar cuando se conecte desde el equipo local ( localhost ) y le otorga nicamente los permisos SELECT, INSERT, UPDATE y DELETE sobre todas las bases de datos alojadas en el servidor: # Crea un nuevo usuario CREATE USER 'wwwdata'@'localhost' IDENTIFIED BY 'abc'; # Otorga los permisos para poder manipular los datos # sobre todas las bases de datos (*.*) GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'wwwdata'@'localhost' IDENTIFIED BY 'abc' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; # Recarga los permisos de las tablas (en principio, no es necesario porque # GRANT debe hacerlo de forma automtica) FLUSH PRIVILEGES; Una ver creado un usuario, podemos consultar sus permisos con el comando SHOW GRANTS , tal como podemos ver en la Figura 3. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 3: Privilegios de un usuario en MySQL Desde la lnea de comandos tambin se pueden ejecutar otros programas, como mysqladmin , mysqlcheck , mysqldump o mysqlshow . Creacin de la base de datos desde phpMyAdmin phpMyAdmin es una herramienta escrita en PHP que permite la administracin de una base de datos de MySQL a travs de pginas web, ya sea en local o de forma remota a travs de Internet. Es un desarrollo de cdigo abierto y est disponible bajo la licencia GPL. En la Figura 4 podemos ver la pantalla principal de la aplicacin. En el panel de la izquierda aparecen las bases de datos que existen y entre parntesis se indica el nmero de tablas que posee cada base de datos. En la parte principal de la pantalla se indica la versin del servidor de MySQL y el usuario que se est empleando para conectarse. En XAMPP, por defecto se emplea el usuario "root" sin contrasea, lo que supone una vulnerabilidad del sistema ya que facilita un posible ataque. Para evitarlo, es conveniente asignar una contrasea al usuario "root" en MySQL y configurar la contrasea para phpMyAdmin en el fichero config.inc.php . Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 4: Pgina principal de phpMyAdmin Adems, en la pgina principal existen varias funciones, como crear una nueva base de datos, modificar los privilegios o importar y exportar el esquema y los datos de una base de datos. Desde la pantalla principal se puede crear una nueva base de datos. Una vez creada, aparece la pantalla que podemos ver en la Figura 5; en esta pantalla se visualiza la sentencia SQL que ha creado la base de datos y se puede indicar el nombre para una nueva tabla en la base de datos recin creada. En este ltimo caso, tambin hay que indicar el nmero de campos (columnas) que se quiere que tenga la tabla; ms adelante se pueden aadir ms campos en cualquier momento. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 5: Creacin de una nueva base de datos en phpMyAdmin En la Figura 6 podemos ver la pantalla de creacin de una nueva tabla con dos campos. En esta pantalla se tiene que indicar la definicin de cada campo (columna) de la tabla, como el nombre del campo, el tipo de dato, si admite valor nulo, si es clave primaria, etc. Esta pantalla cambia de aspecto segn el nmero de campos que tenga la tabla; por ejemplo, en la Figura 7 podemos ver la misma pantalla pero cuando una tabla posee siete campos, en vez de una disposicin vertical la definicin de los campos adquiere una disposicin horizontal. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 6: Creacin de una nueva tabla en phpMyAdmin Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 7: Creacin de una nueva tabla en phpMyAdmin Adems, se tiene que seleccionar el motor de almacenamiento para la tabla. MySQL permite seleccionar diferentes motores de almacenamiento. La principal diferencia entre los distintos motores reside en el soporte de las transacciones, el manejo de las claves ajenas y el particionamiento de las tablas. En la Figura 8 podemos ver la pantalla de respuesta que aparece al crear una nueva tabla. En esta pantalla figura la sentencia SQL de creacin de la tabla y tambin se puede modificar la estructura de la tabla recin creada. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 8: Creacin de una nueva tabla en phpMyAdmin Una vez creada una tabla se pueden insertar datos en la misma. Para ello se emplea la opcin Insertar que muestra un formulario como el de la Figura 9. En este formulario aparecen todos los campos que componen una tabla y para cada campo se indica su tipo de dato. Cuando un campo es de tipo autoincremento la base de datos le asignar un valor de forma automtica, pero de todas formas aparecer en el formulario de insercin, por lo que se debe dejar vaco. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 9: Insercin de datos en una tabla en phpMyAdmin Por ltimo, y tal como se ha explicado en el apartado anterior, se debe emplear un usuario especfico para conectarse desde una pgina web, que tenga otorgados nicamente los permisos para manipular los datos ( SELECT, INSERT, UPDATE y DELETE ). En la Figura 10 podemos ver la pantalla de la opcin Privilegios, donde se muestran todos los usuarios que existen y los permisos que poseen. Desde esta pantalla se puede acceder a la funcin agregar un nuevo usuario que vemos en laFigura 11. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 10: Privilegios en phpMyAdmin Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 11: Agregar un nuevo usuario en phpMyAdmin Acceso a la base de datos desde PHP Desde PHP se puede acceder fcilmente a una base de datos en MySQL empleando las ms de 50 funciones que existen. Las principales funciones que se emplean para acceder a una base de datos son: mysql_connect(servidorBD, usuario, contrasea) : abre una conexin con un servidor de bases de datos de MySQL, devuelve un identificador que se emplea en algunas de las siguientes funciones o FALSE en caso de error. mysql_close(identificador) : cierra una conexin con un servidor de MySQL, devuelve TRUE en caso de xito y FALSE en caso contrario. mysql_ping(identificador) : verifica que la conexin con el servidor de bases de datos funciona, devuelve TRUE en caso de xito y FALSE en caso contrario. mysql_select_db(nombreBD, identificador) : selecciona una base de datos, devuelve TRUE en caso de xito y FALSE en caso contrario. mysql_query(sentencia, identificador) : ejecuta una sentencia SQL y devuelve un resultado ( SELECT, SHOW, EXPLAIN o DESCRIBE , ...) Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. o TRUE ( INSERT, UPDATE, DELETE , ...) si todo es correcto, o FALSE en caso contrario. mysql_fecth_array(resultado) : recorre un resultado, devuelve un array que representa una fila (registro) o FALSE en caso de error (por ejemplo, llegar al final del resultado); al array se puede acceder de forma numrica (posicin de la columna) o asociativa (nombre de la columna). mysql_fetch_assoc(resultado) y mysql_fetch_row(resultado) : ambas funciones son similares a la anterior mysql_fecth_array(resultado) , pero slo permiten el acceso como array asociativo o con ndices numricos respectivamente. mysql_affected_rows(identificador) : devuelve el nmero de filas (tuplas) afectadas por la ltima operacin si fue del tipo INSERT, UPDATE , etc., que no devuelven un resultado. mysql_num_rows(resultado) : devuelve el nmero de filas (tuplas) afectadas por la ltima operacin si fue del tipo SELECT . mysql_free_result(resultado) : libera la memoria ocupada por un resultado; en principio, se libera automticamente al finalizar la pgina, es necesario si en una misma pgina se realizan varias consultas con resultados muy grandes. El siguiente ejemplo muestra como visualizar todo el contenido de una tabla en una pgina web. En concreto, se conecta al servidor local con el usuario wwwdata sin contrasea, selecciona la base de datos biblioteca, recupera todo el contenido de la tabla libros y muestra los campos Titulo y Resumen : <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Prueba de SELECT y MySQL</title> </head> <body> <?php // Se conecta al SGBD if(!($iden = mysql_connect("localhost", "wwwdata", ""))) die("Error: No se pudo conectar"); Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido.
// Selecciona la base de datos if(!mysql_select_db("biblioteca", $iden)) die("Error: No existe la base de datos");
// Sentencia SQL: muestra todo el contenido de la tabla "books" $sentencia = "SELECT * FROM libros"; // Ejecuta la sentencia SQL $resultado = mysql_query($sentencia, $iden); if(!$resultado) die("Error: no se pudo realizar la consulta");
// Libera la memoria del resultado mysql_free_result($resultado);
// Cierra la conexin con la base de datos mysql_close($iden); ?> </body> </html> El siguiente ejemplo es similar al anterior, pero emplea una funcin llamada sql_dump_result(resultado) que visualiza todo el contenido del resultado de una consulta SELECT en forma de tabla de HTML, sin Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. tener que indicar uno a uno los campos que componen el resultado; adems, la primera fila de la tabla creada contiene los nombres de los campos a modo de encabezados de las columnas de la tabla: <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Prueba de SELECT y MySQL</title> </head> <body> <?php // Devuelve todas las filas de una consulta a una tabla de una base de da tos // en forma de tabla de HTML function sql_dump_result($result) { $line = ''; $head = '';
return '<table>' . $head . $line . '</table>'; Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. }
// Se conecta al SGBD if(!($iden = mysql_connect("localhost", "wwwdata", ""))) die("Error: No se pudo conectar");
// Selecciona la base de datos if(!mysql_select_db("biblioteca", $iden)) die("Error: No existe la base de datos");
// Sentencia SQL: muestra todo el contenido de la tabla "books" $sentencia = "SELECT * FROM libros"; // Ejecuta la sentencia SQL $resultado = mysql_query($sentencia, $iden); if(!$resultado) die("Error: no se pudo realizar la consulta");
// Muestra el contenido de la tabla como una tabla HTML echo sql_dump_result($resultado);
// Libera la memoria del resultado mysql_free_result($resultado);
// Cierra la conexin con la base de datos mysql_close($iden); ?> </body> </html>
Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Recomendaciones Recuerda que las pginas que contengan cdigo PHP tienen que tener la extensin .php . Si modificas alguna pgina web que ya tengas hecha de prcticas anteriores para aadirle cdigo PHP, tendrs que cambiarle la extensin y corregir todos los enlaces que apunten a esa pgina. La pgina web Build Your Own Database Driven Website Using PHP & MySQL explica en cuatro partes (Introduction, The Database Server, PHP server-side scripting language y Displaying Information on a Web page) cmo construir un sitio web con informacin procedente de una base de datos en MySQL. Recuerda: nunca te conectes a una base de datos con el usuario "root" desde una pgina web. Emplea un usuario especfico que tenga el mnimo posible de permisos. Por ejemplo, si en una pgina web slo necesitas mostrar el contenido de las tablas de una base de datos, pero no necesitas actualizar o insertar nuevos datos, utiliza un usuario que slo tenga el permiso SELECT sobre esa base de datos. De este modo reducirs los posibles problemas de seguridad. Fjate que en varias pginas se pide en la lista desplegable para seleccionar el pas, mostrar los pases a partir de la tabla paises de la base de datos. Cuando una parte de una pgina web se repita en varias pginas, lo mejor es aislar el cdigo comn en un fichero independiente e incluirlo en aquellos puntos donde haga falta. Utiliza esta misma tcnica para almacenar en un fichero independiente los datos necesarios para establecer la conexin con la base de datos; de este modo, si algo cambia, slo lo tendrs que cambiar en un fichero. Aunque no se pide implementarlo en esta prctica, cuando se muestra un listado a partir de una consulta a una base de datos y no existe un lmite para el nmero de resultados devueltos es conveniente mostrar el listado paginado para evitar que se devuelva una pgina web enorme que aumente su tiempo de transmisin y dificulte su lectura. Te atreves a hacerlo? El manual de MySQL te lo puedes descargar en diferentes formatos de su sitio web para tenerlo siempre a mano y poder hacer las bsquedas de informacin rpidamente. Cuando lo descargues, elige la versin correspondiente a tu servidor de MySQL. Si quieres guardar una copia de seguridad de una base de datos, puedes emplear la opcin Exportar de phpMyAdmin que se muestra en la Figura 12. Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. Figura 12: Exportar desde phpMyAdmin
Recursos Qu tipos de datos admite MySQL? Qu funciones existen en MySQL? MySQL Developer Zone : sitio web oficial de MySQL con informacin para desarrolladores. MySQL Cheat Sheet : resumen de los tipos de datos y de las diversas funciones (de fecha y hora, matemticas, etc.) disponibles en MySQL. Tambin incluye una lista de las funciones disponibles en PHP para conectarse a MySQL y ejemplos de la consulta SELECT. MySQL Cheat Sheet : resumen de los principales comandos de MySQL. MySQL Quick Reference : gua de referencia rpida de lo ms importante de MySQL (tipos de datos, funciones para usar en sentencias SELECT y WHERE, lenguaje de definicin de datos, lenguaje de manipulacin de datos, comandos de usuario y comandos de transacciones y bloqueos). Introduccin a Bases de Datos II
Docente: Ing. Arturo Diaz Pulido. MySQL Reference Sheet : resumen de los tipos de datos y funciones de MySQL. Qu es el lenguaje SQL? Qu sintaxis tiene el lenguaje SQL? SQL : definicin en la Wikipedia del lenguaje SQL. W3Schools : cursos de aprendizaje y guas de referencia de diversas tecnologas empleadas en la programacin web. Incluye un tutorial y temas avanzados sobre SQL. SQLCourse : sencillo tutorial sobre el lenguaje SQL. SQL Cheat : resumen de las sentencias principales del lenguaje SQL. Qu herramientas existen para trabajar con MySQL? phpMyAdmin : permite crear y gestionar una base de datos en MySQL a travs de una pgina web. phpMinAdmin : script escrito en PHP en un solo fichero que permite administrar una base de datos en MySQL, similar a phpMyAdmin, pero no es tan potente ni tan complejo. MySQL GUI Tools : incluye las herramientas MySQL Administrator 1.2, MySQL Query Brow-ser 1.2 y MySQL Migration Toolkit 1.1. MySQL Workbench : herramienta visual que permite disear, gestionar y documentar una base de datos en MySQL. Qu funciones se emplean en PHP para acceder a MySQL? PHP MySQL : documentacin oficial del uso de MySQL desde PHP. PHP MySQL Introduction : tutorial de W3Schools sobre el uso de una base de datos de MySQL desde PHP. Existe algn peligro cuando se accede a una base de datos desde una pgina web? Inyeccin SQL : definicin en la Wikipedia de este tipo de vulnerabilidad informtica. Inyeccin de SQL : explica qu es la inyeccin de SQL y algunas tcnicas de proteccin con PHP. SQL Injection Cheat Sheet : resumen de algunos mtodos de inyeccin de SQL para distintos sistemas gestores de bases de datos.