viernes, 20 de octubre de 2023

SQL Server Instrucciones DDL CREATE TABLE y CREATE INDEX

Introducción

Ya se ha indicado en la entrega anterior sobre las instrucciones relacionadas con Data Definition Language (DDL) relacionadas con CREATE. En esta ocasion hablaremos de las instrucciones CREATE TABLE y CREATE INDEX.

CREATE TABLE

El uso de esta instrucción crea una nueva tabla en Microsoft SQL Server y en Azure SQL Database. La sintaxis de la instrucción es básicamente, la misma. Sin embargo, cuando se crea una tabla, debe indicarse el conjunto de columnas y el tipo de dato que contendrá. 

La sintaxis básica en la siguiente:

CREATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( { <column_definition> } [ ,... n ] )[ ; ]

Donde:

database_name - El nombre de la base de datos en la que se creara la tabla. Si se indica el nombre de base de datos debe especificar una base de datos existente. Si no se especifica, el nombre de base de datos toma por defecto la base de datos actual.

schema_name – Indica el nombre del esquema al que pertenecerá la nueva tabla.

table_name – Indica el nombre de la nueva tabla y deben seguir las reglas para los identificadores.

<column_definition> - column_name <data_type>

column_name – Indica el nombre de la columna que se creará.

<data_type> - Especifica el tipo de datos de la columna, el cual debe ser un tipo valido y especificar las propiedades de longitud y precisión en caso necesario.

La sintaxis incluye el nombre de la tabla, es posible indicar dentro del nombre esta la posibilidad de incluir el nombre de la base de datos y el nombre del esquema, separados por un punto. Asimismo, se puede observar que se debe incluir un par de paréntesis y dentro del par, se debe indicar la definición de las columnas, donde al menos una debe ser definida.

Es importante mencionar que la definición de la llave primaria de una tabla puede ser indicada cuando se lleva a cabo la creación de la tabla, en caso contrario, debe ser definida utilizando la correspondiente instrucción de modificación.

Existen otras opciones dentro de la definición de las tablas, como la especificación de identidad en una columna, o bien la definición de una restricción, un valor por omisión, la asignación de particionamiento en la tabla y otras opciones, para ello será necesario revisar la documentación correspondiente.

Tablas temporales

En Microsoft SQL Server es posible crear tablas de uso temporal que son definidas como locales y como globales. Las tablas temporales locales son visibles solo en la sesión de trabajo actual y las tablas temporales globales son visibles para todas las sesiones de trabajo. 

Para definir este tipo de tablas, se debe antepoer a los nombres de las tablas temporales locales un signo de número único (#table_name) y en los nombres de las tablas temporales globales anteponga con un signo de número doble (##table_name).

Ejemplo 1:

CREATE TABLE test (
    a INT,
    b INT
);
GO 
 

En el ejemplo, se puede observar que se creará la tabla denominda test bajo el esquema dbo, que es el de omisión, en la base de datos actual. Dentro de la tabla se tendrán dos columnas, denominadas a y b, ambas de tipo INT (entero).

Ejemplo 2:

CREATE TABLE HR.Employees
(
    EmployeeID INT NOT NULL,
    Salary Money NOT NULL,
    ValidFrom DATETIME2 NOT NULL,
    ValidTo DATETIME2 NOT NULL
);
GO 

En este ejemplo, se creará una tabla denominada Employees en el esquema denominado HR en la base de datos actual. Contendrá cuatro columnas, denominadas EmployeeID de tipo INT, Salary de tipo Money, ValidFrom y ValidTo ambas de tipo DATETIME2. Asimismo, se puede observar que se ha indicado en todas la columnas se han indicado que tienen que validarse que siempre contengan informacion, no puede haber valores nulos con la clausula NOT NULL en cada definición de columna.

Ejemplo 3:

CREATE TABLE dbo.Sample
(
    col1 INT,
    col2 INT,
    PRIMARY KEY CLUSTERED (col1)
);
GO

En este ejemplo, se creará una tabla denominda Sample en el esquema dbo de la base de datos actual. Contendrá dos columnas identificadas como col1 y col2 ambas de tipo INT, ademas se ha indicado la creación de la llave primaria de tipo agrupado que incluye a la columna col1.

Ejemplo 4:

CREATE TABLE #MyTempTable (
    col1 INT PRIMARY KEY
);
GO

Este ejemplo, creara una tabla temporal denominada #MyTempTable, esta tabla se creará en la base de datos temp. Contendrá una columna denominada col1 de tipo INT, especificando que será asignada como llave primaria.

CREATE INDEX

Se sabe que el índice que se define en una base de datos es una estructura de datos que se utiliza para mejorar la velocidad de las operaciones de consulta, de esta forma, por medio de un identificador único de cada fila de una tabla, permite un rápido acceso a los registros de una tabla dentro de una base de datos. El uso de esta instrucción crea un índice relacional en una tabla o vista, previamente definida.

La sintaxis básica es la siguiente:

CREATE INDEX {index_name] ON {schema_name.table_name} ( {column_name} [,…n] )[;]

Donde:

Index_name - El nombre del índice, que debe ser único dentro de una tabla o vista, pero no necesariamente tienen que ser únicos dentro de una base de datos, y deben seguir las reglas para los identificadores.

schema_name.table_name – El nombre de la tabla al que se generará el indice indicando el esquema donde se encuentra definida.

column_name – nombre de columna o columnas en las que se basa el índice. Debe especificarse dos o más nombres de columnas para crear un índice compuesto sobre los valores combinados en las columnas especificadas.

Es necesario indicar que la sintaxis anterior, creará un índice de tipo no-agrupado, que es el tipo asignado por omisión. Debe recordarse que los índices de tipo agrupado solo pueden definirse uno por tabla, de tal forma debe indicarse que se desea definir uno de este tipo. Asimismo, es posible indicar que el índice sea único, indicando que no se permita que dos filas tengan el mismo valor de clave de índice. De igual forma, recuérdese que un índice agrupado en una vista debe ser único. Ya se ha mencionado que existen diversos tipos de indices, revise la entrada SQL Server Conociendo sobre Indices.

Existen otras opciones para la definición de los índices, usando la sintaxis adecuada, por lo que debe revisarse la documentación correspondiente.

Ejemplo 1:

CREATE INDEX IX_VendorID ON ProductVendor (VendorID);
GO

En este ejemplo, se creará un índice no agrupado denominado IX_VendorID en la tabla ProductVendor del esquema dbo, sobre la columna VendorID.

Ejemplo 2:

CREATE CLUSTERED INDEX PK_Directorio_id ON Directorio (Id);
GO

En el ejemplo se establece la creación de un indice agrupado denominado PK_Directorio_id en la tabla Directorio del esquema dbo, sobre la columna id.

Conclusión

La creacion de tablas e indices en una base de datos a través de las instrucciones previamente indicadas es una de las actividades más importantes que se realiza cuando se crea o mantiene una base de datos. Recuerdese que los índices aplican principalmente en las tablas para ayudar en la consulta de información almacenada en ellas.

Es importante consultar la documentación relacionada con la sintaxis para la creación de los diversos tipos de tablas que se pueden manejar, asi como la correspondiente a la creación de índices.


No hay comentarios.:

Publicar un comentario