SQL

Creación y Organización de Bases de Datos en T-SQL

Creación de Bases de Datos: CREATE DATABASE

La sentencia CREATE DATABASE forma parte de las instrucciones DDL (Data Definition Language) de SQL. Su función principal es asignar el espacio físico en disco e inicializar los archivos del motor para dar de alta una nueva base de datos operativa.

Sintaxis

CREATE DATABASE <nombre_base_de_datos>;

Desglose de elementos

  • CREATE DATABASE: Comando DDL obligatorio que instruye al motor a instanciar la base de datos.
  • <nombre_base_de_datos>: Identificador asignado a la base de datos en el servidor. Debe cumplir con las reglas de identificadores de Transact-SQL: no contener espacios ni caracteres especiales (salvo el guion bajo _) y no coincidir con palabras reservadas del lenguaje.

Ejemplo práctico

CREATE DATABASE EmpresaDB;
-- Salida esperada:
-- Commands completed successfully.

Contexto de Ejecución: Comando USE

La instrucción USE cambia el contexto de la sesión actual del cliente a la base de datos especificada. Es indispensable para asegurar que las operaciones posteriores sobre objetos (tablas, vistas, procedimientos) se ejecuten en la base correcta y no sobre la base por defecto del usuario (como master).

Sintaxis

USE <nombre_base_de_datos>;

Desglose de elementos

  • USE: Instrucción de control de contexto de sesión.
  • <nombre_base_de_datos>: Nombre de una base de datos existente en la que se situará la conexión activa.

Ejemplo práctico concreto

USE EmpresaDB;
-- Salida esperada:
-- Changed database context to 'EmpresaDB'.

Separación de Lotes: Comando GO

GO no es una instrucción del estándar T-SQL ni se envía al motor relacional; es un comando interpretado directamente por los clientes de Microsoft (como SQL Server Management Studio, Azure Data Studio o la utilidad sqlcmd). Su propósito es delimitar lotes (batches), enviando al servidor las instrucciones acumuladas hasta esa línea para su compilación y ejecución independiente.

Sintaxis canónica

<instrucciones_lote_1>
GO [repeticiones]
<instrucciones_lote_2>
GO

Desglose de elementos

  • GO: Señal de corte de lote enviada a la herramienta cliente.
  • [repeticiones]: Parámetro entero opcional. Si se especifica un número (por ejemplo, GO 5), el cliente enviará el lote precedente al servidor esa cantidad consecutiva de veces.

Ejemplo práctico

CREATE DATABASE FacturacionDB;
GO
USE FacturacionDB;
GO
-- Salida esperada:
-- Commands completed successfully.
-- Changed database context to 'FacturacionDB'.

Reglas de comportamiento del lote

Escenario Comportamiento con GO
Dependencia temporal DDL Impide que el analizador intente usar una base de datos antes de que el motor concluya su creación física.
Alcance de variables Las variables locales (DECLARE @var) solo residen dentro de su lote; al encontrar un GO, se destruyen y pierden visibilidad.
Primer enunciado DDL Instrucciones como CREATE VIEW, CREATE PROCEDURE, CREATE FUNCTION y CREATE TRIGGER exigen ser la primera sentencia de un lote. Sin un GO previo, el script arroja un error de compilación.
Aislamiento de errores Si un lote falla durante la ejecución, el procesamiento de lotes posteriores separados por GO puede continuar, aislando el fallo.

⚠️ Atención: Si declarás variables de sesión o tablas temporales en memoria dentro de un bloque y colocás un GO intermedio, perderás el acceso a esos datos locales en las instrucciones siguientes.

Esquemas: CREATE SCHEMA

Un esquema (schema) es un contenedor lógico y de seguridad dentro de una base de datos que agrupa objetos relacionados (tablas, vistas, procedimientos). Permite organizar los módulos del sistema, simplificar la administración de permisos a nivel grupal y evitar colisiones de nombres de tablas.

Sintaxis

CREATE SCHEMA <nombre_esquema> [AUTHORIZATION <nombre_propietario>];

Desglose de elementos

  • CREATE SCHEMA: Enunciado DDL que crea el espacio de nombres en la base de datos actual.
  • <nombre_esquema>: Identificador del nuevo esquema.
  • AUTHORIZATION <nombre_propietario>: Cláusula opcional que asigna un usuario o rol de base de datos específico como propietario del esquema. Si se omite, el propietario es el usuario que ejecuta la instrucción.

Ejemplo práctico

USE EmpresaDB;
GO

CREATE SCHEMA Ventas;
GO

CREATE TABLE Ventas.Facturas (
    FacturaID INT PRIMARY KEY IDENTITY(1,1),
    Fecha DATETIME DEFAULT GETDATE(),
    Total DECIMAL(10,2) NOT NULL
);
GO
-- Salida esperada:
-- Commands completed successfully.

💡 Tip: Si no especificás un esquema al crear o consultar un objeto (por ejemplo, CREATE TABLE Clientes), el motor utilizará por defecto el esquema configurado para tu usuario (generalmente dbo). Explicitá siempre el esquema (Ventas.Clientes, dbo.Clientes) para optimizar la resolución de nombres del optimizador de consultas y evitar ambigüedades.