sábado, 9 de enero de 2016

Tablas en SQL Server


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.

Tablas en SQL Server


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,
    [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])
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

Una vez creada la tabla utilizaremos comandos ALTER TABLE para modificar campos de una tabla.
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