¡¡¡URGENTE!! RESTRICCION E INDICE

23/11/2004 - 14:03 por Oscar | Informe spam
En SQL Server. Cuando se define una clave
candidata con UNIQUE ¿Qué diferencia hay entre
elegir “restricción” o “índice”?

Necesito una solución "de manual" teórica de exresamente q es la
difencencia, ya q en la aynda de SQL server y en libros no la he encontrado.

Seria preferible q contestara uno de MS a ser posible y si no alguien q lo
sepa y lo escriba o q me dij en q libro y pagina sale.

ES URGENTE, muchas gracias

A parte de poner la soluccion aquí lo agradeceria q me la mandarias a
oscarvianes@hotmail.com.

MUCHAS GRACIAS

Preguntas similare

Leer las respuestas

#1 Maxi
23/11/2004 - 14:29 | Informe spam
Oscar, creo que ayer te respondi por este tema, pero te copio lo que dicen
los libros de MS, para mi es clarito, no se que mas necesitas

==
Crear una restricción única
Cree una restricción única para asegurar que no se introducen valores
duplicados en columnas específicas que no participan en una clave principal.
Dado que una restricción única y una clave principal exigen que haya
unicidad, debe adjuntar una restricción única en lugar de una restricción de
clave principal a una tabla si:

a.. Desea exigir la unicidad en una columna o en una combinación de
columnas. Puede adjuntar varias restricciones únicas a una tabla, mientras
que sólo puede adjuntar una restricción de clave principal a una tabla.


b.. Desea exigir la unicidad en una columna que permite valores nulos.
Puede adjuntar restricciones únicas a columnas que permiten valores nulos,
mientras que sólo puede adjuntar restricciones de clave principal a columnas
que no permiten valores nulos. Cuando adjunta una restricción única a una
columna que permite valores nulos, garantiza que al menos una fila tendrá un
valor nulo en la columna objeto de la restricción.
Para crear una restricción única

1.. En el diagrama de base de datos, haga clic con el botón secundario del
mouse (ratón) en la tabla que va a contener la restricción y, a
continuación, seleccione Propiedades en el menú contextual.
- O bien -

Abra el Diseñador de tablas para la tabla que va a contener la
restricción, haga clic con el botón secundario del mouse en el Diseñador de
tablas y elija Propiedades en el menú contextual.

2.. Haga clic en la ficha Índices/Claves.


3.. Elija Nuevo. Aparece un nombre asignado por el sistema en el cuadro
Nombre del índice.


4.. En Nombre de columna, expanda la lista de columnas y seleccione
aquella a la que desee adjuntar la restricción. Para adjuntar la restricción
a varias columnas, seleccione las columnas adicionales en las filas
subsiguientes.


5.. Active la casilla de verificación Crear UNIQUE.


6.. Seleccione la opción Restricción.
La restricción única se crea en la base de datos al guardar la tabla o el
diagrama.

Si utiliza SQL Server, puede controlar el orden de los valores de clave y la
acción emprendida cuando existen claves duplicadas. Para ello, debe crear
un índice único en lugar de una restricción única. Para obtener más
información, consulte Crear un índice único.



=
Crear un índice único
En SQL Server puede crear un índice único cuando la unicidad es una
característica de los propios datos, pero la combinación de columnas
indizadas no es la misma que la clave principal de la tabla. Por ejemplo, si
tiene previsto realizar consultas frecuentes en la columna del número de la
Seguridad Social (ssn) de la tabla employee (donde la clave principal es
emp_id), y desea asegurarse de que los números de la Seguridad Social sean
únicos, cree un índice único en ssn. Si el usuario especifica el mismo
número de Seguridad Social para más de un empleado, la base de datos muestra
un error y no se puede guardar la tabla.

Cuando se crea o modifica un índice único, se puede establecer una opción
para pasar por alto las claves duplicadas. Si se establece esta opción y se
intenta crear claves duplicadas agregando o actualizando datos que afectan a
varias filas (con las instrucciones INSERT o UPDATE), la fila que ocasiona
los elementos duplicados no se agrega o, en el caso de una actualización, se
descarta.

Por ejemplo, si intenta actualizar "Smith" por "Jones" en una tabla en la
que ya existe una fila denominada "Jones", la tabla resultante tendrá una
fila "Jones" y ninguna fila "Smith". La fila "Smith" original se pierde
porque una instrucción UPDATE es realmente una instrucción DELETE seguida de
una instrucción INSERT. Este es el motivo de la eliminación de la fila
"Smith" y del intento fallido de insertar una fila adicional "Jones". La
transacción completa no se puede deshacer porque el objeto de esta opción es
permitir una transacción a pesar de la presencia de elementos duplicados.

Para crear un índice exclusivo

1.. En el diagrama de base de datos, seleccione la tabla que desee
indizar, haga clic con el botón secundario del mouse (ratón) en la tabla y
elija Índices y claves en el menú contextual.
- O bien -

Abra el Diseñador de tablas para la tabla que desee indizar, haga clic con
el botón secundario del mouse en el Diseñador de tablas y elija Índices y
claves en el menú contextual.

2.. Elija Nuevo. La lista Índice seleccionado muestra el nombre asignado
por el sistema al nuevo índice.


