Tabla con dos Índices

08/06/2009 - 12:24 por Ajataru | Informe spam
Hola a todos,

me he encontrado casualmente con un problema, que me resulta un tanto
extraño:

- tengo una tabla en la que he definido un índice basado en dos campos.
- tengo otra tabla, en la que incluyo dos campos relacionados con el
índice de la primera tabla.
- para meter valores en la segunda tabla, tengo quue meter pares de
valores que existan en la primera.

hasta aquí, todo bien y normal, pero casualmente, metí unos valores en la
tabla, insertando solo el valor del primero de los índices, y no el segundo,
dejando en el un NULL. Por lo que tengo en la 2ª tabla un par de valores
(XXX, NULL), que obviamente, no existe como tal en la tabla primaria. Pues
SQL traga, y no da ningún error. Mientras uno de los dos valores sea un
NULL, no hace ninguna evaluación...

He comprobado los índices, y en ppio. está todo OK. Hay alguna opcion de la
BBDD que activa / desactiva este comportamiento?. Es esto normal?.

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
08/06/2009 - 14:38 | Informe spam
Cambia la definición de esa segunda tabla para que esos campos no acepten
NULL

Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"Ajataru" escribió en el mensaje
news:h0iot5$
Hola a todos,

me he encontrado casualmente con un problema, que me resulta un tanto
extraño:

- tengo una tabla en la que he definido un índice basado en dos campos.
- tengo otra tabla, en la que incluyo dos campos relacionados con el
índice de la primera tabla.
- para meter valores en la segunda tabla, tengo quue meter pares de
valores que existan en la primera.

hasta aquí, todo bien y normal, pero casualmente, metí unos valores en la
tabla, insertando solo el valor del primero de los índices, y no el
segundo, dejando en el un NULL. Por lo que tengo en la 2ª tabla un par de
valores (XXX, NULL), que obviamente, no existe como tal en la tabla
primaria. Pues SQL traga, y no da ningún error. Mientras uno de los dos
valores sea un NULL, no hace ninguna evaluación...

He comprobado los índices, y en ppio. está todo OK. Hay alguna opcion de
la BBDD que activa / desactiva este comportamiento?. Es esto normal?.

Muchas gracias.




Respuesta Responder a este mensaje
#2 Ajataru
08/06/2009 - 16:08 | Informe spam
Es una buena idea, siempre que por narices en la segunda tabla tengas que
referenciar siempre un registro de la primera: puede darse el caso, de que
no siempre lo tengas que hacer...

No se si este es un problema de fondo de SQL, de mi instalación, o de como
he creado los índices... le ocurre esto a alguien mas?.





"Carlos Sacristan" escribió en el mensaje
news:%
Cambia la definición de esa segunda tabla para que esos campos no acepten
NULL

Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"Ajataru" escribió en el mensaje
news:h0iot5$
Hola a todos,

me he encontrado casualmente con un problema, que me resulta un tanto
extraño:

- tengo una tabla en la que he definido un índice basado en dos
campos.
- tengo otra tabla, en la que incluyo dos campos relacionados con el
índice de la primera tabla.
- para meter valores en la segunda tabla, tengo quue meter pares de
valores que existan en la primera.

hasta aquí, todo bien y normal, pero casualmente, metí unos valores en la
tabla, insertando solo el valor del primero de los índices, y no el
segundo, dejando en el un NULL. Por lo que tengo en la 2ª tabla un par de
valores (XXX, NULL), que obviamente, no existe como tal en la tabla
primaria. Pues SQL traga, y no da ningún error. Mientras uno de los dos
valores sea un NULL, no hace ninguna evaluación...

He comprobado los índices, y en ppio. está todo OK. Hay alguna opcion de
la BBDD que activa / desactiva este comportamiento?. Es esto normal?.

Muchas gracias.








Respuesta Responder a este mensaje
#3 Gustavo Larriera
08/06/2009 - 17:14 | Informe spam
A ver si se entiende mejor lo que usted quiere: En la tabla 2 se deben
insertar valores (de dos columnas) que *obligatoriamente* existan en la tabla
1?


Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Ajataru" wrote:

Es una buena idea, siempre que por narices en la segunda tabla tengas que
referenciar siempre un registro de la primera: puede darse el caso, de que
no siempre lo tengas que hacer...

No se si este es un problema de fondo de SQL, de mi instalación, o de como
he creado los índices... le ocurre esto a alguien mas?.





