Relaciones imposibles entre tablas

Estoy realizando una base de datos en Access para una academia y mis conocimientos me impiden seguir. Te cuento el problema que tengo por si puedes ayudarme.
Tengo tres tablas:
Alumnos, Matriculas y Grupos.
Alumnos son los datos de las personas con su IdAlumno
Grupos son los datos de los cursos con su IdGrupo
Matriculas tiene un IdMatricula pero otros dos campos IdAlumno e IdGrupo con muchos datos ya que tenía de antes.
A la hora de hacer las relaciones entre IdAlumno de la tabla Alumno e IdAlumno de Matricula no me deja exigir la integridad referencial
A la hora de hacer las relaciones entre IdGrupo de la tabla Grupo e IdGrupo de Matricula no me deja exigir la integridad referencial
Creo que se debe a que ya tengo datos metidos en la tabla matricula pero me es imposible borrarlos y no se que hacer.
Creo que una manera que me podría ser muy útil para ayudarme es si me podrías hacer rápidamente una pequeña base de datos con tres tablas como las mías y datos al azar y establecer las relaciones.
Si necesitas alguna aclaración no dudes en consultarme.
Respuesta
1
Hice las tablas ejemplos que pides y funciona.
Haber si entendí:
ALUMNOSMATRICULASGRUPOS
Idmatricula
Idalumno---->idalumno
Idgrupoidgrupo
Arrastras idalumno(ALUMNOS) hasta idalumno (MATRICULA) y exiges integridad referencial.
Arrastras idgrupo(GRUPOS) hasta idgrupo (MATRICULA) y exiges integridad referencial.
Como se puede ver la tabla MATRICULA es la que tiene dos claves foráneas o externas y deben ser del mismo tipo de dato. En mi caso ejemplo son del tipo texto y en la tabla MATRICULAS las claves externas permiten duplicados evidentemente.
También supuse que las relaciones son del tipo Uno a Varios
Uno a Varios ( -----> )
Sería alumnos----> matriculas
Hice más pruebas:
Si el idalumnos (ALUMNOS) es un tipo de campo "autonumérico" el idalumnos (MATRICULA) DEBE SER UN ENTERO LARGO TAMBIÉN. Delo contrario se produce la imposibilidad de integridad referencial.
-------------------------------------------------
En la respuesta anterior no se pudo ver la gráfica, a si que la escribo otra vez.
Arrastras idalumno(ALUMNOS) hasta idalumno (MATRICULA) y exiges integridad referencial.
Arrastras idgrupo(GRUPOS) hasta idgrupo (MATRICULA) y exiges integridad referencial.
Como se puede ver la tabla MATRICULA es la que tiene dos claves foráneas o externas y deben ser del mismo tipo de dato. En mi caso ejemplo son del tipo texto y en la tabla MATRICULAS las claves externas permiten duplicados evidentemente.
También supuse que las relaciones son del tipo Uno a Varios
Uno a Varios ( -----> )
Sería alumnos----> matriculas<----grupos
Sería bueno, como tu mismo dices, revisar los tipos de datos en los campos de claves para verificar que sean del mismo tipo.
Espero haberte colaborado [email protected] 
atentamente
Luis Ponce

5 respuestas más de otros expertos

Respuesta
1
Yo pasaría de la tablamatriculas ya que según lo que me cuentas esta obsoleta, y crearía otra tabla que fuese "clon" de matriculas, por ejemplo matriculasOK y las relaciones como las tenias establecidas antes.
Así funcionará sin problemas
Respuesta
1
La integridad referencial es para evitar que, por ejemplo, en tu tabla matricula se registren alumnos que no están registrados en tu tabla alumnos.
Lo que tienes que revisar es lo siguiente (para el caso de relación entre Matricula y alumno:
Primero idalumno deber llave única, primaria
Segundo antes de establecer la integridad debes verificar que todos los atributos del campo idAlumno de a tabla matricula tengan pareja en la tabla Alumno (esto puedes verlo ejecutando una consulta +/- de este tipo: SELECT MATRICULAS.IDALUMNO FROM MATRICULAS LEFT JOIN ALUMNOS IN MATRICULA.IDALUMNO=ALUMNOS.IDALUMNO WHERE ALUMNOS.IDALUMNO=NULL;)
Luego podrás establecer la integridad referencial.
Respuesta
1
Ya intentaste cambiar el tipo de Join ???
Si no pásame la BD a mi correo
Dame tu correo y te paso la base
Respuesta
1
Perdón por contestar tan tarde pero he estado un tanto ocupado últimamente.
Ok, hay varios motivos por los que una relación no te acepta la integridad referencial:
1) Tipos de datos
Debes verificar que los tipos datos de ambos campos que quieres relacionar sean iguales.
2)Que en una de las tablas que demandes integridad referencial de otra tabla no exista un valor ya asignado en la tabla. Ejemplo: que un alumno pertenezca a un grupo que no esta ingresado.
Debes verificar que no suceda esto, de ser así ingresa los valores que hacen falta en las tablas que sea necesario hacerlo.
Si nada de esto te funciona lo que se me ocurre es que crees nuevamamente las tablas, las relaciones sin registros y luego hagas un insert into de las tablas anteriores sin relacionar.
Respuesta
Caballero,
Le tengo una solución única.
Tome una copia de su base de Datos... y borre toda la información de ambas tablas.
Y establezca las relaciones desde Cero, así le puede aceptar la ingridad referencial.
Luego de que la acepte, copie y pegue los datos de la tabla anterior a la tabla nueva.
Y listo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas