Bases de datos
Índice
Qué es una base de datos

Una base de datos es una colección organizada de información estructurada, o datos, típicamente almacenados en un sistema de computadora. Una base de datos es usualmente controlada por un sistema de gestión de base de datos (DBMS).

En conjunto, los datos y el DBMS, junto con las aplicaciones que están asociados con ellos, se conocen como un sistema de base de datos, que a menudo se reducen a solo base de datos.

Ventajas de los sistemas de bases de datos:

Desventajas de los sistemas de bases de datos:

Tipos de bases de datos

Hay muchos tipos diferentes de bases de datos. La mejor base de datos para una organización específica depende de cómo la organización pretende utilizar los datos.

Tipos:

Relacionales:Las bases de datos relacionales se popularizaron en los años ochenta. Los elementos de una base de datos relacional se organizan como un conjunto de tablas con columnas y filas. La tecnología de base de datos relacional proporciona la manera más eficiente y flexible de acceder a información estructurada.
Orientadas a objetos:La información en una base de datos orientada a objetos se representa en forma de objetos, como en la programación orientada a objetos.
Distribuídas:Una base de datos distribuida consta de dos o más archivos ubicados en diferentes sitios. La base de datos puede almacenarse en múltiples computadoras, ubicadas en la misma ubicación física o dispersas en diferentes redes.
Almacenes de datos:Un almacén de datos es un tipo de base de datos diseñada específicamente para consultas y análisis rápidos, y funciona como un depósito central de datos.
NoSQL:Una NoSQL, o una base de datos no relacional, permite que los datos no estructurados y semiestructurados se almacenen y manipulen, a diferencia de una base de datos relacional, que define cómo deben componerse todos los datos insertados en la base de datos. Las bases de datos NoSQL se hicieron populares a medida que las aplicaciones web se hacían más comunes y más complejas.
Orientadas a grafos:Una NoSQL, o una base de datos no relacional, permite que los datos no estructurados y semiestructurados se almacenen y manipulen, a diferencia de una base de datos relacional, que define cómo deben componerse todos los datos insertados en la base de datos. Las bases de datos NoSQL se hicieron populares a medida que las aplicaciones web se hacían más comunes y más complejas
OLTP:Una base de datos OLTP es una base de datos analítica y rápida diseñada para un gran número de transacciones realizadas por múltiples usuarios.

Tipos de Clientes de bases de datos

  1. Cliente CLI (Command Line Interface): Es un cliente que interactúa con la base de datos mediante el uso de la consola.
  2. Cliente GUI (graphical user interface): Es un cliente que interactúa con la base de datos mediante el uso de una aplicación gráfica.
  3. Cliente Web: Es un cliente que interactúa con la base de datos a través de una página web mediante el uso de un navegador.

Software de bases de datos (DBMS)

El software de base de datos se utiliza para crear, editar y mantener archivos y registros de bases de datos, lo que facilita la creación de archivos y registros, la entrada de datos, la edición de datos, las actualizaciones y los informes. El software también se encarga del almacenamiento de datos, las copias de seguridad y los informes, el control de acceso múltiple y la seguridad. La sólida seguridad de las bases de datos es especialmente importante hoy en día, ya que el robo de información se vuelve más frecuente. En ocasiones, el software de base de datos también se denomina "sistema de administración de bases de datos" (DBMS).

Una base de datos generalmente requiere un programa completo de software de base de datos, que se conoce como sistema de administración de bases de datos (DBMS). Un DBMS sirve como una interfaz entre la base de datos y sus usuarios o programas finales, lo que permite a los usuarios recuperar, actualizar y administrar cómo se organiza y optimiza la información. Un DBMS también facilita la supervisión y el control de las bases de datos, lo que permite una variedad de operaciones administrativas, como la supervisión del rendimiento, el ajuste, las copias de seguridad y la recuperación.

Qué es MySql

MySQL es un sistema de gestión de bases de datos relacionales de código abierto basado en SQL.

