Guía para principiantes para escribir esquemas de bases de datos mySQL

Al desarrollar un proyecto de software, uno de los aspectos más importantes, fundamentales e intrínsecos es un esquema de base de datos debidamente estructurado. Es el equivalente a cuando se construye una casa que necesita para asegurarse de que los cimientos estén colocados correctamente, de lo contrario, las posibilidades de construir una casa de calidad se reducen drásticamente.

Sorprendentemente más fácil de lo que uno pensaría, aprendamos las diversas facetas que se utilizan para escribir un esquema de base de datos bien diseñado.

Sintaxis de CREATE TABLE

Para comenzar, abra su editor de texto favorito. La creación de un esquema de base de datos no requiere más que un archivo de texto sin formato. Una base de datos consta de varias tablas, cada una de las cuales consta de columnas, y la sintaxis CREATE TABLE se utiliza para crear una única tabla. Aquí tienes un ejemplo básico:

 
CREATE TABLE users (
id INT NOT NULL,
is_active TINY INT NOT NULL,
full_name VAR CHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);

Como puede ver, esto creará una tabla de base de datos llamada usuarios que consta de cuatro columnas. Esta debe ser una declaración SQL bastante sencilla que comience con CREATE TABLE , seguida del nombre de las tablas de la base de datos, luego entre paréntesis las columnas de la tabla separadas por una coma.

Utilice tipos de columna correctos

Como se muestra arriba, las columnas que compondrán la tabla están separadas por comas. Cada definición de columna se compone de las mismas tres partes:

 COL_NAME    TYPE    [OPTIONS]

El nombre de la columna, seguido del tipo de columna, luego cualquier parámetro opcional. Entraremos en los parámetros opcionales más adelante, pero concentrándonos en el tipo de columna, a continuación se enumeran los tipos de columna más utilizados disponibles:

Tipo Descripción
EN T Entero, admite valores de hasta (+/-) 2,14 mil millones. La mayoría de los tipos de enteros más utilizados, pero también están disponibles los siguientes con los rangos respectivos:

  • TINYINT – 128. Excelente para valores booleanos (1 o 0).
  • PEQUEÑO – 32k
  • MEDIUMINT – 3,8 millones
  • BIGINT: 9,3 trillones.
VARCHAR (xxx) Cadena de longitud variable que admite prácticamente todos los datos no binarios. El xxx entre paréntesis es la longitud máxima que puede contener la columna.
DECIMAL (x, y) Almacena valores decimales / flotantes, como precios o cualquier valor numérico que no sea números enteros. Los números entre paréntesis de (x, y) definen la longitud máxima de la columna y el número de puntos decimales para almacenar. Por ejemplo, DECIMAL (8,2) permitiría que los números tengan un máximo de seis dígitos más formateados con dos decimales.
FECHA / HORA / HORA Ambos contienen la fecha y la hora en formato AAAA-MM-DD HH: II: SS. Debe usar TIMESTAMP para todos los metadatos de fila (es decir, creado en, actualizado por última vez, etc.) y DATETIME para todas las demás fechas (por ejemplo, fecha de nacimiento, etc.).
FECHA Similar a DATETIME, excepto que solo almacena la fecha en formato AAAA-MM-DD y no almacena la hora.
TEXTO Grandes bloques de texto, pueden almacenar hasta 65k caracteres. Los siguientes también están disponibles con sus respectivos rangos:

  • MEDIUMTEXT: 16,7 millones de caracteres.
  • LONGTEXT: 4.200 millones de caracteres.
GOTA Se utiliza para almacenar datos binarios como imágenes. Admite un tamaño máximo de 64 kb, y también se admite lo siguiente con los límites de tamaño respectivos:

  • TINYBLOG – 255 bytes
  • MEDIUMBLOB – 16 MB
  • LONGBLOG – 4GB
