12 de noviembre de 2014

Introducción al SQL

Según la Wikipedia, han pasado ya muchos años desde que en aquellos 1970, se ideó una forma de como crear un modelo en el que los datos se pudieran almacenar de manera lógica haciendo uso de una serie de estructuras llamadas tablas dentro de una base de datos. 

Imagen obtenida de Freevectors.net
Esta manera de como organizar y estructurar la información se llama modelo relacional y fue ideado por Edgar Frank Codd, un gran científico informático que trabajó para IBM y que gracias a él se sustentan la mayor parte de las bases de datos actuales basadas en este modelo relacional. 

Más tarde de haber publicado su idea, IBM desarrolló en sus laboratorios un lenguaje llamado Structured English Query Language o conocido por sus siglas como SEQUEL, y puesto en práctica en un SGBD experimental llamado System R, también elaborado en los laboratorios de IBM sobre el 1977. Sin embargo, Oracle fue la primera empresa que pudo comercializarlo en sus productos en el año 1979.

Para que entendamos, un SGBD, o un Sistema Gestor de Base de Datos es un programa que permite efectuar la magia de la extracción, almacenamiento e inserción de los datos dentro de nuestra base de datos relacional. Mediante una serie de algoritmos, y tecnologías programadas por quienes lo desarrollan como es el caso de MySQL, MariaDB, Oracle, Sybase, DB2... todos son SGBD y obtienen de diferente forma los resultados generalmente esperados. 

Por otro lado, SEQUEL acabó convirtiéndose en SQL, Structure Query Language o Lenguaje de Consultas Estructurados en español y fue en 1986 cuando la ANSI, la American National Standard Institute una organización sin ánimos de lucro declaró SQL como un lenguaje estándar para trabajar con los SGDB relacionales.

Desde aquel entonces se ha ido paulatinamente mejorando con el tiempo, y además de que todavía sigue calando muy hondo en nuestra sociedad y mercado. 
Gracias a su estandarización, siendo un punto de unión entre diversos sistemas gestores de bases de datos porque al menos en la teoría, deberían ser compatibles, es decir, que lo que programes en Oracle debería ser compatible con MySQL. No obstante, se aprecian ciertas diferencias entre diversos SGBD a la hora de trabajar con SQL representando valores como fechas, u otros determinados tipos de campo, funciones...

Las bases de datos relacionales trabajan con una serie de objetos. Estos objetos se llaman tablas, y su almacenamiento físico difiere entre los SGBD. Estas tablas contienen una estructura definida por lo que se llaman campos. Los campos son atributos de esas tablas. Por poner un ejemplo podemos tener una tabla llamada Usuario y como atributos tenemos un ID, apodo, nombre, apellidos... 

Esquema relacional de la próxima versión de mi proyecto PostIO. GPLv2.0


Cada campo tiene un tipo de dato, número entero en caso del ID; cadena en el caso del apodo, nombre, apellidos...; fecha actual para saber cuándo se registró...etc. Como nota adicional, nosotros no veremos la sintaxis, o todas las formas de como generar una estructura a nivel teórico. Solo utilizaremos lo práctico.

Los SGBD poseen un pequeño motor que permite, además de trabajar con la información, generan relaciones íntegras entre sí esto otorga un cierto nivel de veracidad con la base de datos. 
Un ejemplo clave es en el SGBD de MySQL, en el que utiliza por defecto el motor MyISAM, el cuál no soporta este tipo de relaciones. En las que se definen una serie de claves primarias y foráneas entre las tablas. Aunque, utilizando InnoDB si se puede.

Logo obtenido de MariaDB.org

Las claves primarias definen un atributo, un campo específico de nuestra tabla que tiene una importancia mucho mayor que los demás y poseen un valor importante a la hora de trabajar con las tablas y las relaciones. 
Por ejemplo, si nosotros tenemos una tabla de Alumnos. Para nosotros el campo más importante, obviamente es el CIAL o Código de Identificación del Alumno. Dado que es un código único en una base de datos de un colegio, instituto y nos garantiza que no se va a repetir.

Por otro lado, la clave extranjera es una clave primaria que se encuentra en otra tabla como atributo de una relación. Podemos verlo de la siguiente forma. Un Alumno se encuentra en un Curso. Ambas son tablas pero con diferentes campos y existe una relación entre ellas. Sin un alumno pertenece a un curso, entonces el código del curso formaría parte del alumno (1:1).

Tabla_Alumno(cial, nombre, apellidos...,id) 
Tabla_Curso(id,nombre,...)

Y para terminar y como un dato adicional, cabe destacar que existe otro modelo para generar una estructura de almacenamiento de datos, creada por Peter Chen llamado modelo Entidad/Relación. Este se obtiene mediante el diseño de un diagrama UML, lo más parecido a un esquema de los que se usamos en clase. Que contiene una serie de Entidades, las cuáles se refieren a aquellos objetos importantes con los que trabajaremos, seguido de un conjunto de atributos. Uno de ellos es el AIP o Atributo Identificador Principal que se le atribuye al dato más importante.

Esquema conceptual de la próxima versión de mi proyecto PostIO, GPLv2.0

Además, existe una relación entre las entidades, que poseen una serie de parámetros como el atributo principal de la relación, siendo la mezcla de AIPs de las entidades que se encuentren relacionadas, junto con los atributos propios de la relación. También contienen una serie de grados que definen su representación como por ejemplo una correspondencia de 1 uno a 1 mostrándose como 1:1; o de uno a varios, 1:N; o de muchos a muchos N:M. Digamos que este modelo es más intuitivo a la hora de elaborar una representación de como organizar lógicamente los datos dentro de una base de datos, pero que a la hora de aplicarlo a la práctica tal cual no nos sirve.

Obviamente, existe un método de conversión entre ambos modelos, que si nos serviría y que consiste en resumidas cuentas llamar a las tablas, entidades. Seleccionar los AIP como claves primarias, y según el grado de relación, se van a generar diversas tablas. Si es 1:1, se genera una tabla; si es 1:N se generan dos tablas y si es N:M, se crearán tres tablas.

El lenguaje SQL, es muy importante a día de hoy. Más del 99% de los CMS que existen actualmente trabajan con este tipo de base de datos como es el caso de Joomla, Wordpress, e107, Geeklog... Aunque, se están generando nuevas tendencias que no utilizan este paradigma como NoSQL, orientadas a objetos...

No obstante, si te dedicarás a trabajar con las relacionales, te las tendrás que ver con SQL, y si vas a dedicarte al desarrollo Web es algo muy fundamental. Por ello, en las próximas entradas, hablaremos sobre cómo realizar las consultas al SGBD más concretamente MySQL, y que también funcionan en MariaDB.

Referencias

  • Wikipedia
  • MySQL
  • Google

No hay comentarios:

Publicar un comentario

Gracias por visitar mi blog y animarte a comentar. Por favor se respetuoso con sus comentarios. Cualquier error es preferible reportárlo que criticarlo por el bien de todos.



Licencia y responsabilidades

Licencia Creative Commons
netSys blog por Álvaro Castillo se encuentra bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.

El propietario de este blog no se responsabiliza de los daños que puedan generarse u ocurrir por la información expuesta aquí, en caso de ser utilizada la responsabilidad recae bajo quién la use.

Se les informa de posibles publicaciones donde queden expuestas imágenes a terceros o marcas comerciales que siempre tendrán sus fuentes, y sus atribuciones.

Por último, en caso de confusión por la temática que se trate de los artículos, tutoriales...etc dejaremos claro que este sitio Web no colabora directamente con ningún proyecto de forma oficial.