Clustered index con 2 campos

23/11/2006 - 20:37 por Gregorio López | Informe spam
Hola a todos. Tengo una tabla sobre la cual quiero crear un índice clustered
con 2 campos, el problema es que uno de los campos debe admitir valores
nulos (el otro campo tendría valores únicos lo que aseguraría la unicidad de
los valores para el índice), pero al parecer este detalle no permite la
creación del índice clustered. ¿Que me sugieren para poder hacer esto? Se me
ocurre tener un campo de tipo varchar el cual almacene los valores de ambos
campos concatenados, lo cual permitiría crear el índice, pero igual
supondría duplucidad en los datos.

Saludos.
 

Leer las respuestas

#1 Alejandro Mesa
23/11/2006 - 22:58 | Informe spam
Gregorio,

Creo que falta algo aqui porque sql server si dejea crear un indice
clustered aunque la columna tenga valores nulos.

create table dbo.t1 (
c1 int not null identity unique,
c2 int
)

insert into dbo.t1 default values
insert into dbo.t1 default values

create unique clustered index ix_t1_c1_c2_u_c
on dbo.t1(c1, c2)

select * from dbo.t1

drop table dbo.t1

Lo que si no deja hacer sql server, y creo que la mayoria de sistemas de
bases de datos relacionales, es crear una clave primaria por columnas que
acepten valor null. Por definicion una clave primaria no puede contener
valores null. La forma en que sql server implementa fisicamente una clave
primaria es mediante el uso de un indice unico, que puede ser clustered o no
clustered. No importa el tipo de indice que se escoja para implementar la
clave primaria, esta no puede contener valores nulos. Si una de las columnas
contendra valores unicos, entonces puedes crear una restriccion de unnicidad
por ambas columnas, pero no una clave primaria.

create table dbo.t1 (
c1 int not null identity,
c2 int,
constraint uq_t1_c1_c2 unique (c1, c2)
)

insert into dbo.t1 default values
insert into dbo.t1 default values

select * from dbo.t1

drop table dbo.t1
go

Siempre es bueno que las tablas tengan indice clustered, asi que te tocara
hacer un analisis de tus columns y tipo de queries que usaras contra esa
tabla para escojer que columnas usar en el indice clustered. Si no encuentras
columnas candidatas, nunca esta de mas usar una clave subrrogada.

create table dbo.t1 (
c1 int not null identity primary key clustered,
c2 int not null,
c3 int,
constraint uq_t1_c2_c3 unique (c2, c3)
)

insert into dbo.t1 default values
insert into dbo.t1 default values

select * from dbo.t1

drop table dbo.t1
go


AMB

"Gregorio López" wrote:

Hola a todos. Tengo una tabla sobre la cual quiero crear un índice clustered
con 2 campos, el problema es que uno de los campos debe admitir valores
nulos (el otro campo tendría valores únicos lo que aseguraría la unicidad de
los valores para el índice), pero al parecer este detalle no permite la
creación del índice clustered. ¿Que me sugieren para poder hacer esto? Se me
ocurre tener un campo de tipo varchar el cual almacene los valores de ambos
campos concatenados, lo cual permitiría crear el índice, pero igual
supondría duplucidad en los datos.

Saludos.



Preguntas similares