Primary key

06/03/2006 - 17:38 por Juosepe | Informe spam
Saludos,

Tengo una tabla "Clientes" que tiene como clave principal el email
del cliente.
Esta tabla esta relacionada con otras tablas por este campo.

Tengo establecida una relación entre los campos con "update/delete" en
cascada pero mi problema es que si quiero cambiar este campo desde mis
páginas web entonces provoca errores y en definitiva no me deja cambiarlo.
Si puedo hacerlo desde una consulta SQL.

Porque no puedo cambiar este campo, debo comprobar la relación o los
permisos de jecución de estas consultas?

Por otra banda como podeis imaginar este campo email se cambia con
frequencia, pensais que es una buena idea cambiar la clave principal de esta
tabla por un campo numérico que no se cambie con tanta frequencia?
vale la pena hacer este cambio? a mi me supone cambiar muchas linea de mi
aplicación? si no lo hago voy a tener siempre problemas con este tipo de
cambio en la clave principal?

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Maxi
06/03/2006 - 18:13 | Informe spam
Hola, si desde codigo SQL te deja entonces el problema no lo busques en el
motor ni mucho menos


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Juosepe" escribió en el mensaje
news:
Saludos,

Tengo una tabla "Clientes" que tiene como clave principal el email
del cliente.
Esta tabla esta relacionada con otras tablas por este campo.

Tengo establecida una relación entre los campos con "update/delete" en
cascada pero mi problema es que si quiero cambiar este campo desde mis
páginas web entonces provoca errores y en definitiva no me deja cambiarlo.
Si puedo hacerlo desde una consulta SQL.

Porque no puedo cambiar este campo, debo comprobar la relación o los
permisos de jecución de estas consultas?

Por otra banda como podeis imaginar este campo email se cambia con
frequencia, pensais que es una buena idea cambiar la clave principal de
esta tabla por un campo numérico que no se cambie con tanta frequencia?
vale la pena hacer este cambio? a mi me supone cambiar muchas linea de mi
aplicación? si no lo hago voy a tener siempre problemas con este tipo de
cambio en la clave principal?

Muchas gracias.


Respuesta Responder a este mensaje
#2 Juosepe
07/03/2006 - 09:49 | Informe spam
Entiendo
Pero bajo tu criterio piensas que vale la pena cambiar todo el código
para tener una clave primaria que no se modifique tanto o piensas
que se puede mantener una tabla con el email del usuario como clave
primaria.
Mi pregunta iva más en esta dirección.

Gracias.



"Maxi" escribió en el mensaje
news:
Hola, si desde codigo SQL te deja entonces el problema no lo busques en el
motor ni mucho menos


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Juosepe" escribió en el mensaje
news:
Saludos,

Tengo una tabla "Clientes" que tiene como clave principal el email
del cliente.
Esta tabla esta relacionada con otras tablas por este campo.

Tengo establecida una relación entre los campos con "update/delete" en
cascada pero mi problema es que si quiero cambiar este campo desde mis
páginas web entonces provoca errores y en definitiva no me deja
cambiarlo.
Si puedo hacerlo desde una consulta SQL.

Porque no puedo cambiar este campo, debo comprobar la relación o los
permisos de jecución de estas consultas?

Por otra banda como podeis imaginar este campo email se cambia con
frequencia, pensais que es una buena idea cambiar la clave principal de
esta tabla por un campo numérico que no se cambie con tanta frequencia?
vale la pena hacer este cambio? a mi me supone cambiar muchas linea de mi
aplicación? si no lo hago voy a tener siempre problemas con este tipo de
cambio en la clave principal?

Muchas gracias.






Respuesta Responder a este mensaje
#3 Carlos Sacristán
07/03/2006 - 10:58 | Informe spam
Sí, creo que merece la pena ese cambio. Tienes que encontrar un
identificador del usuario que sea inmutable a lo largo del tiempo
precisamente para evitar situaciones como las que estás comentando.

Además, si la clave primaria no cambia el rendimiento de la aplicación
será mayor al no tener que reordenar los valores del índice clustered de la
tabla (con las implicaciones sobre el resto de los índices que esta acción
tiene)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Juosepe" escribió en el mensaje
news:
Entiendo
Pero bajo tu criterio piensas que vale la pena cambiar todo el código
para tener una clave primaria que no se modifique tanto o piensas
que se puede mantener una tabla con el email del usuario como clave
primaria.
Mi pregunta iva más en esta dirección.

