En un sistema de bases de
datos relacionales una tabla es la unidad lógica de almacenamiento de
información y un objeto integrante de la base de datos al que hacen referencia
la mayoría de las operaciones. Una tabla representa una entidad caracterizada
por una serie de atributos que se expresan en los campos o columnas de dicha tabla.
Creación de tablas
Las tablas, como la práctica
totalidad de los objetos en SQL Server, pueden crearse con sentencias Transact-SQL
o con el administrador corporativo tal y como se indica en: SQL Server 2014: Crear una tabla.
Creación de tablas mediante comandos Transact-SQL
La creación de una nueva tabla puede hacerse con la
sentencia CREATE TABLE. Su ejecución almacenará la nueva tabla en el sistema de
SQL Server. En tablas especiales se graba la definición y el nombre de la nueva
tabla. Un identificador servirá para designar la tabla en el gestor y debe
cumplir las normas para los
identificadores de objetos en SQL Server.
La definición completa de la
instrucción CREATE TABLE se puede consultar en la documentación de SQL Server.
En general la creación
resumida de una tabla será de este modo:
Nombres de tabla
El nombre de una tabla tiene cuatro
partes, separadas por puntos. El nombre del servidor, el nombre de la base de
datos, el identificador del propietario de la tabla y el propio nombre de la tabla.
Las tres primeras partes sólo son necesarias en caso de ambigüedad. Si no se especifica
el nombre de la base de datos la tabla pertenece a la base de datos que esté en
uso en ese momento. El creador de un objeto es el usuario que lo define
mediante la sentencia CREATE. En general el creador y el propietario de una
tabla suelen coincidir. Si el propietario de la tabla no se especifica en la
sentencia, SQL entenderá que el usuario que ha ejecutado la sentencia es el
creador y el propietario de la tabla.
El propietario puede, mediante
la sentencia GRANT, autorizar a otros usuarios a consultar y modificar las
tablas de su propiedad.
Pero también pueden existir
usuarios especiales autorizados a crear tablas, cuyo propietario sea otro, en
este caso el calificador en su nombre será diferente de su propio identificador
personal.
Nombres de columna
Al crear una tabla se asignan
nombres a sus columnas. El nombre completo de una columna está formado por el
nombre de la tabla seguido de un punto del nombre de la columna. Del mismo modo
que antes sólo deberá especificarse obligatoriamente el nombre completo si existe ambigüedad.
Tipos de datos
Al especificar cada una de las
columnas de Ia tabla a crear en el comando CREATE TABLE, se debe indicar
también el tipo de datos que tendrá esta columna. El tipo de datos es la
representación más general del dominio de definición de los datos de la
columna.
Tipos definidos por el usuario
Además de los tipos de datos
predefinidos, los usuarios pueden definir sus propios tipos de datos. Estos
tipos de datos son tipos estandard a los que se les añade alguna característica
adicional. Un modo de crear tipos de datos de usuario es utilizar la sentencia
CREATE TYPE
Valores nulos
La especificación de la
palabra null al definir una columna permite que al añadir un registro pueda
omitirse el valor del campo. Esto permite que las celdas de este campo en cada
registro puede estar vacía. Por defecto, las columnas se definen como not null,
es decir, requieren un valor.
Esto lo podemos ver en el
ejemplo anterior en la definición del campo strCodigo.
[strCodigo] [nvarchar](50) NULL,
Columnas con valores autoincrementales
Si se especifica IDENTITY se
indica al gestor que deberá generar un valor para las nuevas filas valores que
irán incrementándose en esta columna. Opcionalmente es posible incluir una
semilla que se utilizará como valor inicial, en la primera fila, mientras que
se utilizará el valor incremento para ir
calculando los siguientes.
El siguiente ejemplo crea una
tabla con un campo que contiene un código de identificación que tendrá valores
a partir de 100 y se incrementará automáticamente de 1 en 1.
CREATE TABLE
tbTabla
( Campo1 char(20),
CampoAutoincremental int IDENTITY (100,1),
Campo3 char (5),
CampoPermiteNulos int NULL)
La cláusula NOT FOR
REPLICATION deshabilita la característica de inserción de valores auto-incrementales
cuando se produzcan inserciones de registros a través de procesos de
duplicación.
Restricciones
Estas restricciones, llamadas
en SQL Server constraints. Se
utilizan para especificar condiciones de integridad. Estas restricciones
incluyen la definición de claves, ya sean ajenas o primarias, valores únicos,
limitaciones en el dominio de valores aceptables, y valores por defecto para
las columnas.
Un ejemplo de restricción es
el siguiente:
CREATE TABLE [PROPIETARIO].[tbNombreTabla](
[idTraza] [bigint] NOT NULL,
[idTraza] [bigint] NOT NULL,
[strCodigo]
[nvarchar](50) NOT NULL,
[strDescripcion]
[nvarchar](max) NULL,
[datFecha]
[datetime] NOT NULL,
CONSTRAINT [pk_tbNombreTabla] PRIMARY KEY CLUSTERED
(
[id] ASC,
[strCodigo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CONSTRAINT nombre restricción
tipo de restricción (lista de columnas) Los tipos de restricción pueden ser una
o varias de las palabras date siguientes:
PRIMARY KEY
Especifica que la columna
representará una clave primaria.
FOREIGN KEY La columna será
una clave ajena que vinculará a la tabla con otra, en la que la columna será
clave primaria, siguiendo el modelo relacional. La sintaxis de la cláusula es
la siguiente.
CONTRAINT nombre restriccion
FOREIGN KEY (columnas) REFERENCES tabla vinculada (columnas)
ALTER TABLE [PROPIETARIO].[
tbNombreTabla ] WITH CHECK ADD CONSTRAINT[fk_strCodigo] FOREIGN KEY([strCodigo])
REFERENCES [[PROPIETARIO].[tbTablaEnlazada] ([strCodigoEnlazado])
REFERENCES [[PROPIETARIO].[tbTablaEnlazada] ([strCodigoEnlazado])
GO
La tabla y las columnas
especificadas después de REFERENCES son aquellas a las que la clave ajena, en
la tabla que estamos creando, se halla vinculada.
UNIQUE.
Indica que la columna deberá
tener valores únicos. La columna no podría formar parte de una clave primaria.
CREATE TABLE [PROPIETARIO].[tbNombreTabla](
[strNum]
[char](7) NOT NULL,
[bintNum]
[bigint] NULL,
[curImp]
[decimal](19, 2) NULL,
CONSTRAINT
[pk_tbNombreTabla] UNIQUE CLUSTERED
(
[strNum] ASC,
[strCod] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR =
90) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Su sintaxis de uso es la
siguiente: CONSTRAINT nombre restricción UNIQUE CLUSTERED/NONCLUSTERED
columnas) Esta sentencia crea automáticamente un índice para columna y es a ese
índice al que se refiere la cláusula CLUSTERED/NONCLUSTERED.
CHECK
Esta restricción limita los
valores admisibles en un campo más allá de lo especificado por el tipo de
datos. Que exige la integridad
del dominio al limitar los valores posibles que se pueden escribir en una o
varias columnas
CHECK nombre restricción
(columna IN (lista de valores) )
En el siguiente ejemplo se muestra una restricción para los
valores escritos en la columna Campo3 de la tabla tbTabla, si intentamos
insertar un 6 en la columna Campo3 se producirá un error.
CREATE TABLE tbTabla
( Campo1 char(20),
Campo2 int,
Campo3 char (5) CHECK (Campo3 >= 1 and Campo3 <= 5),
Campo4 int)
Si
queremos una lista de valores fija o deseamos que sigan un patrón dado
pondremos.
CHECK (emp_id IN ('1689', '0746', '0897', '1622', '1979')
OR emp_id LIKE '99[0-9][0-9]')
DEFAULT
Permite indicar los valores
por defecto para la columna en caso de que se omita un valor para la misma al
añadir a la tabla un nuevo registro.
Una tabla solo puede incluir una definición DEFAULT. Una definición DEFAULT
puede contener valores constantes, funciones, etc.
DEFAULT nombre restricción
valor FOR columna
Si deseamos que un campo se
rellene por defecto con la palabra ‘DEFEC’ hacemos lo siguiente:
CREATE TABLE tbTabla
( Campo1 char(20),
Campo2 int,
Campo3 char (5) DEFAULT 'DEFEC',
Campo4 int,
)
Luego podemos hacer
INSERT INTO tbTabla (Campo1,Campo2,Campo4) VALUES ('prueba',1,2)
Y nos insertará por defecto 'DEFEC'
en
el campo3, ojo, si hacemos
INSERT INTO tbTabla VALUES ('prueba',1,2)
Se producirá un error.
También podemos introducir por defecto
la fecha del sistema, por ejemplo.
CREATE TABLE tbTabla
( Campo1 char(20),
Campo2 int,
Campo3 datetime DEFAULT (getdate()),
Campo4 int
)
Ubicación de Tablas.
La cláusula ON permite elegir
el grupo de ficheros en el que queremos que se almacene la tabla.
CREATE TABLE [PROPIETARIO].[tbNombreTabla](
[id]
[bigint] NOT NULL,
[strCodigo]
[nvarchar](50) NULL,
[strDescripcion]
[nvarchar](max) NULL,
[datFecha]
[datetime] NOT NULL
) ON [PRIMARY]
Modificación de tablas
Es posible añadir nuevas
columnas o condiciones a una tabla existente mediante esta sentencia. Su sintaxis
completa es casi idéntica a la CREATE TABLE
El único aspecto diferenciador
reseñable es la utilización de las cláusulas ADD y DROP para añadir y eliminar,
respectivamente, columnas o restricciones a la cláusula ALTER COLUMN, para
modificar una columna existente.
Modificación de columnas
La sentencia no permite cambiar
el tipo de datos, ni el comportamiento
respecto a la inserción de valores nulos, ni la especificación IDENTITY, al
modificar una columna. Para realizar modificaciones de este tipo podemos crear
una nueva columna, transferir los datos de la antigua y después eliminarla.
Validación con los datos existentes
La cláusula WITH CHECK permite
que el servidor determine si los datos existentes serían válidos si se
aceptasen las modificaciones propuestas con el comando ALTER TABLE. Esto determina
si los datos dejarán de ser válidos tras las modificaciones, y el comando ALTER
TABLE fallará y las modificaciones que pretendíamos imponer serán descartadas.
En el ejemplo se añade una restricción a
una columna de la tabla. La columna tiene un valor que infringe la
restricción. Por tanto, WITH NOCHECK se usa
para evitar que la restricción se valide en las filas existentes y para poder
agregar la restricción.
CREATE TABLE dbo.TbTabla ( columna1 INT) ;
GO
INSERT INTO dbo.TbTabla VALUES (-1) ;
GO
ALTER TABLE dbo.TbTabla WITH NOCHECK
ADD CONSTRAINT exd_check CHECK (columna1 > 1) ;
GO
Modificación de tablas con el Administrador Corporativo
Además de modificar las tablas
con ALTER TABLE, también se puede hacer con el Administrador Corporativo Para
ello accederemos al Editor Visual de la tabla, seleccionando el servidor en el
que deseamos crear la tabla, eligiendo la base de datos y pulsando la carpeta
Tablas. A continuación seleccionaremos la tabla y pulsaremos el botón derecho
del ratón. Elegimos el submenú diseño.
No hay comentarios:
Publicar un comentario