Fue diseñado y optimizado para aplicaciones web y puede ejecutarse en cualquier plataforma. A medida que surgían nuevos y diferentes requisitos con Internet, MySQL se convirtió en la plataforma elegida por los desarrolladores web y las aplicaciones basadas en la web. Debido a que está diseñada para procesar millones de consultas y miles de transacciones, MySQL es una opción popular para las empresas de comercio electrónico que necesitan administrar múltiples transferencias de dinero. La flexibilidad bajo demanda es la característica principal de MySQL.

Características

  1. Gratuito
  2. Multiplataforma
  3. Interfaz gráfica
  4. Motores de almacenamiento
  5. Respaldos
  6. Arquitectura multihilo
  7. Privilegios

Qué es SQL

Qué es el lenguaje de consulta estructurado (SQL)

SQL (Structured Query Language) es un lenguaje de programación usado por casi todas las bases de datos relacionales para consultar, manipular y definir datos, y para proporcionar control de acceso. SQL se desarrolló por primera vez en IBM en la década de 1970 con Oracle como uno de los principales contribuyentes, lo que llevó a la implementación del estándar ANSI de SQL. SQL ha generado muchas extensiones por parte de compañías como IBM, Oracle y Microsoft.

SQL es utilizado habitualmente no solo por los administradores de bases de datos, sino también por los desarrolladores que escriben scripts de integración de datos y por los analistas de datos que desean configurar y ejecutar consultas analíticas. Las consultas y otras operaciones SQL adoptan la forma de comandos escritos en forma de sentencias: las sentencias SQL más utilizadas son select, add, insert, update, delete, create, alter y truncate.

Modelo Entidad-Relación

Modelo ER

El modelo entidad relación es un concepto para diseñar Base de datos que posteriormente serán implementadas a través de un DBMS.

Este modelo se representa a través de diagramas y está formado por varios elementos, de los cuales el principal es la entidad. El tipo de diagrama utilizado para realizar el modelado Entidad-Relación es el DER (Diagrama Entidad Relación), el cual pertenece al lenguaje de modelado universal (UML: Universal Modeling Languaje).

Los atributos definen o identifican las características propias y por lo general únicas de una entidad.

En una base de datos compleja pueden existir entidades relacionadas entre sí por diversos parámetros o atributos, de tal modo que la existencia de una puede ir ligada a la existencia de otra. Así, las entidades pueden ser fuertes (existen por si mismas) o débiles (su existencia depende de que exista otra entidad). Las relaciones entre entidades suelen describirse en el esquema de la estructura de la base de datos e incluso pueden agruparse entre sí para formar conjuntos de entidades.

Las relaciones tienen una característica denominada cardinalidad, la cual indica el sentido y la cantidad de “relaciones” existentes entre una entidad y otra. Estas pueden ser de los siguientes tipos: Relación uno a muchos (1-n): En el siguiente ejemplo se ve que un alumno puede tener muchos autos (n) y a su vez muchos autos pueden ser de un alumno.

Relación uno a uno (1-1): En el siguiente ejemplo se ve que un alumno puede tener una sola libreta, y esa libreta puede pertenecer a ese único alumno.

Relación muchos a muchos (n-n): En el siguiente ejemplo se ve que un alumno puede estar asignada a muchas materias, y las materias pueden tener muchos alumnos.

Diagrama físico - Tablas, campos y registros

Tabla

Una tabla es una colección de datos con la misma estructura. Si se disponen los datos en una columna, esa columna siempre tiene el mismo tipo de datos, por ejemplo, un número de documento, un nombre, etc.

Si vamos a relacionarlo con el tema anterior podemos decir que una tabla es una entidad, de un cierto número de campos, en cada uno de los cuales se guarda un dato, que puede ser numérico, alfanumérico, fecha, etc.

CampoUn campo es cada una de las columnas de la tabla y el nombre de la columna es el nombre del campo, relacionándolo con el tema anterior, un campo es un atributo.
RegistroUn registro es cada una de las filas de la tabla, y está formado por el dato de cada uno de los campos almacenados en una misma operación.

Tipos de datos (MySql)

Tipos de datos en MySql

Los campos de las tablas MySQL nos dan la posibilidad de elegir entre distintos tipos de datos:

  1. Numéricos
  2. Alfanuméricos
  3. Fechas y horas
* Dentro de los datos numéricos, podemos distinguir dos grandes ramas: enteros y decimales.
** Existe la posibilidad de duplicar el límite de valor máximo positivo de cada tipo de dato, si eliminamos la posibilidad de almacenar valores negativos.

Datos numéricos

NÚMERO ENTEROS
Tipo Bytes Valor mínimo Valor máximo
TINYINT1-128127
SMALLINT2-3276832767
MEDIUMINT3-83886088388607
INT o INTEGER4-21474836482147483647
BIGINT8-92233720368547758089223372036854775807

NÚMEROS ENTEROS SIN SIGNO
Tipo Bytes Valor mínimo Valor máximo
TINYINT10255
SMALLINT2065535
MEDIUMINT3016777215
INT o INTEGER404294967295
BIGINT8018446744073709551615

NÚMEROS DECIMALES
Tipo Explicación
FLOAT (6.2)Esta definición permitirá almacenar como mínimo el valor -999.99 y como máximo 999.99 (el signo menos no cuenta, pero el punto decimal sí, por eso son seis dígitos en total, y de ellos dos son los decimales). La cantidad de decimales (el segundo número entre los paréntesis) debe estar entre 0 y 24, ya que ése es el rango de precisión simple.
DOUBLE el tipo de dato DOUBLE, al ser de doble precisión, sólo permite que la cantidad de decimales se defina entre 25 y 53.
DECIMALes ideal para almacenar valores monetarios, donde se requiera menor longitud, pero la "máxima exactitud" (sin redondeos).

DATOS ALFANUMÉRICOS
Tipo Explicación
CHAREste tipo de dato permite almacenar textos breves, de hasta 255 caracteres de longitud como máximo en caracteres que le definamos, aunque no lo utilicemos.
VARCHAREl tipo de dato VARCHAR (character varying, o caracteres variables) es útil cuando la longitud del dato es desconocida, cuando depende de la información que el usuario escribe en campos o áreas de texto de un formulario. La longitud máxima permitida era de 255 caracteres hasta MySQL 5.0.3. pero desde esta versión cambio a un máximo de 65.535 caracteres. Este tipo de dato tiene la particularidad de que cada registro puede tener una longitud diferente, que dependerá de su contenido; si en su registro el campo "nombre" (supongamos que hubiera sido definido con un ancho máximo de 20 caracteres) contiene solamente el texto: "Pepe", consumirá sólo cinco caracteres, cuatro para las cuatro letras, y uno más que indicará cuántas letras se utilizaron.
DECIMALEs ideal para almacenar valores monetarios, donde se requiera menor longitud, pero la "máxima exactitud" (sin redondeos).
TEXTAntes de la versión 5.0.3. de MySQL, este campo era el utilizado "por excelencia" para descripciones de productos, comentarios, textos de noticia, y cualquier otro texto largo. Pero, a parir de la posibilidad de utilizar VARCHAR para longitudes de hasta 65.535 caracteres, es de esperar que se utilice cada vez menos este tipo de campo. La principal desventaja de TEXT es que no puede indexarse fácilmente (a diferencia de VARCHAR). Tampoco se le puede asignar un valor predeterminado a un campo TEXT (un valor por omisión que se complete automáticamente si no se ha proporcionado un valor al insertar un registro). Sólo deberíamos utilizarlo para textos realmente muy largos, como los que mencionamos al comienzo de este párrafo.
BLOBEs un campo que guarda información en formato binario y se utiliza cuando desde PHP se almacena en la base de datos el contenido de un archivo binario (típicamente, una imagen o un archivo comprimido ZIP) leyéndolo byte a byte, y se requiere almacenar todo su contenido para luego reconstruir el archivo y servidor al navegador otra vez, sin necesidad de almacenar la imagen o el ZIP en un disco, sino que sus bytes quedan guardados en un campo de una tabla de la base de datos. El tamaño máximo que almacena es de 65.535 bytes.
TINYBLOB, MEDIUMBLOB Y LONGBLOBSimilares al BLOB, sólo cambia la longitud máxima: TINYBLOB es de 255 bytes MEDIUMBLOB es de 16.777.215 bytes, y LONGBLOB es de 4 Gb (o lo máximo que permita manipular el sistema operativo).

DATOS DE FECHA Y HORA
Tipo Explicación
DATEEl tipo de dato DATE nos permite almacenar fechas en el formato: AAAA-MM-DD (los cuatro primeros dígitos para el año, los dos siguientes para el mes, y los últimos dos para el día).
* Atención: En los países de habla hispana estamos acostumbrados a ordenar las fechas en Día, Mes y Año, pero para MySQL es exactamente al revés.
** El rango de fechas que permite manejar va desde el 1000-01-01 hasta el 9999-12-31.
DATETIMEUn campo definido como DATETIME nos permitirá almacenar información acerca de un instante de tiempo, pero no sólo la fecha sino también su horario, en el formato: AAAA-MM-DD HH:MM:SS Siendo la parte de la fecha de un rango similar al del tipo DATE (desde el 1000-01-01 00:00:00 al 9999-12-31 23:59:59), y la parte del horario, de 00:00:00 a 23:59:59.
TIMEEste tipo de cambio permite almacenar horas, minutos y segundos, en el formato HH:MM:SS, y su rango permitido va desde -839:59:59 hasta 839:59:59 (unos 35 días hacia atrás y hacia adelante de la fecha actual). Esto lo hace ideal para calcular tiempos transcurridos entre dos momentos cercanos.
TIMESTAMPUn campo que tenga definido el tipo de dato TIMESTAMP sirve para almacenar una fecha y un horario, de manera similar a DATETIME, pero su formato y rango de valores serán diferentes. El formato de un campo TIMESTAMP puede variar entre tres opciones:
AAAA-MM-DD HH:MM:SS
AAAA-MM-DD
AA-MM-DD
Es decir, la longitud posible puede ser de 14, 8 o 6 dígitos, según qué información proporcionemos. El rango de fechas que maneja este campo va desde el 1970-01-01 hasta el año 2037. Además, posee la particularidad de que podemos definir que su valor se mantenga actualizado automáticamente, cada vez que se inserte o que se actualice un registro. De esa manera, conservaremos siempre en ese campo la fecha y hora de la última actualización de ese dato, que es ideal para llevar el control sin necesidad de programar nada.
YEAREn caso de definir un campo como YEAR, podremos almacenar un año, tanto utilizando dos como cuatro dígitos. En caso de hacerlo en dos dígitos, el rango posible se extenderá desde 70 hasta 99 (del 70 hasta el 99 se entenderá que corresponden al rango de años entre 1970 y 1999, y del 00 al 69 se entenderá que se refiere a los años 2000 a 2069); en caso de proporcionar los cuatro dígitos, el rango posible se ampliará, yendo desde 1901 hasta 2155.

Atributos de los campos

Ya hemos visto los diferentes tipos de datos que es posible utilizar al definir un campo en una tabla, pero estos tipos de datos pueden poseer ciertos modificadores o "atributos" que se pueden especificar al crear el campo, y que nos brindan la posibilidad de controlar con mayor exactitud qué se podrá almacenar en ese campo, cómo lo almacenaremos y otros detalles.

ATRIBUTOS
NombreExplicación
NULL Algunas veces tendremos la necesidad de tener que agregar registros sin que los valores de todos sus campos sean completados, es decir, dejando algunos campos vacíos (al menos provisoriamente).
Por ejemplo, en un sistema de comercio electrónico, podría ser que el precio, o la descripción completa de un producto, o la cantidad de unidades en depósito, o la imagen del producto, no estén disponibles en el momento en que, como programadores, comencemos a trabajar con la base de datos.
Todos esos campos, nos conviene que sean definidos como NULL (nulos), para que podamos ir agregando registros con los datos básicos de los productos (su nombre, código, etc.) aunque todavía la gente del área comercial no haya definido el precio, ni el área de marketing haya terminado las descripciones, ni los diseñadores hayan subido las fotos (es típica esta división de tareas en empresas grandes, y hay que tenerla presente, porque afecta la declaración de campos de nuestras tablas).
Si definimos esos campos que no son imprescindibles de llenar de entrada como NULL (simplemente marcando la casilla de verificación a la altura de la columna NULL, en el phpMyAdmin), el campo queda preparado para que, si no es que proporcionado un valor, quede vacío pero igual nos permita completar la inserción de un registro completo.
VALOR PREDETERMINADO (DEFAULT) Pensemos en un sistema de pedidos, donde, al llegar el pedido a la base de datos, su estado sea "recibido", sin necesidad de que el sistema envíe ningún valor, sólo por agregar el registro, ese registro debería contener en el campo "estado" el valor de "recibido". Este es un típico caso de valor predeterminado o por default.
PRIMARY KEY Y AUTO_INCREMENT Siempre, en toda tabla, uno de los campos (por convención, el primero, y también por convención usualmente llamado id –por "identificador"-), debe ser de definido como clave primaria o Primary Key. Esto impedirá que se le inserten valores repetidos y que se deje nulo su valor. Habitualmente, se especifica que el campo elegido para clave primaria sea numérico, de tipo entero (en cualquiera de sus variantes, según la cantidad de elementos que se identificarán) y se le asigna otro atributo típico, que es Auto_Increment, es decir, que no nos preocupamos por darle valor a ese campo: al agregar un registro, MySQL se ocupa de incrementar en uno el valor de la clave primaria del último registro agregado, y se lo asigna al nuevo registro.
UNIQUE Si especificamos que el valor de un campo sea Unique, estaremos obligando a que su valor no pueda repetirse en más de un registro, pero no por eso el campo se considerará clave primaria de cada registro. Esto es útil para un campo que guarde, por ejemplo, número de documentos de identidad, la casilla de correo electrónico usada para identificar el acceso de un usuario, un nombre de usuario, o cualquier otro dato que no debamos permitir que se repita.

Componentes SQL

Componentes de SQL

El lenguaje de consulta estructurado (SQL) está compuesto por comandos, clausulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

Comandos

Los principales tipos de comandos SQL son los siguientes:

Lenguaje de definición de datos (DDL)

El lenguaje de definición de datos (en inglés Data Definition Languaje), es el que se encarga de la modificación de la estructura de los objetos de la base de datos. Incluye órdenes para modificar, borrar o definir las tablas en las que se almacenan los datos.
Existen cuatro operaciones básicas:

Lenguaje de manipulación de datos (DML)

Un lenguaje de manipulación de datos (Data Manipulation Languaje) proporcionado por el sistema de gestión de base de datos permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.
Existen cuatro operaciones básicas:

Cláusulas

Las clausulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular.

Operadores

Operadores lógicos.

Operadores de comparación

Funciones

Las funciones se usan dentro de una clausula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros.

Trabajar con varias tablas

Constraints

Para asegurar la integridad de los datos almacenados en nuestras tablas, podemos crear restricciones, algunos los hemos utilizado sin querer o simplemente desconocemos que lo que hicimos fue una restricción. Estas restricciones las podemos implementar al momento de crear las tablas o modificarlas.

Los principales tipos de restricciones que existen son:

CONSTRAINTS
NombreExplicación
PRIMARY KEY

Es la más común de todas debido a que cada una de nuestras tablas debe ser completamente relacional y para lograr esto siempre debe existir una llave primaria dentro de cada tabla que identifique cada fila como única.
Existen ciertos requerimientos para la creación de una llave primaria:

  • La columna utilizada en una restricción PRIMARY KEY, no puede aceptar NULL
  • No pueden repetir los valores en la columna, debe ser único
  • Solamente puede existir una restricción de tipo PRIMARY KEY por cada tabla