Gracias.



"Maxi" escribió en el mensaje
news:
> Hola, si desde codigo SQL te deja entonces el problema no lo busques en


el
> motor ni mucho menos
>
>
> Salu2
> Maxi [MVP SQL SERVER]
> www.sqlgurus.org
>
>
> "Juosepe" escribió en el mensaje
> news:
>> Saludos,
>>
>> Tengo una tabla "Clientes" que tiene como clave principal el email
>> del cliente.
>> Esta tabla esta relacionada con otras tablas por este campo.
>>
>> Tengo establecida una relación entre los campos con "update/delete" en
>> cascada pero mi problema es que si quiero cambiar este campo desde mis
>> páginas web entonces provoca errores y en definitiva no me deja
>> cambiarlo.
>> Si puedo hacerlo desde una consulta SQL.
>>
>> Porque no puedo cambiar este campo, debo comprobar la relación o los
>> permisos de jecución de estas consultas?
>>
>> Por otra banda como podeis imaginar este campo email se cambia con
>> frequencia, pensais que es una buena idea cambiar la clave principal de
>> esta tabla por un campo numérico que no se cambie con tanta frequencia?
>> vale la pena hacer este cambio? a mi me supone cambiar muchas linea de


mi
>> aplicación? si no lo hago voy a tener siempre problemas con este tipo


de
>> cambio en la clave principal?
>>
>> Muchas gracias.
>>
>>
>
>


Respuesta Responder a este mensaje
#4 Juosepe
07/03/2006 - 14:11 | Informe spam
Ok.
Entiendo lo que me dices y pienso que seria lo mejor hacer el cambio.
Pero en caso de dejar el email como clave principal:

Crees que es posible tener una aplicacion que permita cambiar este campo
email y que a la vez sea estable? que no deje tablas o datos incoerentes.

Para hacer esto basta con las reglas de dependencia del SQL en las tablas?
O crees mejor que tendria que hacer una procedure para asegurarme en modo
"transaccion" si una de los updates no se hace se tiran para atras los
demas (no se si me explico...) "Puedo hacer esto del modo transacción
como?"

Alguna idea mejor?

Muchas gracias.


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
Sí, creo que merece la pena ese cambio. Tienes que encontrar un
identificador del usuario que sea inmutable a lo largo del tiempo
precisamente para evitar situaciones como las que estás comentando.

Además, si la clave primaria no cambia el rendimiento de la aplicación
será mayor al no tener que reordenar los valores del índice clustered de
la
tabla (con las implicaciones sobre el resto de los índices que esta acción
tiene)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Juosepe" escribió en el mensaje
news:
Entiendo
Pero bajo tu criterio piensas que vale la pena cambiar todo el código
para tener una clave primaria que no se modifique tanto o piensas
que se puede mantener una tabla con el email del usuario como clave
primaria.
Mi pregunta iva más en esta dirección.

Gracias.



"Maxi" escribió en el mensaje
news:
> Hola, si desde codigo SQL te deja entonces el problema no lo busques en


el
> motor ni mucho menos
>
>
> Salu2
> Maxi [MVP SQL SERVER]
> www.sqlgurus.org
>
>
> "Juosepe" escribió en el mensaje
> news:
>> Saludos,
>>
>> Tengo una tabla "Clientes" que tiene como clave principal el email
>> del cliente.
>> Esta tabla esta relacionada con otras tablas por este campo.
>>
>> Tengo establecida una relación entre los campos con "update/delete" en
>> cascada pero mi problema es que si quiero cambiar este campo desde mis
>> páginas web entonces provoca errores y en definitiva no me deja
>> cambiarlo.
>> Si puedo hacerlo desde una consulta SQL.
>>
>> Porque no puedo cambiar este campo, debo comprobar la relación o los
>> permisos de jecución de estas consultas?
>>
>> Por otra banda como podeis imaginar este campo email se cambia con
>> frequencia, pensais que es una buena idea cambiar la clave principal
>> de
>> esta tabla por un campo numérico que no se cambie con tanta
>> frequencia?
>> vale la pena hacer este cambio? a mi me supone cambiar muchas linea de


mi
>> aplicación? si no lo hago voy a tener siempre problemas con este tipo


de
>> cambio en la clave principal?
>>
>> Muchas gracias.
>>
>>
>
>






