Unidad 8. El DDL, Lenguaje de Definición de Datos (VII)


Una vez indicado el tipo de datos de la columna podemos opcionalmente completar su definición con una serie de cláusulas.


    [ COLLATE nbIntercalacion ]  

Con la cláusula COLLATE podemos definir el tipo de intercalación que se utilizará para la columna (Ver CREATE TABLE).


    [ NULL | NOT NULL ]  

Determina si se permiten valores nulos (NULL) en la columna o no (NOT NULL). Realmente NULL no es estrictamente una restricción, si no indicamos nada la columna permitirá valores nulos, pero se puede especificar de la misma forma que NOT NULL. NOT NULL se puede especificar para las columnas calculadas sólo si se especifica también PERSISTED.


    [  CONSTRAINT nbRestriccion ] DEFAULT exp_constante ]   

Con la cláusula DEFAULT podemos especificar un valor por defecto, es decir el valor que tomará el campo cuando no se haya especificado explícitamente un valor durante la inserción. Las definiciones DEFAULT se pueden aplicar a cualquier columna excepto a las definidas como timestamp o a aquellas que tengan la propiedad IDENTITY. Si se especifica un valor por defecto a una columna de un tipo definido por el usuario, dicho tipo debe ser compatible con la conversión implícita de exp_constante en el tipo definido por el usuario. exp_constante sólo puede ser NULL o un valor constante (por ejemplo, una cadena de caracteres, una función escalar o una función del sistema, definida por el usuario o CLR).
 Para mantener la compatibilidad con las versiones anteriores de SQL Server, se puede asignar un nombre de restricción a DEFAULT con [ CONSTRAINT nbRestriccion ]. Los nombres de restricción deben ser únicos en el esquema al que pertenece la tabla.


    [ IDENTITY [( semilla, incremento )] [NOT FOR REPLICATION]  ]  

IDENTITY indica que la nueva columna es una columna de identidad. Cuando se agrega una nueva fila a la tabla, el Motor de base de datos proporciona un valor incremental único para la columna. Las columnas de identidad se utilizan normalmente como claves principales.
La propiedad IDENTITY se puede asignar a las columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0). Sólo se puede crear una columna de identidad para cada tabla. Las restricciones DEFAULT y los valores predeterminados enlazados no se pueden utilizar en las columnas de identidad. En este caso, deben especificarse el valor de inicialización y el incremento, o ninguno de esto valores. Si no se especifica ninguno, el valor predeterminado es (1,1).
semilla es el valor que se utiliza para la primera fila cargada en la tabla.
Incremento es el valor incremental que se agrega al valor de identidad de la fila cargada anterior.
De forma general, si se especifica la cláusula NOT FOR REPLICATION para una restricción, dicha restricción no se impone cuando los agentes de réplica realizan operaciones de inserción, actualización o eliminación. Si se especifica esta cláusula, junto con IDENTITY, los valores no se incrementan en las columnas de identidad cuando los agentes de réplica realizan inserciones.


    [ ROWGUIDCOL ]   

ROWGUIDCOL indica que la nueva columna es una columna de GUID de filas. Sólo se puede designar una columna uniqueidentifier por tabla como columna ROWGUIDCOL. La propiedad ROWGUIDCOL se puede asignar únicamente a una columna uniqueidentifier.
Las columnas de tipos de datos definidos por el usuario no se pueden designar con ROWGUIDCOL.
La propiedad ROWGUIDCOL no impone la unicidad de los valores almacenados en la columna. ROWGUIDCOL tampoco genera automáticamente valores para nuevas filas insertadas en la tabla, por lo que se debe de utilizar la función NEWID en las instrucciones INSERT o utilizar la función NEWID como el valor predeterminado de la columna para generar valores únicos en cada fila.
Para ver más consideraciones sobre columnas IDENTITY y ROWGUIDCOL.

Por último nos quedan las restricciones de clave que aparecen en la sintaxis como:


    [ <restriccion_columna> [ ...n ]  ] 

    < restriccion_columna > ::= 

      [ CONSTRAINT nbRestriccion] 

      {     { PRIMARY KEY | UNIQUE }[ CLUSTERED |  NONCLUSTERED ] 

              [ WITH FILLFACTOR = factorRelleno  

              | WITH ( <  opcion_indice > [ , ...n ] )

         ]

              [ ON { partition_scheme_name ( partition_column_name ) 

                  | filegroup | "default" } ]

        | [ FOREIGN KEY ] 

              REFERENCES [ nbEsquema.] nbTablaPadre [ ( col_padre )  ] 

              [ ON DELETE { NO  ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

       }

             [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

              [ NOT FOR REPLICATION ] 

        | CHECK [ NOT FOR REPLICATION ] (expresion_validacion)   

nbRestriccion es el nombre de la restricción, como hemos visto antes, debe ser único en el esquema al que pertenece la tabla. Las restricciones se implementan internamente con índices por lo que a veces podemos utilizar el término índice o restricción indistintamente.


    {PRIMARY KEY | UNIQUE} [ CLUSTERED | NONCLUSTERED ]   

PRIMARY KEY indica que la columna es la clave principal de la tabla. Sólo se puede crear una restricción PRIMARY KEY para cada tabla. Si la clave primaria (principal) está compuesta por varias columnas entonces no podemos utilizar esta restricción, tendremos que utilizar una restricción de tabla que veremos más adelante.
CLUSTERED indica que el índice que se va a crear es un índice agrupado. Como sólo puede haber un índice agrupado por tabla, si todavía no hay ninguno definido, por defecto se creará con la clave primaria, si ya existe un índice agrupado, la clave principal se creará sin índice agrupado.
Una clave primaria no puede contener valores nulos, por lo que todas las columnas definidas en una restricción PRIMARY KEY se deben definir como NOT NULL. Si cuando definimos la columna, no se indica nada, la columna se establecerá a NOT NULL.
Si la clave principal se define en una columna de tipo definido por el usuario CLR, la implementación del tipo debe admitir el orden binario.
UNIQUE indica que la columna no admite valores duplicados, por lo que se crea un índice único. Una tabla puede tener varios índices únicos.

Febrero-2010
Pág. 8.7

Atrás  Inicio  Adelante





Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies


© aulaClic S.L. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.