Bases de Datos Relacional, principios básicos de cómo diseñar una

Base de Datos
Primero empecemos por saber qué es una Base de Datos: es una colección de información organizada de cierta manera que una aplicación pueda buscar y operarla de manera eficiente y confiable, desde algo tan simple como hoja de excel hasta una distribuída en muchos archivos e índices.
Hay dos principales tipos de bases de datos:
Relacionales (SQL)
Son tipos de bases de datos muy intuitivas y directas, ordenadas en forma de tablas y registros relacionadas entre sí por medio de índices. Las tablas a su vez son compuestas por registros y estos en campos. Los gestores de bases de datos relacionales más comunes son:
No Relacionales (NoSQL)
Este no se organiza de manera tabular (tablas, registros y campos), se diseña de manera optimizada al tipo de aplicación para el cuál será usada: Pares de clave/valor, JSON o grafos, etc.
Para fines de este tutorial, utilizaremos MySQL
Estructura Básica
Tablas
Es una representación de los datos en formas de renglones y columnas, donde cada columna representa un tipo de dato en definido con un tamaño determinado y cada renglón un grupo de columnas identificado por un índice único. En este definición, cada columna es un campo y cada renglón es un registro. Haciendo una analogía a MS Excel, esto sería una hoja de excel.
Registro
Conjunto de datos definidos por los campos que mantienen una cierta vinculación entre sí. Por ejemplo, este es un registro en una tabla llamada payments: incluye un id o identificador único que servirá de índice primario, el payment_type_id (que es relación a otra tabla, lo veremos mas adelante) lo mismo que el membership_id, amount o la cantidad pagada, reference como número de referencia y fechas de creación y modificación. En nuestra analogía, esto sería un renglón.
Campo
Los campos determinan qué información y de qué tipo se almacenará en las tablas. MySQL permite los siguiente tipos de datos (enumero los mas comunes):
- Números Enteros: TINYIN, SMALLINT, MEDIUMINT, INT y BIGINT.
- Números con punto flotante: FLOAT y DOUBLE.
- Hora y Fecha: DATE, DATETIME y TIMESTAMP.
- Cadenas de caracteres: CHAR y VARCHAR
- Textos grandes: TEXT y BLOB
Referencia: https://www.w3resource.com/mysql/mysql-data-types.php
Índice
Estos son campos usados como referencias de dónde se encuentran los datos. Así como en los libros usamos el número de página, acá usamos los índices. Al usar índices obtenemos las siguientes ventajas:
- Evita hacer búsquedas secuenciales (registro por registro) para encontrar la información.
- Tenemos la información en una sola operación.
- Esto hace más eficientes las búsquedas.
Los índices mas comumente definidos en las tablas son:
- PRIMARY KEY: Llamado también id, este generalmente debe ser un entero, único y secuencial.
- FOREIGN KEY: Son campos que hacen referencia a otras tablas. En el ejemplo de arriba, serían payment_type_id y membership_id que hacen referencia a las tablas payment_types y memberships respectivamente.
- INDEX: Que son campos frecuentemente usados en las búsquedas, por ejemplo, nombres, ciudades, etc.
Existen también algunas desventajas de usar demasiados, como el uso de espacio extra, operaciones adicionales al insertar, modificar o borrar archivos, entre otras. Así que sé cuidadoso de cuántos índices utilizarás y dónde. Acá un poco mas de información https://vanseodesign.com/web-design/mysql-indexes/
Ejemplo
Recomendaciones
Pueden usar la extensión diagram de Google Docs para diseñar su base de datos.
- Una tabla siempre (la gran mayoría de las veces) llevará un campo id, que será su índice primario, único y autoincrementable.
- Si un dato es susceptible a repetirse muchas veces, quizá lo mejor sea crear una nueva tabla y usar referencias: Por ejemplo, si almacenaremos el tipo de sangre del usuario, lo mejor sería hace una tabla con todos los tipos de sangre y en la tabla de usuarios tener una referencia a ella, por ejemplo blood_type_id.
- Los nombres de las tablas van en plural.
- Los nombres de los campos en singular.