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_tablaes el nombre de la tabla que deseas modificar.acciónes la operación que deseas realizar sobre la tabla.
Operaciones comunes con ALTER TABLE
-
Agregar una columna (
ADD): Puedes agregar una nueva columna a una tabla existente utilizando la palabra claveADD.Sintaxis:
1ALTER TABLE nombre_tabla 2ADD nombre_columna tipo_dato;Ejemplo: Agregar una columna
telefonode tipoVARCHAR(15)a la tablaclientes:1ALTER TABLE clientes 2ADD telefono VARCHAR(15); -
Eliminar una columna (
DROP COLUMN): Puedes eliminar una columna de una tabla utilizandoDROP COLUMN.Sintaxis:
1ALTER TABLE nombre_tabla 2DROP COLUMN nombre_columna;Ejemplo: Eliminar la columna
telefonode la tablaclientes:1ALTER TABLE clientes 2DROP COLUMN telefono; -
Modificar una columna (
MODIFY COLUMNoCHANGE): Puedes cambiar el tipo de datos o las propiedades de una columna existente conMODIFY COLUMN(en algunos SGBDs, como MySQL) oCHANGE(en otros).Sintaxis:
1ALTER TABLE nombre_tabla 2MODIFY COLUMN nombre_columna nuevo_tipo_dato;Ejemplo: Cambiar el tipo de la columna
edadde tipoINTaSMALLINTen la tablaclientes:1ALTER TABLE clientes 2MODIFY COLUMN edad SMALLINT; -
Renombrar una columna (
RENAME COLUMN): Algunos SGBDs permiten renombrar una columna con el comandoRENAME COLUMN.Sintaxis:
1ALTER TABLE nombre_tabla 2RENAME COLUMN nombre_columna_antiguo TO nombre_columna_nuevo;Ejemplo: Renombrar la columna
telefonoanumero_telefonoen la tablaclientes:1ALTER TABLE clientes 2RENAME COLUMN telefono TO numero_telefono; -
Renombrar una tabla (
RENAME TO): Puedes renombrar la tabla completa utilizandoRENAME TO.Sintaxis:
1RENAME TABLE nombre_tabla TO nuevo_nombre_tabla;Ejemplo: Renombrar la tabla
clientesaclientes_nuevos:1ALTER TABLE clientes 2RENAME TO clientes_nuevos; -
Agregar una restricción (
ADD CONSTRAINT): Puedes agregar restricciones comoPRIMARY 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
idde la tablaclientes:1ALTER TABLE clientes 2ADD CONSTRAINT pk_id PRIMARY KEY (id); -
Eliminar una restricción (
DROP CONSTRAINT): Puedes eliminar restricciones de una tabla utilizandoDROP 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 tablaclientes: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 COLUMNmientras que en otros SGBDs como PostgreSQL, se usaSET 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
-
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. -
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.
-
Espacio en disco: Aunque
DROP TABLEelimina 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). -
No afecta otras tablas: El comando
DROP TABLEsolo 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áusulaIF 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
clientesno 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
-
Rendimiento más rápido: En comparación con el comando
DELETE,TRUNCATEes 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 queTRUNCATEes una operación de alto rendimiento. -
No afecta la estructura de la tabla: Mientras que
DROP TABLEelimina completamente la tabla,TRUNCATEsolo elimina los datos y deja la tabla en su lugar. La estructura de la tabla (columnas, índices, restricciones) sigue siendo la misma. -
No dispara triggers: En muchos sistemas de bases de datos, los triggers (disparadores) no se ejecutan cuando se utiliza
TRUNCATE, a diferencia deDELETE, que sí dispara los triggers. Esto puede ser ventajoso en algunos casos si no necesitas que los triggers se activen al eliminar los datos. -
Reinicio de los contadores de autoincremento: Dependiendo del SGBD, al utilizar
TRUNCATE, los contadores de columnas con la propiedadAUTO_INCREMENT(por ejemplo, las claves primarias autoincrementales) pueden restablecerse a su valor inicial (generalmente 1). Esto no ocurre conDELETE. -
No permite condiciones: A diferencia de
DELETE, que permite utilizar la cláusulaWHEREpara eliminar registros específicos,TRUNCATEelimina todos los registros de la tabla sin excepción. No puedes especificar una condición comoWHEREconTRUNCATE.
Diferencias entre TRUNCATE y DELETE
-
DELETE:- Elimina filas una por una.
- Puede usar
WHEREpara 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
TRUNCATEpara 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
DELETEcuando se trata de eliminar todos los registros de una tabla.
Consideraciones y limitaciones
-
No se puede deshacer:
TRUNCATEes irreversible. Si eliminas los datos de una tabla conTRUNCATE, 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...