Hoy jueves, seguimos con nuestros nuevos cursos y esta vez no enfocamos en las bases de datos. Tal como os mostramos con los resultados de la encuesta publicada anteriormente, empezaremos con algunos fundamentos de bases de datos para tener una buena base teórica e ir introduciendo poco a poco el diseño de bases de datos y finalizar con un curso dedicado MySQL junto a PHPMyAdmin (administración de las BBDD(Base de Datos) vía web) y MySQLWorkbench (IDE para la creación, diseño y administración de las BBDD desde escritorio).

Pero hoy nos centraremos en ver una introducción a las bases de datos. ¡Empecemos!

Modelos de las bases de datos

Para poder explicar algunos términos o dar definiciones exactas de las BBDD, primero hemos de saber que coexisten tres modelos diferenciados:

  • El modelo real, es lo que nosotros vemos, oímos, tocamos, olemos y probamos. En esta parte identificamos los objetos reales de nuestro mundo.
  • El modelo conceptual, es donde interpretamos los objetos reales a objetos conceptuales o ficticios. En esta parte modelizamos su estructura, las propiedades y su funcionamiento en modelos conceptuales a partir de observaciones reales.
  • El modelo físico, es la transformación de los modelos conceptuales a modelos de datos destinados a los Sistemas Gestores de Bases de Datos (SGBD) o Data Base Mamagement System (DBMS) que son los programas encargados de gestionar nuestras bases de datos.

Poniendo un ejemplo, veremos mejor su diferencia:

  • Modelo real: Mi coche es un SEAT IBIZA de 3 puertas con matrícula 7615DDR.
  • Modelo conceptual: Objeto Coche con las propiedades: nombre (Seat Ibiza), numeroDePuertas (3) y matricula (7615DDR).
  • Modelo Físico: Fichero de datos, registro, campos de la BBDD que ocupa mi objeto coche “Seat Ibiza” (ficheros de datos almacenados en la BBDD de forma física, por ejemplo con MySQL como SGBD).

Como en el modelo real podemos detectar los objetos reales, observar como son, tocarlos u olerlos, no hace falta entrar a estudiar en detalle esta parte y por ese motivo empezaremos a estudiar el modelo conceptual.

Modelo Conceptual

En el modelo conceptual llamaremos entidad (o tabla) a la conceptualización del objeto real. Esta entidad tendrá unas propiedades, que llamaremos atributos de la entidad y en los cuales se guardarán unos valores de atributo. En una BBDD podremos tener muchas entidades diferentes y cada una con sus atributos y valores propios.

Como norma, los nombres de las entidades se empiezan en mayúscula, y si son nombres compuestos, la primera letra de la segunda palabra también será mayúscula. Por ejemplo:

  • Persona
  • PersonaDeContacto

Para los nombres de los atributos, se escriben en minúscula, pero si son nombre compuestos, la primera letra de la segunda palabra será mayúscula. Por ejemplo:

  • nombre
  • fechaDeNacimiento

En el caso anterior sobre el coche Seat Ibiza, la entidad es Coche, los atributos de la entidad Coche son nombre, numeroDePuertas y matricula y finalmente los valores de los atributos de la entidad Coche son Seat Ibiza, 3 y 7615DDR.

Podríamos decir que una entidad es una “estructura” (atributos y valores) para poder crear instancias u objetos a partir de ella.

Como podemos ver, con la entidad Coche podremos instanciar una nueva tupla (también llamadas filasregistros) del tipo Coche con diferentes valores en sus atributos, por ejemplo:

  • Tupla 1: Seat Ibiza, 3, 7615DDR (tupla que ya teníamos…)
  • Tupla 2: Fiat Punto, 5, 5364CFD (nueva)
  • Tupla 3: Opel Corsa, 3, 1234DDS (nueva)
  • Tupla 4: Volkswagen Golf, 5, 9867CCR (nueva)

Pero primero debemos tener claro cual es el dominio de cada atributo de una entidad (que valores puede contener) ya que por ejemplo si tenemos una entidad Persona, donde tenemos un atributo que sea edad, debemos especificar que sea un número entero (no puede ser un texto o un número decimal) y deberemos especificar que este número entero sea de un rango entre 0 a 130 (0 años para los recién nacidos menores de 1 año y hasta los 130 años, por ejemplo).

Es muy importante especificar correctamente estos dominios para evitar errores mayores que más tarde pueden ser muy laboriosos de subsanar. Y lo más importante, no malgastar espacio de memoria con rangos demasiado grandes.

Un aspecto muy importante a tener en cuenta en todas las entidades de nuestras BBDD es que tenemos que asignar un atributo como clave primaria (Primary Key o PK). Esta clave primaria será un atributo donde sus valores deben ser únicos (no podemos tener más de un registro con el mismo valor) y nos servirán para diferenciar a todos los registros de una entidad. Estas claves pueden ser de un atributo o varios atributos (claves primarias compuestas).

