BASE DE DATOS
1 - Introducción a las bases de datos
A lo largo de los siguientes capítulos vamos a intentar conocer como funciona MySql. Estos apuntes no quieren ser exhaustivos a la hora de estudiar aspectos de diseño, estructura y evaluación de las bases de datos. Serán una aproximación para entender como funciona MySql y por ende, como funcionan nuestros foros de phpBB y los portales relacionados con ellos. Trataremos conceptos muy básicos que os servirán como apoyo a todos aquellos que queráis profundizar más tarde en este tema. Cualquier duda que os surja durante el estudio de estos apuntes podéis planterarla en los foros
Para sacarle el máximo partido a estos apuntes tendréis que tener acceso al phpMyAdmin, la interfaz gráfica de vuestra base de datos. No tendría ningún sentido que si pretendemos saber como funciona MySql, no experimentásemos directamente con el administrador de nuestra base de datos. Experimentar es la única manera de aprender.
2 - Tipos de Gestores de Bases de Datos
Un gestor de base de datos o sistema de gestión de base de datos (SGBD o DBMS) es un software que permite introducir, organizar y recuperar la información de las bases de datos; en definitiva, administrarlas. Existen distintos tipos de gestores de bases de datos: relacional, jerárquico, red,... El modelo relacional es el utilizado por casi todos los gestores de bases de datos para PC´s. El modelo relacional (SGBDR) es un software que almacena los datos en forma de tablas
CARACTERÍSTICAS GENERALES DE LOS SISTEMAS GESTORES DE B.D.
Aunque hay multitud de aplicaciones para la Gestión de Bases de Datos diferentes en características y precios, podemos encontrar aspectos comunes en todos ellos:
• Aceptan definiciones de esquemas y vistas (definición de diferentes bases de datos).
• Manipulan los datos siguiendo las órdenes de los usuarios.
• Cuidan que se respete la seguridad e integridad de los datos.
• Permiten definir usuarios y las restricciones de acceso para cada uno de ellos.
• Controlan la concurrencia y las operaciones asociadas a la recuperación de los fallos.
3 - Elementos
"Una base de datos está formada por:Los datos: Que deben ser INTEGRADOS, es decir, que en la unión de los archivos que forman el sistema no exista redundancia de datos Veamos el ejemplo de la gestión de los libros de una biblioteca. Seguramente la imagen de abajo os será familiar: Una ficha con datos de un libro, una ficha con datos de un lector y una ficha mostrando el listado de lecturas de un libro, esa ficha que nos entregan junto al libro cuándo nos lo prestan en la bibliotecaSi hacemos un listado con el nombre de los campos que hemos introducido en esas fichas obtendríamos: //++
++//TítuloAutorEditorialAñoIdiomaLectorFecha pdevoluciónNombreApellidosDomicilioTeléfonoDNINotad que he omitido las referencias : Ref_libro y Ref_lector , son datos particulares de los que hablaremos específicamente más adelante.
Las principales ventajas de las bases de datos sobre los ficheros clásicos son ://++
++//Control centralizado: lo ostenta el administrador de la B.D.Reducción de redundancias.Eliminación de inconsistencias.Los datos pueden compartirse.Los estándares se mantienen.Mayor seguridad.Mayor facilidad en el chequeo de errores.Equilibran requerimientos opuestos.Independencia de datos.Se dice que una aplicación es dependiente de los datos si es imposible alterar la estructura de almacenamiento o la técnica de acceso sin afectar a la aplicación. En un sistema de bases de datos no es recomendable tener aplicaciones dependientes de los datos por dos razones principales://++
++//a) Cada aplicación puede requerir una vista diferente de los mismos datos.
El administrador de la B.D. ha de tener libertad para modificar la estructura de almacenamiento o las técnicas de acceso (o las dos cosas) para adaptarla al cambio de los requerimientos sin tener que modificar las aplicaciones ya existentes.Por ejemplo, podemos tres aplicaciones funcionando con la misma base de datos://++
++//.
4 - Clave principal o Primary Key
Los datos operativos están formados por los ítems de datos superiores reconocidos por un nombre y estas entidades tienen unos atributos. Las entidades se componen de atributos que son todo aquello que puede tomar un valor en un dominio fijo. Para pasar de una entidad a otra se hace mediante conexiones basadas en atributos compartidos que le van a dar un carácter semántico
dos entidades completamente diferentes : libros y prestamos
La ficha del libro es un registro formado por todos los atributos del libro y nos define las características de ese libro: su autor, el idioma en que está escrito, el título ... todos estos datos son esenciales al libro porque el conjunto de todos ellos define ese libro en particular. Si variásemos una sola característica dejaría de ser ese libro para pasar a convertirse en otro.
La ficha de lectura nos indica quién y cuándo ha leído ese libro. Que el libro lo haya leído Pedro o Juan en Enero, Febrero o Marzo, que lo tengan en su casa o que esté en la biblioteca, no altera en absoluto lo esencial del libro, no deja de ser ese libro para convertirse en otro. El total de las lecturas anotadas para todos los libros va formando una nueva entidad, una entidad que no es material, la transformamos en material cuando creamos el listado: prestamos. El listado dónde hemos registrado los lectores y las fechas en las que la biblioteca les ha prestado el libro.
Para saber que una determinada ficha de lectura se refiere a un determinado libro, tenemos que tener, tanto en la ficha del libro como en la ficha de lectura, un atributo que nos indique sin lugar a dudas, sin error posible, que se pertenecen. Este atributo es Ref_libro
¿os acordáis en el colegio? ¿no firmábamos con nuestro nombre en nuestro diccionario para saber que era nuestro y diferenciarlo del diccionario del resto de los alumnos? Nuestra firma escrita en el diccionario nos relacionaba inequívocamente con ese diccionario. Características de la Clave principal
La clave principal debe ser inequívoca y para cada nuevo registro de datos se obtiene inmediatamente el correspondiente valor que no puede quedarse vacío. Por lo tanto:
Como este atributo siempre debe tener un valor, sea cuál sea, lo definiremos como NOT NULL .
Como se tiene que incrementar en cada nueva ocurrencia y tiene que ser imposible modificarlo, lo definiremos como AUTO_INCREMENT Este atributo puede estar expresamente definido para que sea invisible al usuario corriente, pero siempre será numérico, se generará automáticamente en cada ocurrencia, y aumentará en uno su valor en cada una de ellas.
La clave principal podría muy bien estar definida en un campo INTEGER
Supongamos a tres hermanos: Pedro, Julián y Raúl; casados con Isabel y Luisa (hermanas entre ellas) y Adela. Si hiciésemos una tabla con los datos de padres e hijos necesitaríamos identificarlos claramente para no equivocarnos a la hora de introducir los datos pertenecientes a unos u otros. 
5 - Claves Externas
Vamos a ver una entidad que el usuario corriente sólo ve en parte: El listado total de lospréstamos de los libros
Sólo lo ve en parte porque cuando la biblioteca presta un libro en la Ficha de lectura sólo están anotados aquellos registros relativos a ese libro en particular, pero en realidad se lleva el control en una tabla general con todos los préstamos realizados. Sería algo así:

