INTEGRIDAD DE DATOS

35,138 views

Published on

Published in: Education
  • Be the first to comment

INTEGRIDAD DE DATOS

  1. 1. Integridad de datos<br />La exigencia de integridad de los datos garantiza la calidad de los datos de la base de datos. Por ejemplo, si se especifica para un empleado el valor de identificador de 123, la base de datos no debe permitir que ningún otro empleado tenga el mismo valor de identificador. Si tiene una columna employee_rating para la que se prevean valores entre 1 y 5, la base de datos no debe aceptar valores fuera de ese intervalo. Si en la tabla hay una columna dept_id en la que se almacena el número de departamento del empleado, la base de datos sólo debe permitir valores que correspondan a los números de departamento de la empresa.<br />Dos pasos importantes en el diseño de las tablas son la identificación de valores válidos para una columna y la determinación de cómo forzar la integridad de los datos en la columna. La integridad de datos pertenece a una de las siguientes categorías: <br />Integridad de entidad<br />Integridad de dominio<br />Integridad referencial<br />Integridad definida por el usuario<br />
  2. 2. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Integridad de entidad :<br />La integridad de entidad define una fila como entidad única para una tabla determinada. La integridad de entidad exige la integridad de las columnas de los identificadores o la clave principal de una tabla, mediante índices y restricciones UNIQUE, o restricciones PRIMARY KEY.<br /> Integridad de dominio :<br />La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede exigir la integridad de dominio para restringir el tipo mediante tipos de datos, el formato mediante reglas y restricciones CHECK, o el intervalo de valores posibles mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas.<br />Integridad referencial :<br />La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan filas. En SQL Server 2005 la integridad referencial se basa en las relaciones entre claves externas y claves principales o entre claves externas y claves exclusivas, mediante restricciones FOREIGN KEY y CHECK. La integridad referencial garantiza que los valores de clave sean coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos.<br />
  3. 3. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br />Integridad referencial :<br />Cuando se exige la integridad referencial, SQL Server impide a los usuarios: <br />Agregar o cambiar filas en una tabla relacionada si no hay ninguna fila asociada en la tabla principal.<br />Cambiar valores en una tabla principal que crea filas huérfanas en una tabla relacionada.Eliminar filas de una tabla principal cuando hay filas relacionadas coincidentes.<br />Por ejemplo, en las tablas Sales.SalesOrderDetail y Production.Product de la base de datos AdventureWorks, la integridad referencial se basa en la relación entre la clave externa (ProductID) de la tabla Sales.SalesOrderDetail y la clave principal (ProductID) de la tabla Production.Product. Esta relación garantiza que un pedido de ventas no pueda nunca hacer referencia a un producto que no existe en la tabla Production.Product.<br />
  4. 4. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Integridad definida por el usuario <br />La integridad definida por el usuario permite definir reglas de empresa específicas que no pertenecen a ninguna otra categoría de integridad. Todas las categorías de integridad admiten la integridad definida por el usuario. Esto incluye todas las restricciones de nivel de columna y nivel de tabla en CREATE TABLE, procedimientos almacenados y desencadenadores.<br />Exigir la integridad de los datos.- Planear y crear tablas requiere identificar los valores válidos para las columnas y decidir cómo exigir la integridad de los datos en las columnas. SQL Server 2005 proporciona los siguientes mecanismos para exigir la integridad de los datos en una columna: <br /><ul><li>Restricciones PRIMARY KEY
  5. 5. Restricciones FOREIGN KEY
  6. 6. Restricciones UNIQUE
  7. 7. Restricciones CHECK
  8. 8. Definiciones DEFAULT
  9. 9. Permitir valores NULL </li></li></ul><li>Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones PRIMARY KEY :<br />Una tabla suele tener una columna o una combinación de columnas cuyos valores identifican de forma única cada fila de la tabla. Estas columnas se denominan claves principales de la tabla y exigen la integridad de entidad de la tabla. Puede crear una clave principal mediante la definición de una restricción PRIMARY KEY cuando cree o modifique una tabla.<br />Una tabla sólo puede tener una restricción PRIMARY KEY y ninguna columna a la que se aplique una restricción PRIMARY KEY puede aceptar valores NULL. Debido a que las restricciones PRIMARY KEY garantizan datos únicos, con frecuencia se definen en una columna de identidad.<br />Cuando especifica una restricción PRIMARY KEY en una tabla, SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) exige la unicidad de los datos mediante la creación de un índice único para las columnas de clave principal. Este índice también permite un acceso rápido a los datos cuando se utiliza la clave principal en las consultas. De esta forma, las claves principales que se eligen deben seguir las reglas para crear índices únicos. <br />
  10. 10. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones PRIMARY KEY :<br />Si se define una restricción PRIMARY KEY para más de una columna, puede haber valores duplicados dentro de la misma columna, pero cada combinación de valores de todas las columnas de la definición de la restricción PRIMARY KEY debe ser única.<br />Como se muestra en la siguiente ilustración, las columnas ProductID y VendorID de la tabla Purchasing.ProductVendor forman una restricción PRIMARY KEY compuesta para esta tabla. Así se garantiza que la combinación de ProductID y VendorID es única.<br />Cuando trabaja con combinaciones, las restricciones PRIMARY KEY relacionan una tabla con otra. Por ejemplo, para determinar los proveedores que suministran determinados productos, puede utilizar una combinación de tres elementos entre las tablas Purchasing.Vendor, Production.Product y Purchasing.ProductVendor. Puesto que ProductVendor contiene las columnas de ProductID y VendorID, se puede obtener acceso a las tablas Product y Vendor mediante su relación con ProductVendor.<br />
  11. 11. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones FOREIGN KEY :<br />Una clave externa (FK) es una columna o combinación de columnas que se utiliza para establecer y exigir un vínculo entre los datos de dos tablas. Puede crear una clave externa mediante la definición de una restricción FOREIGN KEY cuando cree o modifique una tabla.<br />En una referencia de clave externa, se crea un vínculo entre dos tablas cuando las columnas de una de ellas hacen referencia a las columnas de la otra que contienen el valor de clave principal. Esta columna se convierte en una clave externa para la segunda tabla.<br />Nota: Una restricción FOREIGN KEY puede hacer referencia a columnas de tablas de la misma base de datos o a columnas de una misma tabla. Se denominan tablas con referencia a sí mismas. Suponga, por ejemplo, una tabla de empleados con tres columnas: employee_number, employee_name y manager_employee_number. Dado que el responsable también es un empleado, hay una relación de clave externa desde la columna manager_employee_number a la columna employee_number.<br />
  12. 12. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones FOREIGN KEY :<br />La tabla Sales.SalesOrderHeader de la base de datos AdventureWorks tiene un vínculo a la tabla Sales.SalesPerson porque existe una relación lógica entre pedidos de ventas y personal de ventas. La columna SalesPersonID de la tabla SalesOrderHeader coincide con la columna de clave principal de la tabla SalesPerson. La columna SalesPersonID de la tabla SalesOrderHeader es la clave externa para la tabla SalesPerson.<br />No es necesario que una restricción FOREIGN KEY esté vinculada únicamente a una restricción PRIMARY KEY de otra tabla; también puede definirse para que haga referencia a las columnas de una restricción UNIQUE de otra tabla. Una restricción FOREIGN KEY puede contener valores NULL, pero si alguna columna de una restricción FOREIGN KEY compuesta contiene valores NULL, se omitirá la comprobación de los valores que componen la restricción FOREIGN KEY. Para asegurarse de que todos los valores de la restricción FOREIGN KEY compuesta se comprueben, especifique NOT NULL en todas las columnas que participan.<br />
  13. 13. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones FOREIGN KEY :<br />Integridad referencial <br />Aunque el fin principal de una restricción FOREIGN KEY es controlar los datos que pueden almacenarse en la tabla de la clave externa; también controla los cambios realizados en los datos de la tabla de la clave principal. Por ejemplo, si se elimina la fila de un vendedor de la tabla Sales.SalesPerson y el identificador del vendedor se utiliza para pedidos de ventas en la tabla Sales.SalesOrderHeader, se rompe la integridad relacional entre ambas tablas: los pedidos del vendedor eliminado quedarán sin correspondencia en la tabla SalesOrderHeader sin ningún vínculo con los datos de la tabla SalesPerson. <br />Con una restricción FOREIGN KEY se evita esta situación. Esta restricción exige la integridad referencial al garantizar que no se puedan realizar cambios en los datos de la tabla de la clave principal si esos cambios anulan el vínculo con los datos de la tabla de la clave externa. Si se intenta eliminar la fila de una tabla de la clave principal o cambiar un valor de clave principal, la acción no progresará si el valor de la clave principal cambiado o eliminado corresponde a un valor de la restricción FOREIGN KEY de otra tabla. Para cambiar o eliminar una fila de una restricción FOREIGN KEY, debe antes eliminar o cambiar los datos de clave externa de la tabla de clave externa, lo que vincula la clave externa con otros datos de clave principal.<br />
  14. 14. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones FOREIGN KEY :<br />Número de restricciones FOREIGN KEY en una tabla <br />SQL Server no establece un límite predefinido en el número de restricciones FOREIGN KEY que una tabla puede incluir (que hagan referencia a otras tablas) ni el número de restricciones FOREIGN KEY pertenecientes a otras tablas que hagan referencia a determinada tabla. No obstante, el número real de restricciones FOREIGN KEY se ve limitado por la configuración de hardware y el diseño de la base de datos y la aplicación. Se recomienda que una tabla no contenga más de 253 restricciones FOREIGN KEY y que no sea referencia para más de 253 restricciones FOREIGN KEY. Tenga en cuenta el costo de exigir restricciones FOREIGN KEY cuando diseñe la base de datos y las aplicaciones.<br />
  15. 15. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones UNIQUE :<br />Puede utilizar restricciones UNIQUE para garantizar que no se escriben valores duplicados en columnas específicas que no forman parte de una clave principal. Tanto la restricción UNIQUE como la restricción PRIMARY KEY exigen la unicidad; sin embargo, debe utilizar la restricción UNIQUE y no PRIMARY KEY si desea exigir la unicidad de una columna o una combinación de columnas que no forman la clave principal. <br />En una tabla se pueden definir varias restricciones UNIQUE, pero sólo una restricción PRIMARY KEY.<br />Además, a diferencia de las restricciones PRIMARY KEY, las restricciones UNIQUE admiten valores NULL. Sin embargo, de la misma forma que cualquier valor incluido en una restricción UNIQUE, sólo se admite un valor NULL por columna. <br />Es posible hacer referencia a una restricción UNIQUE con una restricción FOREIGN KEY.<br />
  16. 16. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Restricciones CHECK :<br />Las restricciones CHECK exigen la integridad del dominio mediante la limitación de los valores que puede aceptar una columna. Son similares a las restricciones FOREIGN KEY porque controlan los valores que se colocan en una columna. La diferencia estriba en la forma en que determinan los valores válidos: las restricciones FOREIGN KEY obtienen la lista de valores válidos de otra tabla, mientras que las restricciones CHECK determinan los valores válidos a partir de una expresión lógica que no se basa en datos de otra columna. Por ejemplo, es posible limitar el intervalo de valores para una columna salary creando una restricción CHECK que sólo permita datos entre 15.000 y 100.000 dólares. De este modo se impide que se escriban salarios superiores al intervalo de salario normal.<br />Puede crear una restricción CHECK con cualquier expresión lógica (booleana) que devuelva TRUE (verdadero) o FALSE (falso) basándose en operadores lógicos. Para el ejemplo anterior, la expresión lógica sería: salary >= 15000 AND salary <= 100000.<br />
  17. 17. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Definiciones DEFAULT :<br />Cada columna de un registro debe contener un valor, aunque sea un valor NULL. Puede haber situaciones en las que deba cargar una fila de datos en una tabla, pero no conozca el valor de una columna o el valor ya no exista. Si la columna acepta valores NULL, puede cargar la fila con un valor NULL. Pero, dado que puede no resultar conveniente utilizar columnas que acepten valores NULL, una mejor solución podría ser establecer una definición DEFAULT para la columna siempre que sea necesario. Por ejemplo, es habitual especificar el valor cero como valor predeterminado para las columnas numéricas, o N/D (no disponible) como valor predeterminado para las columnas de cadenas cuando no se especifica ningún valor.<br />Al cargar una fila en una tabla con una definición DEFAULT para una columna, se indica implícitamente a SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) que cargue un valor predeterminado en la columna en la que no se haya especificado ningún valor.<br />
  18. 18. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Permitir valores NULL :<br />La aceptación de valores NULL de una columna determina si las filas de una tabla pueden contener un valor NULL en esa columna. Un valor NULL no es lo mismo que cero (0), en blanco o que una cadena de caracteres de longitud cero, como "". NULL significa que no hay ninguna entrada. La presencia de un valor NULL suele implicar que el valor es desconocido o no está definido. Por ejemplo, un valor NULL en la columna SellEndDate de la tabla Production.Product de la base de datos AdventureWorks no implica que el artículo no tenga una fecha de venta final. El valor NULL significa que se desconoce la fecha o que no se ha establecido. <br />Nota: Las columnas definidas con una restricción PRIMARY KEY o una propiedad IDENTITY no pueden aceptar valores NULL.<br />
  19. 19. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Ejms. (Primary Key):<br />El siguiente comando CREATE TABLE crea la tabla Tabla1 y define la columna Col1 como clave primaria:<br />CREATE TABLE Tabla1(Col1 int PRIMARY KEY,Col2 varchar(30)  ) <br />Se puede definir la misma restricción utilizando la definición a nivel de tabla:<br />CREATE TABLE Tabla1(Col1 int,Col2 varchar(30),CONSTRAINT tabla_pk PRIMARY KEY (Col1)) <br />Se puede usar el comando ALTER TABLE para agregar una restricción PRIMARY KEY a una tabla existente:<br />ALTER TABLE Tabla1ADD CONSTRAINT tabla_pk PRIMARY KEY (Col1)<br />
  20. 20. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Ejms. (Foreign Key):<br />El siguiente comando CREATE TABLE crea la tabla Tabla1 y define la columna Col2 con una restricción FOREIGN KEY que apunta a la columna Empleado_ID que es clave primaria de la tabla Empleados.<br />CREATE TABLE Tabla1(Col1 int PRIMARY KEY,Col2 int REFERENCES Empleados(Empleado_ID)  ) <br />Se puede definir, además la misma restricción usando la restricción FOREIGN KEY a nivel de tabla:<br />CREATE TABLE Tabla1(Col1 int PRIMARY KEY,Col2 int,CONSTRAINT col2_fk FOREIGN KEY (Col2)REFERENCES Empleados(Empleado_ID)  ) <br />Se puede usar el comando ALTER TABLE para agregar una restricción FOREIGN KEY a una tabla existente:<br />ALTER TABLE Tabla1ADD CONSTRAINT col2_fk FOREIGN KEY (Col2)REFERENCES Empleados(Empleado_ID)<br />
  21. 21. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Ejms. (UNIQUE):<br />Se pueden crear restricciones UNIQUE en el mismo modo que se crean restricciones PRIMARY KEY o FOREIGN KEY:<br />·        Creando la restricción al momento de crear la tabla ( como parte de la definición de la tabla)<br />·        Agregando la restricción a una tabla existente, previendo que la o las columnas comprendidas en la restricción UNIQUE contengan solo valores no duplicados o valores nulos. Una tabla puede aceptar múltiples restricciones UNIQUE.<br />Se pueden usar los mismos comandos Transact-SQL para crear restricciones UNIQUE que los utilizados para crear restricciones PRIMARY KEY. Simplemente reemplace las palabras PRIMARY KEY por UNIQUE. Al igual que con las restricciones PRIMARY KEY las restricciones UNIQUE pueden ser modificadas o eliminadas una vez creadas.<br />
  22. 22. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Ejms. (CHECK):<br />El siguiente comando CREATE TABLE crea una tabla Tabla1 y define la columna Col2 con un restricción CHECK que limita los valores que puede tomar la columna al rango comprendido entre 0 y 100.<br />CREATE TABLE Tabla1(Col1 int PRIMARY KEY,Col2 intCONSTRAINT monto_limite CHECK (Col2 BETWEN 0 AND 100),Col3 varchar(30)  ) <br />También se puede definir la misma restricción usando restricción CHECK a nivel tabla:<br />CREATE TABLE Tabla1(Col1 int PRIMARY KEY,Col2 int ,Col3 varchar(30),CONSTRAINT monto_limite CHECK (Col2 BETWEN 0 AND 100)) <br />Se puede utilizar el comando ALTER TABLE para agregar una retricción CHECK a una tabla existente:<br />ALTER TABLE Tabla1ADD CONSTRAINT monto_limite CHECK (Col2 BETWEN 0 AND 100)<br />
  23. 23. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Ejms. (DEFAULT):<br />Por ejemplo, queremos que el valor por defecto del campo "autor" de la tabla "libros" sea "Desconocido" y el valor por defecto del campo "cantidad" sea "0":<br />create table libros(<br /> codigo int identity, t<br />itulo varchar(40), <br />autor varchar(30) not null default 'Desconocido', <br />editorial varchar(20), <br />precio decimal(5,2), <br />cantidad int default 0 ); <br />Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad", Sql Server insertará los valores por defecto; el siguiente valor de la secuencia en "codigo", en "autor" colocará "Desconocido" y en cantidad "0".<br />Entonces, si al definir el campo explicitamos un valor mediante la cláusula "default", ése será el valor por defecto.<br />
  24. 24. Lección 06<br />Integridad de datos<br />Tipos de integridad de datos.-<br /> Restricciones.-<br />Ejms. (NULL):<br />Tenemos nuestra tabla "libros". El campo "titulo" no debería estar vacío nunca, igualmente el campo "autor". Para ello, al crear la tabla, debemos especificar que dichos campos no admitan valores nulos:<br />create table libros(<br /> titulo varchar(30) not null, <br />autor varchar(20) not null, <br />editorial varchar(15) null, <br />precio float );<br />Para especificar que un campo no admita valores nulos, debemos colocar "not null" luego de la definición del campo.En el ejemplo anterior, los campos "editorial" y "precio" si admiten valores nulos.Cuando colocamos "null" estamos diciendo que admite valores nulos (caso del campo "editorial"); por defecto, es decir, si no lo aclaramos, los campos permiten valores nulos (caso del campo "precio").<br />Si ingresamos los datos de un libro, para el cual aún no hemos definido el precio podemos colocar "null" para mostrar que no tiene precio:<br />insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',null);<br />
  25. 25. Índices<br />Introducción.- Los índices son objetos de base de datos diseñados para mejorar el rendimiento de las consultas. En este punto veremos la estructura y el propósito de los índices y sus tipos y características. Se verá como determinar cuando un índice es necesario y apropiado, que tipo de índice usar y como crearlos. Una vez que se crean los índices se deben mantener para maximizar la performance de las consultas, para ello existen varias herramientas que asisten en la tarea de administración y mantenimiento de los índices. La administración comprende las tareas de reconstrucción, renombrado, y eliminación de índices.<br />Arquitectura de los índices <br />Los índices están estructurados para facilitar una respuesta rápida de conjuntos de resultados. Los dos tipos de índices que SQL Server soporta son agrupados y no agrupados. Los índices son aplicados a una o más columnas en tablas o vistas. Tablas indexadas son soportadas por todas las ediciones de SQL Server 2000, y vistas indexadas son soportadas por las ediciones SQL Server Entreprise y SQL Server Developer. Las características de un índice afecta el uso de los recursos del sistema y performance general. El Query Optimizer usará un índice si este mejorará la performance de la consulta.<br />
  26. 26. Lección 07<br />Índices<br />Propósito y estructura .-<br />Un índice en SQL Server asiste al motor de base de datos en la ubicación de los registros, tal como un índice en un libro ayuda a ubicar información rápidamente. Sin índices, una consulta deberá buscar en todos los registros de la tabla en orden a encontrar coincidencias. Un índice de base de datos una o más columnas de valores de la tabla (llamadas clave del índice) y punteros a los correspondientes registros de la tabla. Cuando se ejecuta una consulta usando la clave del índice, el Query Optimizer utilizará el índice para ubicar los registros que cumplen con la consulta.<br />Un índice es estructurado por el SQL Server Index manager como un árbol balanceado (B-tree). Un B-tree es análogo a un árbol invertido con la raíz del árbol arriba, y los niveles hoja abajo, con niveles medios entre ambos. Cada objeto en la estructura de árbol es un grupo de claves del índice ordenadas llamadas páginas del índice.<br />Para un rendimiento óptimo, se crean sobre columnas que son comúnmente usadas en las consultas. Por ejemplo, los usuarios pueden consultar la tabla de Clientes en base al apellido o al ID del cliente. Por lo tanto se deberían crear dos índices para la tabla: un índice por apellido y otro por ID del cliente. Para ubicar eficientemente a los registros, el Query Optimizer usa un índice que concuerde con la consulta. El Query Optimizer usará el índice por el ID del cliente cuando se ejecute la siguiente consulta:<br />SELECT * FROM Clientes WHERE Cliente_ID = 798<br />
  27. 27. Lección 07<br />Índices<br />Tipos de índices .-<br />Hay dos tipos de índices: agrupados (clustered) y no agrupados (non clustered). Ambos tipos de índices son estructuras tipo B-tree. Un índice agrupado contiene los registros de la tabla a nivel hoja del B-tree. Un índice no agrupado es una estructura de índice separada, independiente del ordenamiento físico de los registros en la tabla. Si existe un índice agrupado en un tabla, un índice no agrupado utilizará al índice agrupado para la búsqueda de los registros. En la mayoría de los casos se creará antes un índice agrupado que los índices no agrupados sobre una tabla.<br />Índices agrupados :<br />Puede haber solo un índice agrupado por tabla o vista, dado que estos índices ordenan físicamente la tabla o vista según la clave del índice agrupado. Este tipo de índices es particularmente eficiente para consultas, dado que los registros de datos completos (en páginas de datos) son guardados a nivel de hoja del B-tree. El ordenamiento y la ubicación de los datos en un índice agrupado es análogo al de un diccionario donde las palabras son ordenadas en forma alfabética y las definiciones aparecen junto a las palabras.<br />
  28. 28. Lección 07<br />Índices<br />Tipos de índices .-<br />Índices agrupados :<br />Cuando se crea una restricción PRIMARY KEY en un tabla que no contiene un índice agrupado, SQL Server creará uno y utilizará la columna de clave primaria como clave para el índice agrupado. Si ya existe un índice agrupado SQL Server creará un índice no agrupado sobre la columna definida con una restricción PRIMARY KEY. Una columna definida como la clave primaria es un índice muy útil porque los valores de la columna están garantizados que son únicos. Índices sobre columnas de valores únicos son de menor tamaño que los índices sobre columnas con valores duplicados y generan estructuras de búsqueda más eficientes.<br />Una columna definida con una restricción UNIQUE genera automáticamente un índice no agrupado.<br />
  29. 29. Lección 07<br />Índices<br />Tipos de índices .-<br />Índices agrupados :<br />Para forzar el tipo de índice a ser creado para una columna o columnas, se puede especificar las cláusulas CLUSTERED o NONCLUSTERED en los comandos CREATE TABLE, ALTER TABLE o CREATE INDEX. Suponga que se crea una tabla Personas que contiene las siguientes columnas: PersonaID, Nombre, Apellido y NumDocumento. La columna PersonID se define con la restricción PRIMARY KEY, la columna NumDocumento con la restricción UNIQUE. Para hacer un índice agrupado para la columna NumDocumento y un índice no agrupado para la columna PersonID, se crea la tabla usando la siguiente sintaxis:<br />CREATE TABLE dbo.Personas(PersonID smallint PRIMARY KEY NONCLUSTERED,Nombre varchar(39),Apellido varchar(40),NumDocumento char(11) UNIQUE CLUSTERED) <br />
  30. 30. Lección 07<br />Índices<br />Tipos de índices .-<br />Índices agrupados :<br />Los índices no se limitan a las restricciones. Se pueden crear índices sobre cualquier columna o combinación de columnas en una tabla o vista. Índices agrupados aseguran la unicidad internamente. Por lo que, si se crea un índice agrupado sobre columnas con valores no únicos SQL Server crea un único valor sobre las columnas duplicadas para servir de clave de ordenamiento secundaria. Para evitar el trabajo adicional requerido para mantener valores únicos sobre columnas duplicadas, generalmente se generan índices agrupados sobre columnas con la restricción PRIMARY KEY.<br />

×