duduromeroa.com

Programación web

Introducción al estudio del lenguaje SQL para diseño de datos relacionales


www.duduromeroa.com, animación, lector, gif

Por Eduardo J. Romero Andrade

Guayaquil, Ecuador

Contacto duduromeroa@gmail.com

#SQL, #basededatos, #Guayaquil, #duduromeroa, #datosEstructurados


Puedes hallar reseñas de otros lenguajes informáticos en este vínculo.



Brevísima historia de SQL

Siglas en inglés de lenguaje de consulta estructurada. Fue creado por los ingenieros estadounidenses Donald Chamberlin (1944) y Raymond F. Boyce (1946-1974) en 1970, en la empresa estadounidense IBM, pero inspirados por las investigaciones de Charles Bachman, de General Electric; y Edgar Frank Codd (1923-2003) de IBM. Su objetivo fue crear tecnologías para organizar y acceder a conjuntos gigantes de datos, especialmente en economía, estadística y banca.
Fuente: Richie Cotton, '50 Years of SQL with Don Chamberlin, Computer Scientist and Co-Inventor of SQL', datacamp.com



Bases de datos: Alojar, alterar y acceder a datos

Una base de datos en informática es una extensa lista de menciones escritas, detallando objetos y propiedades, pero vinculadas en grupos en común, útiles para organizar y recuperar información mediante aparatos electrónicos que alojen (o permitan insertar) datos.

En otras palabras, una base de datos guarda información de cosas diferentes (en atributos), pero también las relaciones y asociaciones entre esas cosas. A cada una de esas 'cosas' les llamaremos entidades (por que cada cosa tiene de alguna forma una diferencia), cuya principal expresión es la tabla de datos (Grippa, Kuzmichev, 2021).

Para Grippa, Kuzmichev (2021), "Un estudiante y un curso son entidades, mientras que la inscripción es una relación entre un estudiante y un curso. De manera similar, una base de datos de ventas puede almacenar información (en forma de tablas) sobre productos (una tabla), clientes (otra tabla) y ventas (otra tabla). Un producto y un cliente son entidades, y una venta es una relación entre un cliente y un producto".

Por ejemplo, una lista de elementos en común sería las compras de víveres en casa. Pero habría confusión si insertamos allí datos sin relación con la compra de alimentos, como una lista de canciones o el costo de la matrícula de un auto, por ejemplo.

Nuestras madres o abuelas ya podían entender la necesidad de enlistar elementos cuando nos enviaban a un mandado. En esa lista, el nombre de cada elemento junto con su propiedad (un significado determinado) nos daban una guía para realizar la compra:


Cantidad de dinero --> 5$
Pan       --> 5 unidades
Galletas  --> una funda
Avena     --> 1 Kilo
Arroz     --> 1 libra

Esa lista de compras (una entidad) tiene algo en común con una entidad de una base de datos: primero, allí hay atributos (cada elemento representa una cosa, y cada cosa tiene un valor). Luego, también hay relaciones de significado entre los datos.

¿Qué diferencia a una entidad de otra?. Los atributos y sus valores son los que diferencian cada entidad, pues los productos de una entidad no serán los mismos que los prouductos de otra.

Cantidad, vínculo y significado.

Todo conjunto de elementos agrupan tres propiedades: cantidad, vínculo y significado. Por ejemplo, si tenemos tres manzanas de diferente color sobre la mesa será fácil vincular sus propiedades (como su color, su costo por unidad, su procedencia, entre otros) a esa cantidad de manzanas.

En otro caso, si tenemos cien manzanas (rojas, verdes, amarillas) las propiedades a determinar serán mayores: ¿Cuántas manzanas verdes hay?, ¿son todas del mismo proveedor?. Imagine ahora cien mil o un millón de manzanas.

Base de datos

En resumen, la expresión 'base de datos' refiere a uno o más conjuntos de datos y propiedades que pueden ser identificados, relacionados entre sí, clasificados o accedidos mediante cómputo, para mostrarlos y evaluarlos. Además de eso, una base de datos 'ayuda a responder preguntas'.

Ejemplo de base de datos

Objeto | Cantidad | Costo unitario | Total 
Pan      5          $0.30             $1.50
Gallet   10         $0.15             $1.50
Avena    1          $1.10             $1.10

Total objetos comprados: 16
Pago total: $4.10 

Pregunta: ¿Qué productos están entre los rangos de $0.00 a $0.40? Una simple observación indica que la respuesta es 'el pan y las galletas'.

Siglos atrás la captura de datos y su análisis era más complicado. Por ejemplo, durante la toma de datos demográficos en territorio ecuatoriano, iniciado en Quito en 1778 por Juan Josef de Villalengua. Allí debió ser difícil hallar respuestas al tener únicamente cientos de listas escritas a mano. Eso lo encararon los primeros encuestadores cuando registraron en 1842 (a mano y en papel) a 20.000 guayaquileños. Recién en 1982 el censo nacional iniciará su tecnificación (Miño G., 2015, p. 15, 24)

Hoja de censo en Ecuador, de 1781. Ciudad ecuatoriana no determinada, estudio del lenguaje SQL para acceso a datos relacionales y estructurados, www.duduromeroa.com
Hoja de datos dibujada a mano, de ciudad ecuatoriana no determinada, fechada en 1781 para los primeros censos en territorio ecuatoriano. Fuente: Miño G., Wilson; INEC (2015) en Una mirada histórica a las estadísticas del Ecuador

Si bien antiguos pueblos en todo el mundo han recopilado datos con métodos artesanos desde hace siglos, poco a poco fue necesario aplicar nueva tecnología, especialmente al crearse las computadoras como aparatos de cálculo veloz, desde 1945.

Una moderna técnica para alojar y clasificar miles de datos desde computadores es un sistema de código llamado estándart SQL (lenguaje de consulta y búsqueda, en inglés), creado y mejorado desde 1970 por la industria tecnológica estadounidense para administrar datos a mediana y gran escala desde varios sistemas electrónicos.

El lenguaje SQL es ahora un estándart, es decir, es un padre fundamento de otras versiones-hijo de ese lenguaje. A continuación daré una breve introducción visual de los tres conceptos principales que motivaron el estudio de bases de datos desde la electrónica. Pero si desea acceder de inmediato a la sintaxis de una de las versiones-hijo más usadas del estándart SQL (este es, MySQL), ingrese a este vínculo.

Orden y organización de datos

Ejemplos de estructura de datos

ATENCIÓN A continuación, los textos en caja gris solo muestran ejemplos de cada estructura base (jerárquica, en red, relacional). Aún no es código SQL formal.


Base de datos jerárquica

Organizado en forma de árbol, con elementos (o nodos) que funcionan como padres del que derivan hijos, una forma de organización llamada single-parent hierarchy (Beaulieu, 2019). Abajo, un ejemplo únicamente visual de la estructura:


├── Grupos musicales 
│   ├── Rock
│   │   ├── Banda A ──| Ciudad: Guayaquil
│   │   ├── Banda B ──| Ciudad: Cuenca
│   │   └── Banda C ──| Ciudad: Manta
|   |
│   └── Tropical
│       ├── Banda D ──| etc...
│       ├── Banda E
│       └── Banda F

Base de datos en sistema de red

Organizado en forma de nodos vinculados o relacionados entre sí, con líneas de ida y venida (de acciones, o eventos) entre nodos.

Para identificar un evento, primero se deberá ubicar el nodo correspondiente a ese evento, y de allí recorrer la línea de acción hacia los demás eventos. Cada nodo puede ser accedido desde otros nodos según corresponda el evento a ubicar, similar a "navegar entre nodos" (Beaulieu, 2019).


CLIENTE         ACCION          FECHA          PAIS      
Eduardo         Compra         2025.01.01       Ecu
                    Reinicia < ------------------------|
                Devolucion      2025.01.05----> Ecu    |
                Cancela pago    2025.01.06      Ecu ---|

Adrian          Compra          2024.05.10      Chi
                Entregado       2024.05.10      Chi

Base de datos relacional

Como fue comentado al inicio de esta sección, el aporte de Edgar Frank Codd fue definir los datos en forma de tablas (o entidades, porque refieren a un solo elemento u objeto), relacionando cada entidad con otras entidades.

En otras palabras, lo relacional ocurre de dos modos: cuando un dato tiene un significado con relación a otros datos; y cuando una entidad o tabla puede ser vinculada gracias a uno o más datos desde otra tabla. Por ejemplo, una tabla con los nombres de todos los estudiantes de un aula puede ser vinculada a otra tabla de calificaciones del semestre.

Es decir, una tabla (o entidad) podría estar vinculada a otras varias entidades. Y cada fila de cada tabla también estaría vinculada en otras tablas; ya sea porque ese nodo se repite entre tablas o el dato que contiene es útil en las demás tablas.

El ejemplo de abajo da una idea de cómo es una estructura relacional entre tres tablas:

  • Cada tabla es una entidad (los literales A, B, C solo son de ejemplo).
  • Cada columna contiene filas.
  • Una sola columna CP (clave primaria, en inglés Primary Key o PK) identifica irrepetiblemente cada fila de datos. Las claves primarias son automáticas y van en secuencia numérica. Por ejemplo, en la TABLA A hay dos propietarios con el mismo nombre y en la misma ciudad. Por lo que una única clave los diferencia.
  • Más de una columna de claves primarias en una sola tabla se denominan claves compuestas (composite key). Las claves compuestas permiten identificar más de un dato que necesariamente aparecerá más de una vez en una misma tabla. Por ejemplo, en la TABLA A las columnas CP_TIENDA y CP_CIUDAD permiten identificar a un solo propietario, pero también a una sola ciudad. Incluso, más de una ciudad está presente con su propia clave (como en el caso de 01Gye).
  • Finalmente, podremos insertar una columna CP (clave primaria) dentro de otra tabla o entidad y así crear uniones entre tablas. Cuando una CP está insertada en otra tabla, entonces esa columna CP se denomina clave foránea o externa. Por ejemplo, en la TABLA C, la columna [CP_TIENDA_TABLA_A] es clave foránea (es decir, viene de) la TABLA A.

COLUMNA A      COLUMNA B 
Fila 1 ------- Fila 1... 
Fila 2 ------- Fila 2... 

CP: Clave primaria
--------------------------------
TABLA (A) 
--------------------------------
CP_TIENDA  CP_CIUDAD  PROPIETARIO   NOMBRE     
01         01Gye      Ana           Tienda Rosita          
02         01Gye      Ana           Tienda Anita
03         03Cue      Juancito      Tienda Rock&Roll

--------------------------------   
TABLA (B) 
--------------------------------        
CP  FRUTA    CP_PAIS  COLOR     
10  Banano   11Ecu    Amarillo
11  Manzana  11Chi    Verde

--------------------------------   
TABLA (C) 
--------------------------------
CP  [CP_TIENDA_TABLA_A] SALDO   
22  01                  $100       
23  02                  $135

En el ejemplo dado arriba vemos que las claves primarias (CP, como CP_TIENDA en la TABLA A) se convierten en claves foráneas (CF, como [CP_TIENDA_TABLA_A] en la TABLA C) cuando las primarias se repiten (o redundan) en otra tabla. ¿Significa eso que podemos repetir o redundar cualquier columna de otras tablas?

La respuesta a eso es: únicamente (y en caso de ser necesario) podremos repetir (o insertar en otra tabla) la columna que contengan únicamente claves primarias (CP). Puesto que una sola clave primaria es única y representa una única fila de datos (que a lo largo del tiempo podrán cambiar).