UNIQUE Este tipo de restricción es muy parecida a PRIMARY KEY, las diferencias son las siguientes:
  • También genera un índice automáticamente.
  • La tabla puede tener más de una restricción UNIQUE.
  • Si puede aceptar NULL, pero solo una fila puede contenerlo ya que como su nombre lo indica, es de tipo UNIQUE o único.
FOREIGN KEY Se forma de una columna o la combinación de varias columnas de una tabla que sirve como enlace hacia otra tabla donde en esta última, dicho enlace son la o las columnas que forman la PRIMARY KEY. Las columnas involucradas como llave foránea deben tener el mismo tipo de datos que la llave primaria de la tabla relacionada. Una llave foránea no cra un índice automáticamente, por lo que se recomienda generar uno para incrementar el rendimiento de la consulta.
Requerimientos para la restricción FOREIGN KEY:
  • Los valores ingresados en la columna de la llave foránea, debe existir en la tabla a la que se hace referencia en la columna de la llave primaria.
  • Solo se pueden hacer referencia a las llaves primarias de tablas que se encuentren dentro de la misma base de datos.
  • Solo puede hacer referencia a columnas de restricciones PRIMARY KEY o UNIQUE.

Joins

Joins significa uniones y tal como su significado nos indica, nos permite hacer uniones entre tablas y los resultados de las consultas a las mismas lo cual nos va a permitir proveer ciertas flexibilidades adicionales además de que su sintaxis es mucho más utilizada, también ganamos una mayor performance.

TIPOS DE JOINS
NombreExplicación
INNER JOINEn esta sentencia solo se muestran los registros que coinciden tanto en la tabla A como la tabla B
LEFT JOING – RIGHT JOINEstos tipos de JOINS no excluyen resultados de alguna de las dos tablas, si hubiese campos que no coinciden podríamos incluirlos en el resultado mediante LEFT o RIGHT JOIN.

SQL Union

Union

El operador UNION se utiliza para combinar el conjunto de resultados de dos o más SELECT declaraciones.

Union ALL

El operador UNION selecciona solo valores distintos por defecto. Para permitir valores duplicados, utilice UNION ALL.

Subconsultas

Una subconsulta en SQL consiste en utilizar los resultados de una consulta dentro de otra, que se considera la principal. Si debemos incluir en la cláusula WHERE algún criterio de selección que existe en otra tabla, las subconsultas son el elemento ideal que nos permitirá recuperar los valores acordes a dicha condición.

Condiciones a tener en cuenta para usar la subconsultas:

Funciones

Otras funciones en SQL

El lenguaje SQL tiene también otras funciones incorporadas para hacer cálculos sobre los datos.

OTRAS FUNCIONES EN SQL
NombreExplicación
UCASE()Convierte el valor de un campo a mayúsculas.
LCASE()Convierte el valor de un campo en minúsculas.
NOW()Devuelve la hora y fecha actuales.
CONCAT()Ppermite concatenar textos de las columnas.
TRIM()Elimina los espacios vacíos en los extremos de un texto.
SPACE()Cuenta la cantidad de espacios en un bloque de texto.
CHAR_LENGTH()Cuenta los caracteres de un bloque de texto.
SUBSTRING()Extrae uno o más caracteres de un bloque de texto.
Funciones numéricas
  • SELECT (25/3) AS resultado_div
  • SELECT (25*3) AS resultado_mult
  • SELECT (25+3) AS resultado_sum
  • SELECT (25-3) AS resultado_rest
Las funciones numéricas nos permiten trabajar con distintos tipos de números, encontraremos del tipo operadores aritméticos, para realizar operaciones matemáticas básicas y funciones matemáticas.
Funciones matemáticas
ROUND()Redondeo estándar de un número.
FLOOR()Redondeo de un número hacia abajo.
CEILING()Redondeo de un número hacia arriba.
TRUNCATE()Elimina los decimales de un número.
Funciones fechas
CURDATE()Devuelve la fecha actual.
CURTIME()Devuelve la hora actual.
NOW()Combina los dos anteriores en un resultado.
DATEDIFF()Obtiene la diferencia de tiempo entre dos fechas.
DAYNAME()Retorna el nombre del día de semana de una fecha determinada.