3.. En Nombre de columna seleccione las columnas que desea indizar. You
can select up to 16 columns. Para obtener un rendimiento óptimo, seleccione
sólo una o dos columnas por índice. Para cada columna seleccionada, indique
si el índice organiza los valores de esta columna en orden ascendente o
descendente.


4.. Active la casilla de verificación Crear UNIQUE.


5.. Seleccione la opción Índice.


6.. Seleccione la opción Pasar por alto clave duplicada si desea ignorar
los datos nuevos o actualizados que crearían una clave duplicada en el
índice (con la instrucción INSERT o UPDATE).
El índice se crea en la base de datos al guardar la tabla o el diagrama.

Nota No se puede crear un índice único en una columna individual si dicha
columna contiene NULL en más de una fila. Tampoco se puede crear un índice
único en varias columnas si la combinación de columnas contiene valores NULL
en más de una fila. Estos valores se tratan como duplicados a efectos de
indización.





Salu2
Maxi


"Oscar" escribió en el mensaje
news:
En SQL Server. Cuando se define una clave
candidata con UNIQUE ¿Qué diferencia hay entre
elegir "restricción" o "índice"?

Necesito una solución "de manual" teórica de exresamente q es la
difencencia, ya q en la aynda de SQL server y en libros no la he
encontrado.

Seria preferible q contestara uno de MS a ser posible y si no alguien q lo
sepa y lo escriba o q me dij en q libro y pagina sale.

ES URGENTE, muchas gracias

A parte de poner la soluccion aquí lo agradeceria q me la mandarias a


MUCHAS GRACIAS

Respuesta Responder a este mensaje
#2 Eladio Rincón
23/11/2004 - 14:36 | Informe spam
Hola,
si te refieres a la diferencia entre "restricción única" y "índice único",
en SQL Server no hay ninguna diferencia: SQL Server implementa las
restricciones UNIQUE mediante índices únicos; eso no quiere decir que el
resto de motores de bases de datos lo implementen de manera distinta; si
revisas un poco las especificaciones ANSI (o las vistas INFORMATION_SCHEMA),
verás que en ningún momento se habla de índices sino de restricciones... la
idea es que cada fabricante cumple el ANSI (92, 99, ... cada uno más o menos
concienzudamente), y que cada uno haga lo que "estime oportuno" con el
almacenamiento (en nuestro caso índices) ...

mira este ejemplo:

use tempdb
go
drop table t
go
CREATE TABLE t ( id INT identity CONSTRAINT t_pk primary key (id) )
GO
ALTER TABLE t ADD v char(2) NULL
CONSTRAINT t_unique UNIQUE
go
alter table t add v2 char(2) null
go
create unique index t2_unique on t (v2)
go
sp_help 't'

si te fijas en la información de los índices:
t_pk clustered, unique, primary key located on PRIMARY id
t_unique nonclustered, unique, unique key located on PRIMARY v
t2_unique nonclustered, unique located on PRIMARY v2

el primero es la clave primaria, y los dos siguientes son dos índices que
representan la restricción unique;
sin embargo uno se ha creado con :
ALTER TABLE t ADD v char(2) NULL
CONSTRAINT t_unique UNIQUE

y el otro con:
create unique index t2_unique on t (v2)

Por cierto, ¿por qué crees que las restricciones unique se implementan con
índices? ... porque mediante un índice será la forma más rápida de hacer la
comprobación...


Eladio Rincón
SQL Server MVP
"Comparte lo que sabes, aprende lo que no sepas", FGG

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Oscar" wrote in message
news:
En SQL Server. Cuando se define una clave
candidata con UNIQUE ¿Qué diferencia hay entre
elegir "restricción" o "índice"?

Necesito una solución "de manual" teórica de exresamente q es la
difencencia, ya q en la aynda de SQL server y en libros no la he


encontrado.

Seria preferible q contestara uno de MS a ser posible y si no alguien q lo
sepa y lo escriba o q me dij en q libro y pagina sale.

ES URGENTE, muchas gracias

A parte de poner la soluccion aquí lo agradeceria q me la mandarias a


MUCHAS GRACIAS

Respuesta Responder a este mensaje
#3 1492a2001
23/11/2004 - 23:22 | Informe spam
"Oscar" wrote in message news:...
En SQL Server. Cuando se define una clave
candidata con UNIQUE ¿Qué diferencia hay entre
elegir “restricción” o “índice”?



Sólo hay una diferencia semántica, cuando defines una restricción lo
haces a nivel lógico, el índice pertenece al nivel físico.

¿te has fijado que no puedes hacer un DROP INDEX del índice asociado
a la restricción?


Necesito una solución "de manual" teórica de exresamente q es la
difencencia, ya q en la aynda de SQL server y en libros no la he encontrado.



eso es porque no le has dedicado suficiente tiempo.


Seria preferible q contestara uno de MS a ser posible y si no alguien q lo
sepa y lo escriba o q me dij en q libro y pagina sale.




pues no pides casi nada :-DDD

ES URGENTE, muchas gracias

A parte de poner la soluccion aquí lo agradeceria q me la mandarias a


MUCHAS GRACIAS
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida