Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con indice unico en mysql

Estas en el tema de Problema con indice unico en mysql en el foro de Mysql en Foros del Web. Hola a todos. He estado investigando pero no he conseguido encontrar una solución. En el trabajo que estoy ahora me he encontrado unproyecto a medias. ...
  #1 (permalink)  
Antiguo 22/02/2013, 05:37
 
Fecha de Ingreso: febrero-2013
Mensajes: 25
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Problema con indice unico en mysql

Hola a todos.

He estado investigando pero no he conseguido encontrar una solución.

En el trabajo que estoy ahora me he encontrado unproyecto a medias. Resulta que hay una tabla de clientes donde la clave primaria es un id_cliente autoincremental.

Por otro lado esta el id_usuario y el login, a parte de más campos.

El login de cliente tiene que ser unico por usuario. Mi idea era poner el login en la base de datos como unique index, pero claro debería ser unique index los dos campos juntos (id_usuario y login), pero no con el id_cliente porque este s autoincremental.

Se puede hacer sin reestructurar la base de datos y eliminar el autoincremental

Puedo hacer esos dos campos unicos, sin quitar la clave primaria del autoincremental. ¿Como se haría?

Un saludo
Gracias
  #2 (permalink)  
Antiguo 22/02/2013, 06:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con indice unico en mysql

Cita:
Se puede hacer sin reestructurar la base de datos y eliminar el autoincremental
Perfectamente posible, aunque tienes que tener en cuenta que deberás reemplazar todo uso de ese ID como FK en las tablas donde se use como tal.
Cita:
Puedo hacer esos dos campos unicos, sin quitar la clave primaria del autoincremental. ¿Como se haría?
También, aunque en ese caso estarías creando una clave candidata, con lo que uno se termina preguntando para qué tienes la otra...

Es algo redundante tener dos claves posibles, aunque no es necesariamente ilógico (habría que ver el sistema en general).

Lo que si te puedo decir, es que si tienes un username, sea como sea que lo llames, y un username es único por usuario, la PK como AI es total y absolutamente innecesaria.
En tu caso no me queda claro si id_user es el username y login es el password, o qué es cada una de esas columnas, por lo que sí te puedo decir es que es un error diseñar un índice UNIQUE donde juntes username y password (si eso estás pensando), por cuanto en ese caso un mismo usuario podría tener más de una clave (N claves) y eso es un error grave de seguridad y diseño.

Personalmente soy enemigo de usar IDs autoincrementales, porque a la larga terminan dando más problemas que las "soluciones" que pueden representar.
Respecto a la creación de un indice UNIQUE, simplemente puedes recurrir al manual de referencia: CREATE INDEX

¿Podrías explicar un poco mejor el uso de los campos que mencionas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/02/2013, 06:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con indice unico en mysql

Crea un indice unico sobre el campo loguin o username o como le llames....

http://dev.mysql.com/doc/refman/5.0/...ate-index.html

http://stackoverflow.com/questions/7...ltext-in-mysql

te dejo dos links...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 22/02/2013, 06:34
 
Fecha de Ingreso: febrero-2013
Mensajes: 25
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Problema con indice unico en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Perfectamente posible, aunque tienes que tener en cuenta que deberás reemplazar todo uso de ese ID como FK en las tablas donde se use como tal.

También, aunque en ese caso estarías creando una clave candidata, con lo que uno se termina preguntando para qué tienes la otra...

Es algo redundante tener dos claves posibles, aunque no es necesariamente ilógico (habría que ver el sistema en general).

Lo que si te puedo decir, es que si tienes un username, sea como sea que lo llames, y un username es único por usuario, la PK como AI es total y absolutamente innecesaria.
En tu caso no me queda claro si id_user es el username y login es el password, o qué es cada una de esas columnas, por lo que sí te puedo decir es que es un error diseñar un índice UNIQUE donde juntes username y password (si eso estás pensando), por cuanto en ese caso un mismo usuario podría tener más de una clave (N claves) y eso es un error grave de seguridad y diseño.

Personalmente soy enemigo de usar IDs autoincrementales, porque a la larga terminan dando más problemas que las "soluciones" que pueden representar.
Respecto a la creación de un indice UNIQUE, simplemente puedes recurrir al manual de referencia: [URL="http://dev.mysql.com/doc/refman/5.6/en/create-index.html"]CREATE INDEX[/URL]

¿Podrías explicar un poco mejor el uso de los campos que mencionas?

Muchas gracias por vuestra rápida respuesta.

gnzsoloyo el problema es que la base de datos ya estaba hecha y el proyecto empezado, corre prisa, y reestructurar todo se que sería lo mejor, pero es un tiempo que ahora no tengo, y que cuando la cantidad de datos aun sea mayor, va a costar más, pero bueno.

Haber creo que no me he explicado bien. Existiria una tabla de clientes y otra de usuarios.

en la tabla de clientes hay un id_cliente autoincremental como clave primaria.
por otro lado esta el id_usuario que seria el id de la tabla usuarios, para que cada cliente pertenezca a un usuario de la otra tabla. Y el campo login es un username de cliente. La password es otro campo a parte.

Entonces el login de cliente es unico por usuario.
  #5 (permalink)  
Antiguo 22/02/2013, 06:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con indice unico en mysql

Lo que quieres es controlar la relacion cliente usuario de manera que cada cliente este asociado a un y solo un usuario, mientras que los usuarios pueden tener varios clientes asociados??? Una relación 1:N...

Eso es tan simple como tener un campo en la tabla clientes donde guardar el idusuario y una FK a la tabla usuarios....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 22/02/2013, 06:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con indice unico en mysql

Si el username es único por cliente, declara UNIQUE ese campo y elimina el AI.
En esa forma te aseguras que no se dupliquen usernames, cosa que en lo que describes es posible.
Lo que no necesitas es a ese "login" adicionarle nada más para el caso. No necesitas dos campos, y si te da un error, es porque hay al menos dos registros con el mismo username. Es decir que en tu caso el id_usuario no se necesita. El "login" es suficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, indice, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:02.