Cada ficha de lectura de un libro es una parte de la tabla general prestamos y está formada por los registros correspondientes al mismo libro, es decir, los registros que tienen el mismo valor para Ref_libro
6 - Conexiones
Vamos a ver cómo se pueden conectar o relacionar las entidades (tablas)
Volvamos al paquetito de fichas de nuestra biblioteca particular:

Entre dos entidades no pueden establecerse dos tipos diferentes de relaciones, por eso, es importante distinguir la diferencia entre los dos ejemplos adicionales que he incluido.
En el caso del coche con su motor puede estar más claro, sabemos que un coche sólo puede llevar un motor y a la inversa, un motor sólo puede ir en un coche. Si tuviésemos que gestionar la entidad coches y la entidad motores, podríamos estructurarlas de manera que se relacionasen por sus claves principales.
Cada id autonúmerico de la tabla coches lo podríamos relacionar con un id autonúmerico de la tabla motores. La relación sería de uno a uno y verdadera en las dos direcciones:
para cada id_coches
Volvamos al paquetito de fichas de nuestra biblioteca particular:

Entre dos entidades no pueden establecerse dos tipos diferentes de relaciones, por eso, es importante distinguir la diferencia entre los dos ejemplos adicionales que he incluido.
En el caso del coche con su motor puede estar más claro, sabemos que un coche sólo puede llevar un motor y a la inversa, un motor sólo puede ir en un coche. Si tuviésemos que gestionar la entidad coches y la entidad motores, podríamos estructurarlas de manera que se relacionasen por sus claves principales.
Cada id autonúmerico de la tabla coches lo podríamos relacionar con un id autonúmerico de la tabla motores. La relación sería de uno a uno y verdadera en las dos direcciones:
para cada id_coches
> habría un id_motores
para cada id_motores
para cada id_motores
Ø habría un id_coches
En el caso de la madre con su hijo, es diferente.
Si bien es cierto que un hijo sólo puede tener una madre biológica, también es cierto que una madre biológica puede tener varios hijos.
Si tuviésemos que gestionar la entidad hijos y la entidad madres y les diésemos esta estructura y atributos :

Relación de varios a varios
Las entidades de nuestra biblioteca mostradas en esquema estarían así:

Entre la tabla lectores y la tabla libros hay una relación de varios a varios.
Voy a dejaros que analiceis vosotros esta relación como ejercicio, pero antes leed el análisis que hago de otra posible relación de varios a varios que se puede dar en nuestra biblioteca.
Imaginemos cómo están archivados los libros en una biblioteca real. Cada lote de libros están clasificados por tipo, en una sección: narrativa, poesía, historia, libro técnico ....
Pero además cada libro estará escrito en un idioma diferente : francés, inglés, ...
Veremos que hay libros en francés de bricolaje e informática

Las entidades de nuestra biblioteca mostradas en esquema estarían así:

Entre la tabla lectores y la tabla libros hay una relación de varios a varios.
Voy a dejaros que analiceis vosotros esta relación como ejercicio, pero antes leed el análisis que hago de otra posible relación de varios a varios que se puede dar en nuestra biblioteca.
Imaginemos cómo están archivados los libros en una biblioteca real. Cada lote de libros están clasificados por tipo, en una sección: narrativa, poesía, historia, libro técnico ....
Pero además cada libro estará escrito en un idioma diferente : francés, inglés, ...
Veremos que hay libros en francés de bricolaje e informática

7 - Integridad Referencial
A partir de la versión 4.0 con MySql se puede verificar la integridad referencial . Antes, para poder controlar este factor era necesario utilizar el comando SELECT .... LEFT JOIN, pero en la version 4.0. se ha agregado a la lista de tipos de tablas soportadas en una instalación típica el tipo InnDb , en dónde podemos definir reglas o restricciones que garanticen la integridad referencial de los registros.
Las claves proporcionan una manera rápida y eficiente de buscar datos en una tabla, además de que permiten preservar la integridad de los datos.
La integridad referencial se puede comprometer básicamente en tres situaciones: cuando se está insertando un nuevo registro, cuando se está eliminando un registro, y cuando se está actualizando un registro.
8 - Practica I
En estos apuntes no entraré a explicar como se instala MySql o como se configura el archivo my.cnf. El motivo no es que no lo crea interesante, interesante lo es, pero presupongo que los lectores de estos apuntes no son programadores sino personas que se han acercado a MySql movidos por la necesidad de entender el funcionamiento de los foros phpBB que se han instalado. Imagino que tenéis un proveedor que os facilita la interfaz gráfica phpMyAdmin y que cuándo habéis accedido a MySql habéis pensado ¡madre mía! ¿Y ahora qué? .
Por una parte gestionaremos los usuariosy todos los datos referidos claramente a ellos ( datos personales, grupo al que pertenecen)
Por otra parte gestionaremos los mensajes(post) y todo lo relacionado claramente con ellos ( temas, foros, envío de mensajes,.... )
9 - Modelos de Gestores de Bases de Datos
El esquema lógico de la información en una base de datos se compone de un conjunto de entidades que pueden compartir información entre ellas mediante unas conexiones. En nuestro ejemplo de referencia serían la tabla libros que equivalen a las fichas con los datos de los libros de una biblioteca, la tabla lectores que equivale a las fichas de lectores de esa biblioteca y las relaciones entre ambas tablas.
Dependiendo de cómo estén definidas las relaciones y las entidades estaremos ante un gestor de base de datos relacional, jerárquico o en grafo
GESTOR RELACIONAL Una base de datos relacional consiste en una colección de tablas a cada una de las cuales se le asigna un nombre único y una fila de una tabla representa una relación entre un conjunto de valores, un registro.
Tablas:
Tabla libros / Tabla lectores
Dependiendo de cómo estén definidas las relaciones y las entidades estaremos ante un gestor de base de datos relacional, jerárquico o en grafo
GESTOR RELACIONAL Una base de datos relacional consiste en una colección de tablas a cada una de las cuales se le asigna un nombre único y una fila de una tabla representa una relación entre un conjunto de valores, un registro.
Tablas:
Tabla libros / Tabla lectores

Operaciones que se pueden realizar
Inserción: Para insertar un nuevo libro o un nuevo lector lo único que hay que hacer es añadir al final de la tabla de libros o lectores una nueva ocurrencia, y cuando se preste un libro a un lector se registra en una tabla general prestamos . No se puede añadir un registro en la tabla préstamos si no existe el registro de la tabla lector y de la tabla libro.
Inserción: Para insertar un nuevo libro o un nuevo lector lo único que hay que hacer es añadir al final de la tabla de libros o lectores una nueva ocurrencia, y cuando se preste un libro a un lector se registra en una tabla general prestamos . No se puede añadir un registro en la tabla préstamos si no existe el registro de la tabla lector y de la tabla libro.
Borrado. : Se puede borrar sin ningún problema el registro de lectura. Para borrar un lector o un libro hay que actualizar la información del préstamo, eliminando otras apariciones de ese libro o ese lector.
GESTOR JERÁRQUICO
Su estructura básica es el árbol. Va a tener un nodo padre y una serie de nodos hijos, la conexión se hace eligiendo quien va a ser el padre y quien va a ser el hijo.
El árbol se puede implementar mediante:
a) Registros variables: Son registros que van creciendo según se aumente el archivo.
b) Cadenas de punteros.
Su estructura básica es el árbol. Va a tener un nodo padre y una serie de nodos hijos, la conexión se hace eligiendo quien va a ser el padre y quien va a ser el hijo.
El árbol se puede implementar mediante:
a) Registros variables: Son registros que van creciendo según se aumente el archivo.
b) Cadenas de punteros.
Operaciones que se pueden realizar
Inserción: Insertar un padre se hace sin problemas. No se puede insertar un hijo sin estar asociado a un padre. La inserción va bien siempre que no se quiera insertar un hijo que no tenga padre.
Borrado: Si se borra un padre se borran todos sus descendientes.
Modificación: Si se modifica un hijo hay que modificarlo en todos los árboles en que se encuentre.
El problema de esta implementación es que los árboles solo permiten representar una estructura de uno a muchos, por tanto no es eficiente cuando se tiene que implementar una estructura de muchos a muchos.
GESTOR EN GRAFO
Se implementa mediante cadenas de punteros. Contiene dos tipos de conjuntos:
Se implementa mediante cadenas de punteros. Contiene dos tipos de conjuntos:
1. Conjunto de registros: libros , lectores.
2. Conjunto de ligas: préstamos (Cantidad).
Una ocurrencia de un tipo de registro específico puede tener cualquier número de superiores inmediatos. Se pueden representar relaciones de muchos a muchos.
Su desventaja más importante es su gran complejidad en la realización de los algoritmos y la cantidad de memoria que hay que reservar para los punteros.
Objetivos de los Sistemas de Gestión de Bases de Datos
las funciones de un SGBD son:
Debe permitir la perfecta definición de todos los datos. Es decir debe permitir incorporar a las estructuras todos aquellos objetos necesarios para completarlas y debe permitir incluir todos los atributos necesarios para definir a los objetos.
Debe permitir la manipulación de los datos: operaciones de intercambio de datos entre las tablas que pueden ser de consulta o de puesta al día (inserción, modificación supresión)
Debe establecer controles de seguridad para esos datos garantizando que sólo los usuarios autorizados puedan efectuar operaciones correctas bien sobre toda la base de datos o sobre algunas tablas.
Debe permitir los accesos concurrentes. El principal objetivo de la implantación de una base de datos es poner a disposición de un gran número de usuarios un conjunto integrado de datos y que estos datos puedan ser manipulados por los diferentes usuarios . El SGBD debe garantizar que esos datos seguirán siendo coherentes después de las diversas manipulaciones.
Una mala concepción a la hora de diseñar una base de datos puede dar origen a:
La redundancia de datos . Existiría redundancia de datos por ejemplo, si no creásemos una tabla de lectores y nos viésemos obligados a repetir en la tabla libros los datos del lector cada vez que prestamos un libro
Incoherencia en los datos . Si después de manipular los datos las consultas nos devolviesen definiciones erróneas. Por ejemplo, si no se estableciese como clave externa de la tabla préstamos la clave primaria del libro, en cuanto empezásemos a dejar libros a los lectores sobrevendría un caos, pues sería imposible determinar quién tiene qué libro
Pérdida de datos . Por ejemplo, si la supresión de una línea en la tabla libros (dar de baja un libro) supusiese también la eliminación de todos los registros de aquellos lectores que han leído el libro. A este comportamiento se le denomina "comportamiento anormal de las tablas"
Estado de la tabla . Decimos que una tabla se encuentra en estado de primera forma, si todas columnas de la tabla contienen valores atómicos y decimos que un valor es atómico cuándo es indivisible. Por ejemplo, si en la tabla libros dedicásemos una columna para anotar el título del libro y del autor, o en la tabla lectores dedicásemos una columna para anotar la dirección completa del usuario( calle, número y piso) las tablas no estarían en primera forma.
Lenguaje de los Sistemas de Gestión de Bases de Datos
Para "hablar" con un administrador de bases de datos utilizamos el lenguaje SQL. En la red encontraréis excelentes tutoriales que explican ampliamente sus características, yo os recomiendo este Curso de Sql
Para "hablar" con un administrador de bases de datos utilizamos el lenguaje SQL. En la red encontraréis excelentes tutoriales que explican ampliamente sus características, yo os recomiendo este Curso de Sql