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

[SOLUCIONADO] Duda SQL

Estas en el tema de Duda SQL en el foro de SQL Server en Foros del Web. POR EJEMPLO, tengo una tabla con 2 valores: id_usuario | id_taller Ningun campo es unico ni clave primaria, y quiero lograr hacer esto: id_usuario | ...
  #1 (permalink)  
Antiguo 05/12/2013, 10:02
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 1 mes
Puntos: 0
Duda SQL

POR EJEMPLO, tengo una tabla con 2 valores:

id_usuario | id_taller

Ningun campo es unico ni clave primaria, y quiero lograr hacer esto:

id_usuario | id_taller
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 2

Pero que al momento de insertar otro registro que la combinacion ya este disponible de un error.

EJ:

1 | 4
1 | 4

Eso deberia dar error, como podria hacerlo aplicando reglas en la base de datos ?
  #2 (permalink)  
Antiguo 05/12/2013, 10:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda SQL

usa constraints, o indices unique :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/12/2013, 10:47
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Duda SQL

No entendiste lo que necesito, aunque igual se agradece.

La cosa es que puedo ingresar las veces que quiera el id_usuario o el id_taller, pero que solamente pueda ingresar un id_usuario y un id_taller iguales en el mismo registro, es decir, la misma combinacion.

1 - 1 si
1 - 2 si
1 - 3 si
1 - 3 NO
2 - 3 si
2 - 2 si
2 - 2 NO

Si es que se hace con constraints o indices, ayudenme porfavor :(
  #4 (permalink)  
Antiguo 05/12/2013, 10:57
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, 5 meses
Puntos: 2658
Respuesta: Duda SQL

Me parece que quien no ha entendido la respuesta de @Libras eres tu.

Veamos:
Si declaras un índice de tipo UNIQUE sobre el par (id_usuario, id_taller), simplemente se disparará un error de clave duplicada si intentas insertar algo como
Cita:
1 | 4
1 | 4
¿No es eso lo que quieres?
Bueno, esa es simplemente la respuesta.
De hecho, si la tabla en cuestión lo que hace es relacionar un usuario con un taller, y no puede repetir el par de valores, pareces estar hablando de una tabla relacional (la que representa una relación N:N), por que lo que realmente correspondería sería declarar ese par como PK, una PK que es compuesta.
Supongo que sabes de qué estoy hablando cuando digo "clave compuesta", ¿no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/12/2013, 11:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda SQL

Cita:
Iniciado por Waroz Ver Mensaje
No entendiste lo que necesito, aunque igual se agradece.

La cosa es que puedo ingresar las veces que quiera el id_usuario o el id_taller, pero que solamente pueda ingresar un id_usuario y un id_taller iguales en el mismo registro, es decir, la misma combinacion.

1 - 1 si
1 - 2 si
1 - 3 si
1 - 3 NO
2 - 3 si
2 - 2 si
2 - 2 NO

Si es que se hace con constraints o indices, ayudenme porfavor :(
Igual no te comente lo de una PK compuesta por el comentario de que no eran llaves......pero tambien podrias usar una PK compuesta como lo menciona @gnzsoloyo....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 05/12/2013, 12:14
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Duda SQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Me parece que quien no ha entendido la respuesta de @Libras eres tu.

Veamos:
Si declaras un índice de tipo UNIQUE sobre el par (id_usuario, id_taller), simplemente se disparará un error de clave duplicada si intentas insertar algo como
¿No es eso lo que quieres?
Bueno, esa es simplemente la respuesta.
De hecho, si la tabla en cuestión lo que hace es relacionar un usuario con un taller, y no puede repetir el par de valores, pareces estar hablando de una tabla relacional (la que representa una relación N:N), por que lo que realmente correspondería sería declarar ese par como PK, una PK que es compuesta.
Supongo que sabes de qué estoy hablando cuando digo "clave compuesta", ¿no?
Muchas gracias, con tu respuesta se me abrió la mente.

Muchas veces se aprende cuando te regañan un poquito xD.
  #7 (permalink)  
Antiguo 05/12/2013, 12:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda SQL

Cita:
Iniciado por Waroz Ver Mensaje
Muchas gracias, con tu respuesta se me abrió la mente.

Muchas veces se aprende cuando te regañan un poquito xD.
No es que te regañen, tambien investiga un poco sobre lo que aqui se te recomienda....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 05/12/2013, 12:31
Avatar de Waroz  
Fecha de Ingreso: marzo-2013
Ubicación: Debajo de mi cama <.<
Mensajes: 13
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Duda SQL

Cita:
Iniciado por Libras Ver Mensaje
No es que te regañen, tambien investiga un poco sobre lo que aqui se te recomienda....
Con las claves compuestas funciona de maravilla (Ya las conocia, pero estaban enterradas bien en el fondo de mi mente xD).

Saludos!

Etiquetas: registro, sql, 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 05:28.