Para decidir que atributo podemos asignar como clave primaria, debemos formularnos esta pregunta:

¿Que atributo de la entidad es único y no se va a repetir nunca en todos los registros?

Si por ejemplo analizamos la entidad Persona, tenemos:

  • El atributo edad, puede ser PK?
    • No. El atributo edad puede repetirse muchas veces en registros diferentes, por ejemplo tener a 30 personas que tengan 18 años.
  • El atributo nombre, puede ser PK?
    • No. El nombre de una persona se puede repetir en varios registros, por ejemplo podríamos tener 15 registros de personas que se llamen José.
  • El atributo compuesto nombre+primerApellido+segundoApellido, puede ser PK?
    • No. En este caso es casi imposible tener a dos personas con el mismo nombre y los mismos dos apellidos (sería MUCHA coincidencia) pero puede suceder que existan dos personas o más en el mundo con el mismo nombre.
  • El atributo dni, puede ser PK?
    • No. En principio nos puede parecer un buen candidato de PK, pero el número de Documento Nacional de Identidad que es (en teoría) único para cada persona, a veces se han dado casos de números de DNI duplicados.
  • Un número único autoincremental (id)?
    • Si. Normalmente, en las entidades se suelen crear unos tipos de atributos llamados identificadores o id que suelen ser los primeros en crearse. Estos se crean de tal forma que para cada nuevo registro obtenga un valor diferente y de esa forma ser realmente únicos. Por eso, se suelen configurar para que se generen números diferentes para cada nuevo registro. Por ejemplo el ID del primer registro puede ser 1, el del segundo 2, etc. Dependiendo de que SGBD vayamos a utilizar, tendremos la opción de tener disponible un campo autoincremental (AI en el caso de MySQL o IDENTITY con SQL Server) o no (en el caso de Oracle). En los casos que no tenemos estas opciones, veremos más adelante como crearlos manualmente.

Todos los ejemplos de campos anteriores en los cuales hemos visto que optan a ser claves primarias (PK) las llamaremos claves candidatas (únicas o UNIQUE) como por ejemplo el DNI o el Nombre+Apellidos que son claves candidatas, pero no serán PK por los problemas comentados anteriormente. Por eso en una entidad podemos tener varias claves candidatas (UNIQUE) pero tan solo podremos tener una única clave primaria (PK).

Después de observar que en la entidad Persona tiene las claves candidatas nombre + primerApellido + segundoApellido y dni, debemos analizarlas más detenidamente. Podemos ver que, aunque sea casi imposible, la clave candidata nombre+primerApellido+segundoApellido podría tener duplicidades en registros y por eso la descartamos como PK, pero quedaría como candidata. Ahora la única que nos queda es la clave candidata dni. Aunque parezca que los números de DNI son totalmente únicos, se han dado casos de duplicidades de números (y cuando pasa esto, se corrige inmediatamente en la Policía). Por ese motivo, y de forma probable, podríamos tener también duplicidades en registros.

Entonces, si no tenemos ninguna clave candidata que opte de forma segura a ser clave primaria, ¿que podemos hacer?. ¡Pues vamos a crearla!

De facto, los diseñadores de bases de datos, suelen tener una o varias claves candidatas (claves que, en teoría, son únicas y no se repiten) en una entidad, pero son ellos los que crean un nuevo atributo en cada entidad para que sea realmente único para cada registro (PK). Son los llamados atributos o campos id.

Un atributo 0 campo id se crea de tal forma para que sea un valor numérico (número entero) que empieza normalmente con el 1 y se incrementa automáticamente en una unidad con cada registro nuevo. Así por ejemplo, en la clase persona podríamos tener la siguiente estructura de entidad o tabla:

Persona
 idPersona (PK)  nombre  apellido1  apellido2  dni (UNIQUE)  edad
1  José  Pérez  Ruíz  45637198B  22
2  Pedro  Martínez  Fuentes  75649345T  35
3  María  Salomón  Puentes  29763451F  19

 

Cada SGBD utiliza un lenguaje interno propio para poder crear, consultar, modificar y eliminar sus entidades, campos, valores, relaciones o restricciones interactuando con una shell (consola) y mediante comandos especiales. SQL (Structured Query Language), es el lenguaje de consultas a bases de datos más utilizado y nos permitirá crear, modificar, consultar y eliminar tanto bases de datos como sus tablas (entidades) y registros (tuplas), desde el shell interactivo del propio SGBD (por ejemplo MySQL).

La gran mayoría de los SGBD se basan en una variación del lenguaje SQL, concretamente llamado Transact-SQL y es un lenguaje muy potente que nos permite definir casi cualquier tarea que queramos efectuar sobre la base de datos; incluye características propias de cualquier lenguaje de programación y características que nos permiten definir la lógica necesaria para el tratamiento de la información:

  • Tipos de datos.
  • Definición de variables.
  • Estructuras de control de flujo.
  • Gestión de excepciones.
  • Funciones predefinidas.
  • etc.

Los lenguajes de los SGBD los podemos clasificar en:

  • Lenguaje de definición de datos (LDD o DDL): se utiliza para especificar el esquema de la BBDD, las vistas de los usuarios y las estructuras de almacenamiento. Es el que define el esquema conceptual y el esquema interno. Lo utilizan los diseñadores y los administradores de la BBDD.
  • Lenguaje de manipulación de datos (LMD o DML): se utilizan para leer y actualizar los datos de la BBDD. Es el utilizado por los usuarios para realizar consultas, inserciones, eliminaciones y modificaciones.
    • Los hay procedurales, en los que el usuario será normalmente un programador y especifica las operaciones de acceso a los datos llamando a los procedimientos necesarios. Estos lenguajes acceden a un registro y lo procesan. Las sentencias de un LMD procedural están embebidas en un lenguaje de alto nivel llamado anfitrión. Las BBDD jerárquicas y en red utilizan estos LMD procedurales.
    • Los no procedurales son los lenguajes declarativos. En muchos SGBD se pueden introducir interactivamente instrucciones del LMD desde un terminal, también pueden ir embebidas en un lenguaje de programación de alto nivel. Estos lenguajes permiten especificar los datos a obtener en una consulta, o los datos a modificar, mediante sentencias sencillas.

Por ejemplo:

  • ORACLE
    • SQL Forms para la generación de formularios de pantalla y para interactuar con los datos.
    • SQL Reports para generar informes de los datos contenidos en la BBDD.
    • PL/SQL lenguaje para crear procedimientos que interactuen con los datos de la BBDD.

Los diseñadores de bases de datos necesitaban también tener un lenguaje común entre ellos para poder describir y diseñar las entidades y otros elementos de una base de datos. Eso se debe a que si por ejemplo, un diseñador creaba una entidad en ese lenguaje, y más tarde necesitaba enviar a otro diseñador ese mismo diseño, este debería entenderlo sin ningún problema, igual que pasa con el lenguaje (sintaxis) de las matemáticas, que es universal. Si a todo el mundo le preguntamos que resultado es 2+2, todos dirán 4, ya sea una persona que vive en Los Ángeles como una persona que vive en Australia o en Japón.

Por eso, desde el año 2005 se creó un lenguaje nuevo llamado lenguaje unificado de modeladoUnified Modeling Language (UML) el cual es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un “plano” del sistema (modelo conceptual) para lenguajes de programaciónbases de datos, por ejemplo, pero permite realizar muchos otros tipos de diagramas.

La gran ventaja de utilizar UML (artualmente es la versión UML 2.5) para crear gráficamente un modelo conceptual de una BBDD y no utilizar directamente un lenguaje como por ejemplo SQL, es que después de haber “dibujado” correctamente un diagrama, podemos exportar a código SQL de forma totalmente automática y así poder copiarlo y ejecutarlo en nuestra shell de nuestro SGBD y crear una BBDD igual que la que hemos diseñado gráficamente con UML.

Dependiendo del programa que usemos para dibujar los diagramas UML, tendrán más herramientas y funciones. Como nosotros utilizaremos el programa ArgoUML, podremos exportar esos diagramas a los siguiente lenguajes:

  • cpp: código para el lenguaje de programación C
  • CSharp: código para el lenguaje de programación C#
  • Java: código para el lenguaje de programación Java
  • PHP4: código para el lenguaje de programación PHP v4
  • PHP5: código para el lenguaje de programación PHP v5
  • SQL: código para el lenguaje de programación SQL (¡este es el que utilizaremos!)

A parte de ver como realizar este proceso, debemos saber que SIEMPRE deberemos comprobar el código generado, ya que muchas veces contienen errores. A parte de que dependiendo del SGBD que vayamos a utilizar, deberemos adaptar la sintaxis. Por otro lado veremos tambien como crear desde 0 nuestra BBDD solamente con lenguaje SQL.

Aquí os dejo un vídeo de nuestro canal de Youtube para que podáis ver como descargar el programa ArgoUML el cual lo utilizaremos más adelante para diseñar y dibujar las entidades de nuestras BBDD. Por ahora solo debéis quedaros con los conceptos básicos de que como se dibuja una entidad y como se añaden los atributos. Más adelante os explicaremos más en profundidad como usar ArgoUML.

Hasta aquí esta primera entrega. El próximo jueves estudiaremos como se relacionan las entidades de nuestra BBDD y así más tarde relacionar datos de una instancia con otra totalmente diferente.

Si tenéis alguna duda o problema, podéis escribir un comentario en esta entrada y os contestaremos lo antes posible. ¡Y suscribíos a nuestro canal de Youtube!

Saludos,

Info | Wikipédia