ENUM (opt1, opt2, opt3 …) Solo permite que el valor sea uno de los valores predefinidos especificados entre paréntesis. Bueno para cosas como una columna de estado (por ejemplo, activo, inactivo, pendiente).

A todos los efectos, los tipos de columna anteriores son todo lo que necesita para escribir esquemas de base de datos mySQL bien construidos.

Definir opciones de columna

Al definir columnas, también hay varias opciones que puede especificar. A continuación se muestra otro ejemplo de la declaración CREATE TABLE :

 
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
status ENUM('active','inactive') NOT NULL DEFAULT 'active',
balance DECIMAL(8,2) NOT NULL DEFAULT 0,
date_of_birth DATETIME,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Lo anterior puede parecer un poco abrumador, pero no se preocupe, es bastante simple. Desglosado, esto es lo que está sucediendo en la declaración anterior:

  • Siempre debe usar NOT NULL en todas las columnas posibles para ayudar con la velocidad y el rendimiento de la tabla. Esto simplemente especifica que la columna no se puede dejar vacía / nula cuando se inserta una fila.
  • Intente siempre mantener el tamaño de la columna lo más pequeño posible de manera realista, ya que ayuda a mejorar la velocidad y el rendimiento.
  • La columna de identificación es un número entero, también es la clave principal de la tabla, lo que significa que es única y se incrementará en uno cada vez que se inserte un registro. Por lo general, esto debe usarse en todas las tablas que cree para que pueda hacer referencia fácilmente a cualquier fila dentro de la tabla.
  • La columna de estado es un ENUM y debe tener un valor de "activo" o "inactivo". Si no se especifica ningún valor, una nueva fila comenzará con el estado de "activo".
  • La columna de saldo comienza en 0 para cada fila nueva y es una cantidad que tiene el formato de dos decimales.
  • La columna date_of_birth es simplemente una FECHA, pero también permite un valor nulo ya que es posible que la fecha de nacimiento no se conozca en el momento de la creación.
  • Por último, la columna created_at es un TIMESTAMP y tiene como valor predeterminado la hora actual cuando se insertó la fila.

Lo anterior es un ejemplo de una tabla de base de datos bien estructurada y debería usarse como ejemplo en el futuro.

Una de las mayores ventajas de usar bases de datos relacionales como mySQL es su excelente soporte para restricciones de clave externa y cascada. Esto es cuando vincula dos tablas juntas por una columna, formando una relación padre-hijo, por lo que cuando se elimina la fila principal, las filas secundarias necesarias también se eliminan automáticamente.

He aquí un ejemplo:

 
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
full_name VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) engine=InnoDB;
CREATE TABLE orders (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
userid INT NOT NULL,
amount DECIMAL(8,2) NOT NULL,
product_name VARCHAR(200) NOT NULL,
FOREIGN KEY (userid) REFERENCES users (id) ON DELETE CASCADE
) engine=InnoDB;

Notará la cláusula FOREIGN KEY como última línea. Esta línea simplemente indica que esta tabla contiene filas secundarias que están vinculadas por la columna de ID de usuario a su fila principal, que es la columna de ID de la tabla de usuarios . Lo que esto significa es que, cada vez que se elimina una fila de la tabla de usuarios , mySQL eliminará automáticamente todas las filas correspondientes de la tabla de pedidos , lo que ayuda a garantizar la integridad estructural dentro de su base de datos.

También tenga en cuenta el motor = InnoDB al final de la declaración anterior. Aunque InnoDB es ahora el tipo de tabla mySQL predeterminado, no siempre lo fue, por lo que esto debería agregarse solo para estar seguro, ya que la cascada solo funciona con tablas InnoDB.

Diseñe con confianza

Ahora está en camino de diseñar esquemas de base de datos mySQL sólidos y bien estructurados. Con el conocimiento anterior, ahora puede escribir esquemas bien organizados que proporcionen rendimiento e integridad estructural.

Con su esquema en su lugar, asegúrese de saber cómo usarlo con estos comandos SQL esenciales .