Que una clave de un subconjunto No se repita

14/10/2005 - 03:11 por Alfredo Crisostomo | Informe spam
En una tabla tengo dos campos TIPO y NUMERO, necesito algo como una subclave
primaria para NUMERO pero para un subconjunto.

Ejemplo. Necesito que NUMERO no se repita para cuando por ejemplo TIPO="E".
Si no es "E" que puedan repetirse sin problema.


Se podria eso en una restriccion check ? o con un indice ?

como ?

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
14/10/2005 - 04:30 | Informe spam
No se entendió demasiado. Puedes brindarnos un ejemplo con los datos que
deseas?

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Alfredo Crisostomo" wrote in message
news:%
En una tabla tengo dos campos TIPO y NUMERO, necesito algo como una
subclave primaria para NUMERO pero para un subconjunto.

Ejemplo. Necesito que NUMERO no se repita para cuando por ejemplo
TIPO="E". Si no es "E" que puedan repetirse sin problema.


Se podria eso en una restriccion check ? o con un indice ?

como ?

Respuesta Responder a este mensaje
#2 Alejandro Mesa
14/10/2005 - 18:46 | Informe spam
Alfredo,

Una forma sencilla de lograr esto seria creando una vista indexada.

Ejemplo:

create view dbo.v1
with schemabinding
as
select numero
from t1
where tipo = 'E'
go

create unique clustered index ix_u_c_v1_numero on dbo.v1(numero)
go

insert into t1 values(1, 'E')
insert into t1 values(2, 'E')
go

insert into t1 values(1, 'E')
go

insert into t1 values(1, 'F')
insert into t1 values(1, 'F')
go

Otra forma seria usando una "computed column", que haga uso de la clave
primaria en caso de que la tabla tenga una.

Ejemplo:

alter table t1
add c1 as case when tipo = 'E' then numero else pk end

create unique nonclustered index ix_u_nc_t1_c1 on t1(c1)
go

No tengo sql server instalado en esta maquina y por lo tanto no he provado
los scripts posteados.


AMB

"Alfredo Crisostomo" wrote:

En una tabla tengo dos campos TIPO y NUMERO, necesito algo como una subclave
primaria para NUMERO pero para un subconjunto.

Ejemplo. Necesito que NUMERO no se repita para cuando por ejemplo TIPO="E".
Si no es "E" que puedan repetirse sin problema.


Se podria eso en una restriccion check ? o con un indice ?

como ?



Respuesta Responder a este mensaje
#3 Alfredo Crisostomo
15/10/2005 - 12:35 | Informe spam
Me fui por lo de la columna calculada. Funciona perfecto.

Gracias..

"Alejandro Mesa" escribió en el
mensaje news:
Alfredo,

Una forma sencilla de lograr esto seria creando una vista indexada.

Ejemplo:

create view dbo.v1
with schemabinding
as
select numero
from t1
where tipo = 'E'
go

create unique clustered index ix_u_c_v1_numero on dbo.v1(numero)
go

insert into t1 values(1, 'E')
insert into t1 values(2, 'E')
go

insert into t1 values(1, 'E')
go

insert into t1 values(1, 'F')
insert into t1 values(1, 'F')
go

Otra forma seria usando una "computed column", que haga uso de la clave
primaria en caso de que la tabla tenga una.

Ejemplo:

alter table t1
add c1 as case when tipo = 'E' then numero else pk end

create unique nonclustered index ix_u_nc_t1_c1 on t1(c1)
go

No tengo sql server instalado en esta maquina y por lo tanto no he provado
los scripts posteados.


AMB

"Alfredo Crisostomo" wrote:

En una tabla tengo dos campos TIPO y NUMERO, necesito algo como una
subclave
primaria para NUMERO pero para un subconjunto.

Ejemplo. Necesito que NUMERO no se repita para cuando por ejemplo
TIPO="E".
Si no es "E" que puedan repetirse sin problema.


Se podria eso en una restriccion check ? o con un indice ?

como ?



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