Respuesta Responder a este mensaje
#5 Carlos Sacristán
07/03/2006 - 14:23 | Informe spam
Crees que es posible tener una aplicacion que permita cambiar este campo
email y que a la vez sea estable? que no deje tablas o datos incoerentes.



Es que aquí se aplica la misma lógica que antes: si el correo
electrónico es lo que identifica al usuario, no tiene sentido que la
aplicación deje cambiarlo. Y en caso afirmativo, entonces ese campo no puede
ser clave primaria de la tabla. De todos modos, SQL Server te permite
definir actualizaciones en cascada en la definición de la integridad
referencial para que, en el caso de que se modifique la clave primaria, este
cambio se arrastre a las tablas "hija"

Para hacer esto basta con las reglas de dependencia del SQL en las tablas?
O crees mejor que tendria que hacer una procedure para asegurarme en modo
"transaccion" si una de los updates no se hace se tiran para atras los
demas (no se si me explico...) "Puedo hacer esto del modo transacción
como?"



Como te he comentado antes, SQL Server te lo permite hacer
automáticamente (actualizaciones en cascada). Pero te aconsejo que no sigas
por ese camino porque no es el más correcto, te puede dar problemas más
adelante...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Juosepe" escribió en el mensaje
news:
Ok.
Entiendo lo que me dices y pienso que seria lo mejor hacer el cambio.
Pero en caso de dejar el email como clave principal:

Crees que es posible tener una aplicacion que permita cambiar este campo
email y que a la vez sea estable? que no deje tablas o datos incoerentes.

Para hacer esto basta con las reglas de dependencia del SQL en las tablas?
O crees mejor que tendria que hacer una procedure para asegurarme en modo
"transaccion" si una de los updates no se hace se tiran para atras los
demas (no se si me explico...) "Puedo hacer esto del modo transacción
como?"

Alguna idea mejor?

Muchas gracias.


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
> Sí, creo que merece la pena ese cambio. Tienes que encontrar un
> identificador del usuario que sea inmutable a lo largo del tiempo
> precisamente para evitar situaciones como las que estás comentando.
>
> Además, si la clave primaria no cambia el rendimiento de la


aplicación
> será mayor al no tener que reordenar los valores del índice clustered de
> la
> tabla (con las implicaciones sobre el resto de los índices que esta


acción
> tiene)
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Juosepe" escribió en el mensaje
> news:
>> Entiendo
>> Pero bajo tu criterio piensas que vale la pena cambiar todo el código
>> para tener una clave primaria que no se modifique tanto o piensas
>> que se puede mantener una tabla con el email del usuario como clave
>> primaria.
>> Mi pregunta iva más en esta dirección.
>>
>> Gracias.
>>
>>
>>
>> "Maxi" escribió en el mensaje
>> news:
>> > Hola, si desde codigo SQL te deja entonces el problema no lo busques


en
> el
>> > motor ni mucho menos
>> >
>> >
>> > Salu2
>> > Maxi [MVP SQL SERVER]
>> > www.sqlgurus.org
>> >
>> >
>> > "Juosepe" escribió en el mensaje
>> > news:
>> >> Saludos,
>> >>
>> >> Tengo una tabla "Clientes" que tiene como clave principal el email
>> >> del cliente.
>> >> Esta tabla esta relacionada con otras tablas por este campo.
>> >>
>> >> Tengo establecida una relación entre los campos con "update/delete"


en
>> >> cascada pero mi problema es que si quiero cambiar este campo desde


mis
>> >> páginas web entonces provoca errores y en definitiva no me deja
>> >> cambiarlo.
>> >> Si puedo hacerlo desde una consulta SQL.
>> >>
>> >> Porque no puedo cambiar este campo, debo comprobar la relación o los
>> >> permisos de jecución de estas consultas?
>> >>
>> >> Por otra banda como podeis imaginar este campo email se cambia con
>> >> frequencia, pensais que es una buena idea cambiar la clave principal
>> >> de
>> >> esta tabla por un campo numérico que no se cambie con tanta
>> >> frequencia?
>> >> vale la pena hacer este cambio? a mi me supone cambiar muchas linea


de
> mi
>> >> aplicación? si no lo hago voy a tener siempre problemas con este


tipo
> de
>> >> cambio en la clave principal?
>> >>
>> >> Muchas gracias.
>> >>
>> >>
>> >
>> >
>>
>>
>
>


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