"Carlos Sacristan" escribió en el mensaje
news:%
> Cambia la definición de esa segunda tabla para que esos campos no acepten
> NULL
>
> Un saludo
> -
> www.navento.com
> Servicios de Localización GPS
>
> http://blogs.solidq.com/ES/ElRincon...fault.aspx
>
> "Ajataru" escribió en el mensaje
> news:h0iot5$
>> Hola a todos,
>>
>> me he encontrado casualmente con un problema, que me resulta un tanto
>> extraño:
>>
>> - tengo una tabla en la que he definido un índice basado en dos
>> campos.
>> - tengo otra tabla, en la que incluyo dos campos relacionados con el
>> índice de la primera tabla.
>> - para meter valores en la segunda tabla, tengo quue meter pares de
>> valores que existan en la primera.
>>
>> hasta aquí, todo bien y normal, pero casualmente, metí unos valores en la
>> tabla, insertando solo el valor del primero de los índices, y no el
>> segundo, dejando en el un NULL. Por lo que tengo en la 2ª tabla un par de
>> valores (XXX, NULL), que obviamente, no existe como tal en la tabla
>> primaria. Pues SQL traga, y no da ningún error. Mientras uno de los dos
>> valores sea un NULL, no hace ninguna evaluación...
>>
>> He comprobado los índices, y en ppio. está todo OK. Hay alguna opcion de
>> la BBDD que activa / desactiva este comportamiento?. Es esto normal?.
>>
>> Muchas gracias.
>>
>>
>>
>>
>
>



Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
08/06/2009 - 22:04 | Informe spam
Hola,

On 8 jun, 16:08, "Ajataru" wrote:
Es una buena idea, siempre que por narices en la segunda tabla tengas que
referenciar siempre un registro de la primera:



Claro.

puede darse el caso, de que
no siempre lo tengas que hacer...



Entonces sería mejor reevaluar la estructura.


No se si este es un problema de fondo de SQL, de mi instalación, o de como
he creado los índices... le ocurre esto a alguien mas?.




Crear otra tabla que representa esa relación entre las otras dos
(con referencias a las otras dos tablas).

En el caso como tu lo expones, la referencia a la segunda tabla es
a la vez la clave primaria de esta tercera tabla. Es decir, que
aceptará como máximo 1 registro por cada registro en la segunda
tabla. Las demás columnas (2) hacen referencia a la primera tabla.

Puntulizar que en tu pregunta hablabas de un 'índice basado en dos
campos' en la primera tabla. Espero que sea una clave (unique).

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos Sacristan
09/06/2009 - 09:02 | Informe spam
Ajataru, es que sólo tienes tres opciones:

1.- que en la tabla 2 se inserten valores que existan en tabla1-> crear
FK de tabla2 a tabla1
2.- que en la tabla 2 se inserten valores que no tienen necesariamente
que existir en tabla1 -> no crear FK
3.- que en la tabla 2 se inserten valores que existan en tabla1 pero que
puedas insertar NULL -> crear FK de tabla2 a tabla1 con los campos de tabla2
aceptando NULL.

NULL es un "valor" especial (lo entrecomillo porque en realidad no es ningún
valor). Comparar NULL con NULL no devuelve verdadero, sino NULL. En el caso
de insertar un NULL en un campo (o campos) que compone una FK, SQL Server
tiene que chequear la respuesta de la pregunta ¿el(los) valor(es)
insertado(s) en tabla2 existe(n) en tabla1?, ante la que hay 3 posibles
respuestas:

1.- SI. Entonces la restricción se valida correctamente
2.- NO. El motor devuelve una excepción indicando que se ha intentado
violar esa restricción
3.- NULL. Al comparar un valor con NULL, devuelve indeterminado. En el
caso concreto de la FK, no la está incumpliendo (aunque tampoco la está
cumpliendo), sino "todo lo contrario".

Por tu último comentario, realmente no sé qué es lo que necesitas. Si en
ciertos casos necesitas validar la FK y en otros no, entonces no te sirve
una FK. Probablemente necesites validar esa regla por medio de un trigger,
que te permite crear una lógica más compleja.

Espero haberme explicado.

Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"Ajataru" escribió en el mensaje
news:h0j61r$
Es una buena idea, siempre que por narices en la segunda tabla tengas que
referenciar siempre un registro de la primera: puede darse el caso, de que
no siempre lo tengas que hacer...

No se si este es un problema de fondo de SQL, de mi instalación, o de como
he creado los índices... le ocurre esto a alguien mas?.





"Carlos Sacristan" escribió en el mensaje
news:%
Cambia la definición de esa segunda tabla para que esos campos no acepten
NULL

Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"Ajataru" escribió en el mensaje
news:h0iot5$
Hola a todos,

me he encontrado casualmente con un problema, que me resulta un tanto
extraño:

- tengo una tabla en la que he definido un índice basado en dos
campos.
- tengo otra tabla, en la que incluyo dos campos relacionados con el
índice de la primera tabla.
- para meter valores en la segunda tabla, tengo quue meter pares de
valores que existan en la primera.

hasta aquí, todo bien y normal, pero casualmente, metí unos valores en
la tabla, insertando solo el valor del primero de los índices, y no el
segundo, dejando en el un NULL. Por lo que tengo en la 2ª tabla un par
de valores (XXX, NULL), que obviamente, no existe como tal en la tabla
primaria. Pues SQL traga, y no da ningún error. Mientras uno de los dos
valores sea un NULL, no hace ninguna evaluación...

He comprobado los índices, y en ppio. está todo OK. Hay alguna opcion de
la BBDD que activa / desactiva este comportamiento?. Es esto normal?.

Muchas gracias.












Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida