Modelado físico relacional de bases de datos

Introducción a DDL

El Lenguaje de Definición de Datos (DDL) se utiliza para definir y modificar la estructura de las bases de datos y sus objetos, como tablas, índices y vistas. Los principales comandos de DDL son CREATE, ALTER, y DROP.


Comando CREATE

Sintaxis básica de CREATE TABLE:

1CREATE TABLE tabla (
2  columna1 tipo_dato,
3  columna2 tipo_dato,
4  ...
5);

Ejemplo:

1CREATE TABLE estudiantes (
2  id INT PRIMARY KEY,
3  nombre VARCHAR(50),
4  edad INT,
5  clase VARCHAR(50)
6);

Este comando crea una tabla llamada estudiantes con cuatro columnas: id, nombre, edad, y clase.

Consideraciones

  • Orden de las columnas: En CREATE TABLE, el orden en que defines las columnas es importante. Las restricciones de clave primaria y foránea, por ejemplo, deben estar definidas de manera apropiada.
  • Indices: Los índices pueden ser creados explícitamente para mejorar el rendimiento de las consultas. Algunos índices, como los índices de clave primaria y foránea, se crean automáticamente.

Comando ALTER

El comando ALTER TABLE en SQL se utiliza para modificar la estructura de una tabla existente en una base de datos. Este comando permite realizar varias operaciones de cambio en la tabla, tales como agregar, eliminar o modificar columnas, así como modificar las restricciones y otros elementos de la tabla.

Sintaxis básica de ALTER TABLE

1ALTER TABLE nombre_tabla
2[acción];

Donde:

  • nombre_tabla es el nombre de la tabla que deseas modificar.
  • acción es la operación que deseas realizar sobre la tabla.

Operaciones comunes con ALTER TABLE

  1. Agregar una columna (ADD): Puedes agregar una nueva columna a una tabla existente utilizando la palabra clave ADD.

    Sintaxis:

    1ALTER TABLE nombre_tabla
    2ADD nombre_columna tipo_dato;

    Ejemplo: Agregar una columna telefono de tipo VARCHAR(15) a la tabla clientes:

    1ALTER TABLE clientes
    2ADD telefono VARCHAR(15);
  2. Eliminar una columna (DROP COLUMN): Puedes eliminar una columna de una tabla utilizando DROP COLUMN.

    Sintaxis:

    1ALTER TABLE nombre_tabla
    2DROP COLUMN nombre_columna;

    Ejemplo: Eliminar la columna telefono de la tabla clientes:

    1ALTER TABLE clientes
    2DROP COLUMN telefono;
  3. Modificar una columna (MODIFY COLUMN o CHANGE): Puedes cambiar el tipo de datos o las propiedades de una columna existente con MODIFY COLUMN (en algunos SGBDs, como MySQL) o CHANGE (en otros).

    Sintaxis:

    1ALTER TABLE nombre_tabla
    2MODIFY COLUMN nombre_columna nuevo_tipo_dato;

    Ejemplo: Cambiar el tipo de la columna edad de tipo INT a SMALLINT en la tabla clientes:

    1ALTER TABLE clientes
    2MODIFY COLUMN edad SMALLINT;
  4. Renombrar una columna (RENAME COLUMN): Algunos SGBDs permiten renombrar una columna con el comando RENAME COLUMN.

    Sintaxis:

    1ALTER TABLE nombre_tabla
    2RENAME COLUMN nombre_columna_antiguo TO nombre_columna_nuevo;

    Ejemplo: Renombrar la columna telefono a numero_telefono en la tabla clientes:

    1ALTER TABLE clientes
    2RENAME COLUMN telefono TO numero_telefono;
  5. Renombrar una tabla (RENAME TO): Puedes renombrar la tabla completa utilizando RENAME TO.

    Sintaxis:

    1RENAME TABLE nombre_tabla TO nuevo_nombre_tabla;

    Ejemplo: Renombrar la tabla clientes a clientes_nuevos:

    1ALTER TABLE clientes
    2RENAME TO clientes_nuevos;
  6. Agregar una restricción (ADD CONSTRAINT): Puedes agregar restricciones como PRIMARY KEY, FOREIGN KEY, UNIQUE, etc., a una tabla existente.

    Sintaxis:

    1ALTER TABLE nombre_tabla
    2ADD CONSTRAINT nombre_restricción tipo_restricción (columna);

    Ejemplo: Agregar una clave primaria a la columna id de la tabla clientes:

    1ALTER TABLE clientes
    2ADD CONSTRAINT pk_id PRIMARY KEY (id);
  7. Eliminar una restricción (DROP CONSTRAINT): Puedes eliminar restricciones de una tabla utilizando DROP CONSTRAINT.

    Sintaxis:

    1--⚠️ En MySQL, se usa DROP FOREIGN KEY para eliminar claves foráneas, y no DROP CONSTRAINT.
    2ALTER TABLE nombre_tabla
    3DROP FOREIGN KEY nombre_restricción;

    Ejemplo: Eliminar la restricción pk_id (clave primaria) de la tabla clientes:

    1ALTER TABLE clientes DROP PRIMARY KEY;

