Tipos de columnas usando / Creación de la tabla clientes

Clase 10 de 24Curso de SQL y MySQL 2018

Resumen

¿Cómo crear una tabla de clientes en MySQL?

Si estás buscando dominar el arte de manejar bases de datos, es fundamental que comprendas cómo crear tablas de manera eficiente. En este artículo, exploraremos a fondo el proceso de creación de una tabla de clientes en MySQL. Desde las llaves primarias hasta el manejo de fechas y tipos de datos avanzados, conocerás los conceptos claves que ayudarán a mantener la consistencia y la eficacia de tus datos.

¿Cómo definir las columnas básicas?

Comenzamos con la creación de una tabla de clientes. En este proceso, la clave primaria es el elemento central. Aquí es donde el client ID, o identificador del cliente, cobra relevancia, y lo definiremos como un entero (integer), sin signo (unsigned), que actuará como la llave primaria. Es aconsejable agregar autoincrement para asegurar que el ID se genere automáticamente y evitar duplicados al insertar nuevos registros.

CREATE TABLE IF NOT EXISTS Clientes (
  client_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  nombre VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL UNIQUE
);

¿Por qué es crucial la unicidad de los correos electrónicos?

El correo electrónico es una pieza de información vital en cualquier base de datos de clientes. En el diseño, es recomendable añadir una restricción de unicidad con UNIQUE, que asegura que cada email sea distinto dentro de la tabla. Esto previene registros duplicados de clientes basados en el mismo correo, simplificando así la gestión futura de datos.

¿Qué datos de fecha y hora utilizar?

Un aspecto importante al trabajar con MySQL es conocer el uso de TIMESTAMP y DATETIME. La diferencia principal es cómo se almacenan los datos. TIMESTAMP se basa en el número Epoch, que cuenta los segundos desde el 1 de enero de 1970, haciéndolo altamente eficiente para ciertos cálculos. En cambio, DATETIME es más flexible para fechas anteriores a 1970.

birthdate DATETIME NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • birthdate: Es aconsejable definirlo como DATETIME, ya que permite más rango en las fechas y no depende del número Epoch.
  • created_at_ y updatedat: Ambas columnas utilizan TIMESTAMP, que permite registrar de manera automática el momento de creación y actualización de un registro gracias al uso de DEFAULT CURRENT_TIMESTAMP y ON UPDATE CURRENT_TIMESTAMP.

¿Cómo manejar valores discretos o enumeraciones?

MySQL nos ofrece el tipo de dato ENUM para manejar columnas donde se limitan las opciones de valores posibles, como el género o estado de un cliente. En la tabla de clientes, podríamos tener la columna gender que limite las opciones a 'male', 'female', o 'ND' (no declararlo).

gender ENUM('male', 'female', 'ND') NOT NULL

¿Qué es el enfoque de "soft delete"?

En bases de datos, se recomienda no borrar datos. En su lugar, se sugiere implementar un método llamado "soft delete", donde se usa una columna para indicar si el registro está activo o inactivo. Esta práctica permite preservar el historial de datos y mantener la integridad referencial.

activo TINYINT(1) NOT NULL DEFAULT 1

La columna activo se define como un entero pequeño (TINYINT), con un valor por defecto de 1 (activo), que cambia a 0 (inactivo) cuando un registro ya no debe considerarse vigente.

¿Cómo llevar el control de operaciones complejas en una base de datos?

Para gestionar más eficientemente una base de datos que soporte transacciones complejas, como ventas o préstamos de libros, es crucial diseñar explícitamente una tabla que articule estos eventos. El siguiente paso en el desarrollo será la creación de una tabla de operaciones que contemple aspectos de negocio como el registro de clientes involucrados, tipos de operación, y el status de finalización de la misma.

CREATE TABLE IF NOT EXISTS Operaciones (
  operation_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  book_id INT UNSIGNED NOT NULL,
  client_id INT UNSIGNED NOT NULL,
  type ENUM('prestamo', 'venta', 'devuelto') NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  finished TINYINT(1) NOT NULL DEFAULT 0
);

El diseño meticuloso de tablas es un elemento estratégico en el manejo eficiente de bases de datos. ¡Sigue explorando y practicando, cada tabla que creas te acerca a dominar el fascinante mundo de bases de datos y al desarrollo robusto de aplicaciones!