En el ejemplo de abajo, la columna de claves primarias en TABLA_FELIZCUMPLE identifican a dos personas diferentes, con igual fecha de cumpleaños. Así mismo, en la TABLA_REGALITOS será útil repetir (o redundar) la columna de claves primarias de la primera tabla para identificar externamente el regalo de cada Juan.


-----------------
TABLA_FELIZCUMPLE
-----------------
CP NOMBRE APELLIDO  FECHA
01 Juan   Aguirre   10Enero
02 Juan   Chalca    10Enero  

-----------------
TABLA_REGALITOS
-----------------
CP  [CP_FELIZCUMPLE]  REGALO
03  01                Un gato
04  02                Ir al cine 

Base de datos con estructura no relacional o NoSQL

Es un método diferente a la estructura relacional entre datos; es decir, al vínculo entre tablas de datos y claves primarias). La estrucura no relacional (también llamada NoSQL) es una alternativa a la estructura relacional.

La estructura NoSQL omite la conexión entre tablas, y en caso que esos datos requieran ampliar su alojamiento, los datos se distribuirán entre varios alojamientos de cómputo (llamados servidores). También permite usar más de una estructura de datos (SQL solo permite la relacional).

Las bases de datos con estructura NoSQL permiten, además de guardar datos mediante columnas o tablas, hacerlo también en columnas clave-valor (por ejemplo, 'nombre: Javier'; 'apellido': 'Andrade'), o mediante arreglos o matrices (por ejemplo, colores [azul, rojo, amarillo, ...]) (IBM, 2022).

Uno de los lenguajes usados para crear bases de datos NoSQL (no relacionales) es JSON (notación de objeto de JavaScript, en español, sintaxis de ejemplo, abajo). Para una revisión amplia, he creado en la siguiente sección una introducción a JSON, su sintaxis y correcta aplicación.

Estructura de datos desde la sintaxis del lenguaje JSON

{
  "comentario_general": "Abre un arreglo",
  "equipos": [
    {
      "comentario": "Abre un objeto: Equipos de la costa",
      "Emelec": "campeón",
      "Barcelona": "vice",
      "GuayaquilCity": "tercer lugar"
    },
    {
      "comentario": "Abre un objeto: Equipos de la sierra",
      "LigaQ": "campeón",
      "Aucas": "vice",
      "ElNacional": "tercer lugar"
    }
  ]
}

Finalmente, softwares para gestionar gratuitamente bases de datos NoSQL están Amazon Dynamo, Apache Cassandra (requiere Docker); y de pago, MongoDB. En un futuro haré una breve reseña de uno de ellos.

Siguiento con la estructura relacional de SQL, a su sintaxis inicial se lo considera un estándart (es decir, un código base fundamento que alimentará otras versiones mejoradas). Después de la década de 1970 el estándart SQL alimentó y derivó nuevos enfoques en pos de organizar enormes cantidades de datos y extraer de ellos información útil.

Es por esa razón que hoy en día existen versiones SQL adaptadas para diversas soluciones, pero nutridas del estándart SQL. Algunas de esas versiones SQL son:

  • SQL Server: Software comercial para extensos conjuntos de datos empresariales.
  • SQLite: Versión de código abierto que simplifica el alojamiento de datos, no exige un servidor activo (usa el propio aparato de cómputo para alojar los datos), pero no permite consulta complejas. Muy usado en móviles y otros electrónicos.
  • PostgreSQL: De código abierto, muy usado en análisis de datos científicos y de finanzas.
  • MySQL: Popular gracias a su fácil instalación, conjunción con el lenguaje PHP y por sus diferentes versiones para sistemas operativos no actualizados. Será la versión usada para las siguientes explicaciones.
  • MariaDB: De código abierto, es una versión más avanzada y no comercial de MySQL. No instala en equipos iMac.
  • Oracle Database: Para conjuntos de datos extensos que exigen fuerte rendimiento y seguridades.

De aquí en adelante se revisará con más detalle una versión del estándart SQL: MySQL.