Consideraciones

  • Dependencias: Al modificar una columna o restricción, debes considerar las dependencias que puedan existir, como claves foráneas que referencian otras tablas.
  • SGBD y sintaxis: La sintaxis exacta puede variar según el sistema de gestión de bases de datos (SGBD) que estés utilizando. Por ejemplo, MySQL usa MODIFY COLUMN mientras que en otros SGBDs como PostgreSQL, se usa SET DATA TYPE.

Comando DROP

El comando DROP TABLE en SQL se utiliza para eliminar una tabla completa de la base de datos, incluyendo todos los datos almacenados en la tabla, la estructura de la tabla (es decir, las definiciones de columnas y sus propiedades), y cualquier índice o restricciones asociadas a esa tabla. Esta operación es irreversible, lo que significa que una vez que se elimina la tabla, no se puede recuperar, a menos que tengas un respaldo de los datos.

Sintaxis de DROP TABLE

1DROP TABLE nombre_tabla;
  • nombre_tabla: Es el nombre de la tabla que deseas eliminar.

Ejemplo de uso

Imagina que tienes una tabla llamada clientes y deseas eliminarla de la base de datos. El comando sería:

1DROP TABLE clientes;

Este comando eliminará:

  • La tabla clientes.
  • Todos los datos almacenados en la tabla.
  • Cualquier índice, clave primaria, clave foránea u otras restricciones asociadas a esa tabla.

Consideraciones importantes

  1. Irreversibilidad: Al ejecutar DROP TABLE, la tabla se elimina permanentemente de la base de datos. Si la tabla contiene datos importantes, asegúrate de realizar un respaldo antes de usar este comando.

  2. Dependencias: Si la tabla que estás eliminando tiene dependencias (por ejemplo, si existen claves foráneas en otras tablas que referencian a esta tabla), algunas bases de datos pueden generar un error. Es recomendable verificar que no haya dependencias antes de eliminar una tabla.

  3. Espacio en disco: Aunque DROP TABLE elimina los datos de la tabla, es posible que los archivos de datos de la base de datos no se liberen inmediatamente (dependiendo del sistema de gestión de bases de datos).

  4. No afecta otras tablas: El comando DROP TABLE solo afecta a la tabla específica que se menciona en el comando. Otras tablas o objetos en la base de datos no se verán afectados.

Variantes de DROP TABLE

  • Eliminar múltiples tablas: Puedes eliminar varias tablas de la base de datos en una sola operación separando los nombres de las tablas con comas.

    Sintaxis:

    1DROP TABLE tabla1, tabla2, tabla3;

    Ejemplo:

    1DROP TABLE clientes, empleados, productos;

    Esto eliminará las tres tablas de la base de datos.

  • IF EXISTS: Para evitar errores si la tabla no existe, puedes agregar la cláusula IF EXISTS. Esto le dice a la base de datos que no genere un error si la tabla que intentas eliminar no se encuentra.

    Sintaxis:

    1DROP TABLE IF EXISTS nombre_tabla;

    Ejemplo:

    1DROP TABLE IF EXISTS clientes;

    En este caso, si la tabla clientes no existe, no se generará un error.


Comando TRUNCATE

El comando TRUNCATE en SQL se utiliza para eliminar todos los registros de una tabla de manera rápida y eficiente, pero manteniendo la estructura de la tabla intacta. A diferencia de DROP, que elimina completamente la tabla, TRUNCATE solo borra los datos dentro de la tabla, dejando la estructura (columnas, índices, restricciones, etc.) lista para almacenar nuevos datos.

Sintaxis básica de TRUNCATE

(no es compatible con SQLite)

1TRUNCATE TABLE nombre_tabla;
  • nombre_tabla: Es el nombre de la tabla de la cual deseas eliminar todos los registros.

Ejemplo de uso

Si tienes una tabla llamada clientes y deseas eliminar todos sus registros, pero conservar la tabla y su estructura, utilizarías el siguiente comando:

(no es compatible con SQLite)

1TRUNCATE TABLE clientes;

Este comando eliminaría todos los registros de la tabla clientes de forma rápida, pero no eliminaría la tabla ni afectaría sus definiciones (como las columnas o restricciones).

Características y ventajas de TRUNCATE

  1. Rendimiento más rápido: En comparación con el comando DELETE, TRUNCATE es más rápido porque no registra cada eliminación de fila individualmente en el log de transacciones. Esto es especialmente útil cuando se necesita vaciar grandes tablas, ya que TRUNCATE es una operación de alto rendimiento.

  2. No afecta la estructura de la tabla: Mientras que DROP TABLE elimina completamente la tabla, TRUNCATE solo elimina los datos y deja la tabla en su lugar. La estructura de la tabla (columnas, índices, restricciones) sigue siendo la misma.

  3. No dispara triggers: En muchos sistemas de bases de datos, los triggers (disparadores) no se ejecutan cuando se utiliza TRUNCATE, a diferencia de DELETE, que sí dispara los triggers. Esto puede ser ventajoso en algunos casos si no necesitas que los triggers se activen al eliminar los datos.

  4. Reinicio de los contadores de autoincremento: Dependiendo del SGBD, al utilizar TRUNCATE, los contadores de columnas con la propiedad AUTO_INCREMENT (por ejemplo, las claves primarias autoincrementales) pueden restablecerse a su valor inicial (generalmente 1). Esto no ocurre con DELETE.

  5. No permite condiciones: A diferencia de DELETE, que permite utilizar la cláusula WHERE para eliminar registros específicos, TRUNCATE elimina todos los registros de la tabla sin excepción. No puedes especificar una condición como WHERE con TRUNCATE.

Diferencias entre TRUNCATE y DELETE

  • DELETE:

    • Elimina filas una por una.
    • Puede usar WHERE para eliminar registros específicos.
    • Registra cada eliminación en el log de transacciones.
    • Dispara los triggers de eliminación (si están configurados).
    • Es más lento que TRUNCATE para grandes volúmenes de datos.
  • TRUNCATE:

    • Elimina todas las filas de la tabla de una vez.
    • No puede usar WHERE.
    • No registra cada eliminación de fila individualmente en el log de transacciones.
    • No dispara los triggers.
    • Es más rápido y eficiente que DELETE cuando se trata de eliminar todos los registros de una tabla.

Consideraciones y limitaciones

  • No se puede deshacer: TRUNCATE es irreversible. Si eliminas los datos de una tabla con TRUNCATE, no podrás recuperarlos a menos que hayas realizado un respaldo previamente.

  • Restricciones y dependencias: Si la tabla tiene claves foráneas que la referencian (relaciones con otras tablas), es posible que no puedas truncar la tabla hasta que elimines o modifiques las dependencias.

  • Privilegios: Los usuarios deben tener privilegios suficientes para ejecutar TRUNCATE, ya que es una operación que afecta a toda la tabla.

Ejemplo en contexto

Supongamos que tienes una tabla llamada ventas con los registros de todas las ventas realizadas en tu sistema. Si por alguna razón deseas vaciar esta tabla pero seguir usando la misma estructura para las nuevas ventas, puedes utilizar TRUNCATE:

1TRUNCATE TABLE ventas;

Este comando eliminaría todas las ventas registradas en la tabla ventas sin borrar la tabla en sí, lo que te permitiría seguir agregando nuevos registros sin la necesidad de crear una nueva tabla.

  • Loading...