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

Problema con restriccion doble

Estas en el tema de Problema con restriccion doble en el foro de SQL Server en Foros del Web. Hola a todos, mi problema es el siguiente: Tengo 3 tablas en mi BD, ALUMNOS, INSCRIPCIONES, PERIODO cada uno de ellos con su respectivo id. ...
  #1 (permalink)  
Antiguo 22/06/2012, 07:42
 
Fecha de Ingreso: enero-2011
Mensajes: 39
Antigüedad: 13 años, 9 meses
Puntos: 0
Problema con restriccion doble

Hola a todos, mi problema es el siguiente:

Tengo 3 tablas en mi BD, ALUMNOS, INSCRIPCIONES, PERIODO
cada uno de ellos con su respectivo id.

ALUMNOS
idAlumno
Nombre
Apellido

INSCRIPCIONES
idInscripcion
Alumno
Periodo

PERIODO
idPeriodo
Descripcion

la restriccion que deseo hacer es que; un alumno no pueda inscribirse mas de una vez por periodo, esto es, Alumno 1, Periodo 1, no puede registrarse 2 veces, pero si Alumno 1, Periodo 2.

No se si fui claro, pero agradeceria cualquier sugerencia al respecto.

Gracias.
  #2 (permalink)  
Antiguo 22/06/2012, 08:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con restriccion doble

Pon una llave compuesta en tu tabla inscripciones, que la llave primaria sea idinscripcion,alumno, periodo, te recomiendo que en lugar de manejar el nombre del alumno y la desc del periodo manejes los id's de los mismos para que tu base este normalizada :)

INSCRIPCIONES
idInscripcion PK
Alumno PK
Periodo PK

saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/06/2012, 08:24
 
Fecha de Ingreso: enero-2011
Mensajes: 39
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Problema con restriccion doble

Gracias por la respuesta, pero sigo con problemas, sqlserver solo me deja tener un PK por tabla, como seria eso de llave compuesta??
  #4 (permalink)  
Antiguo 22/06/2012, 08:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con restriccion doble

seria una pk con los 3 campos, y cuando defines tu llave primaria pones que el campo llave sean los 3 :)

por ejemplo para tu tabla seria

ALTER TABLE Customer ADD PRIMARY KEY (idInscripcion,
Alumno,
Periodo)


http://www.sqlserverya.com.ar/temari...od=51&punto=45

http://deadbirdchronicles.wordpress....as-sql-server/

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 22/06/2012, 08:54
 
Fecha de Ingreso: enero-2011
Mensajes: 39
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Problema con restriccion doble

Pues este es el error que me aparece

Mens. 1779, Nivel 16, Estado 0, Línea 1
La tabla 'Inscripcion' ya tiene definida una clave principal.
Mens. 1750, Nivel 16, Estado 0, Línea 1
No se pudo crear la restricción. Consulte los errores anteriores.

Creo que en sqlserver solamente puede haber un PK por tabla, no se si estoy equivocado,
ademas, haciendo eso que me dices, el campo Alumno se volvera unico no??,
si pasa eso un alumno no se podra inscribir para el siguiente periodo o si??
Alumno 1, periodo 1
Alumno 1, periodo 2
...
  #6 (permalink)  
Antiguo 22/06/2012, 09:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con restriccion doble

jajajajaja, usa la logica amigo, claro que nada mas tienes que tener una llave primaria por tabla, asi que elimina la llave que tienes y pon la nueva :)

checate este link

http://blog.sqlauthority.com/2009/05...key-contraint/

y no el campo alumno no seria unico, lo que seria unico seria la combinacion de los 3 campos o sea tendrias

inscripciones
id alumno periodo
1 Alumno 1, periodo 1
2 Alumno 1, periodo 2

aqui si tus id's son generados con campo identity no hay problema si los generas tu puede haber problema con este esquema ya que si tienes

inscripciones
id alumno periodo
1 Alumno 1, periodo 1
2 Alumno 1, periodo 2
3 Alumno 1, periodo 1

seria valido porque es una llave diferente (las llaves compuestas como su nombre lo indica son para que nada mas haya una incidencia de los 3 campos en este caso id 1 alumno 1 periodo 1 es unico y nada mas puede haber una combinacion con esos datos)

espero haberme explicado

saludos!
saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 22/06/2012, 09:47
 
Fecha de Ingreso: enero-2011
Mensajes: 39
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Problema con restriccion doble

Probe lo que me dijiste y funciono, pero aun mantengo un problema, y justo es el caso que explicaste

id Alumno Periodo
1 1 1
2 1 2
3 1 1

ahora, mi ultima duda seria, no se puede hacer todo eso que me dijiste omitiendo el campo id de la tabla Inscripcion?, o sea, solamente con alumno y periodo??

Gracias nuevamente por tu tiempo.
  #8 (permalink)  
Antiguo 22/06/2012, 10:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con restriccion doble

si, si asi lo necesitas usa nada mas los campos que necesitas :) digo tengo varias tablas en donde los 3 campos son llave (uno es un autoincrementable) y no he tenido problemas, pero si necesitas que los campos llaves sean alumno y periodo puedes hacerlo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 22/06/2012, 10:32
 
Fecha de Ingreso: enero-2011
Mensajes: 39
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Problema con restriccion doble

Pues gracias mi amigo, me ha servido de mucho tu ayuda, he solucionado mi problema..
  #10 (permalink)  
Antiguo 22/06/2012, 10:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con restriccion doble

__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: constrant, restriccion, ukey, checked
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 13:11.