Definir tipo de relación entre tablas en access

Quiero hacer una base de datos en la que en una tabla pongo tipos de animales y en otra enfermedades. ¿Qué tipo de relación debo definir entre ambas tablas para que funcione? Cada animal puede tener varias enfermedades.
Lo he intentado, pero llegué a un punto en el que al introducir una enfermedad en el formulario, no quedaba asociada a ningún animal.
En el formulario principal defino los datos del animal y hay un botón para que se abra el formulario de enfermedades. Desearía que al introducir los datos de la enfermedad, se asociasen a ese animal del que partí.
¿Me pueden dar alguna pista o ejemplo que pueda adaptar a mi base de datos?

1 Respuesta

Respuesta
1
Yo la plantearía de la siguiente forma:
Tabla Animales, campos: IdAnimal (campo que inequívocamente identifique al animal, es decir clave única), Raza...)
Tabla Enfermedades, campos: IdEnfermedad (campo que, inequívocamente, identifique la enfermedad, clave única), Tratamiento, Proceso...
Tabla Historial, campos: IdAnimal, IdEnfermedad
Con estas 3 tablas tendrías relacionado todo lo que necesitas, Animales e historial lo vincularías por el IdAnimal y Enfermedades e Historial por el IdEnfermedad.
Vamos a llenar la tabla Historial:
Un formulario independiente (no lo bases en ninguna tabla ni consulta) con 2 cuadros combinados, uno para elegir al animal y otro la enfermedad:
1er cuadro:
Nombre: selAnimal
Origen de la fila: Select IdAnimal from Animales
Al hacer clic ---> Procedimiento de evento ---> Me. Refresh
2º cuadro:
Nombre: selEnfermedad
Origen de la fila: Select IdEnfermedad from Enfermedades
Al hacer clic ---> Procedimiento de evento ---> Me. Refresh
Un botón (para insertar el registro del animal elegido y la enfermedad en la tabla Historial) con el siguiente código:
DoCmd.RunSql "Insert Into Historial (IdAnimal, IdEnfermedad) values ('" & Form!selAnimal.Value & "', '" & Form!selEnfermedad.Value & "'"
Es decir, insertame en la tabla historial, en los campos Idanimal e IdEnfermedad los valores que he elegido en los cuadros combinados correspondientes.
Si algún animal o enfermedad no existe en el cuadro correspondiente y lo quieres dar de alta en este mismo formulario tengo un ejemplo en mi página web: http://angelessebas.es/, en el supuesto No está en Lista.
Me cuentas.
Muchas gracias, Ángeles, y ¡enhorabuena por tu página! (http://angelessebas.es/ ).
Pero en este caso IdAnimal tiene formato autonumérico ya que la identificación inequívoca depende de varios campos: el tipo de animales de la base son aves y esos campos son parte de la anilla de identificación, que puede tener diferentes colores, números, diámetro, criador... Por otro lado, también había puesto como autonumérico el IdEnfermedad, ya que puede ser la misma enfermedad que ocurra varias veces al mimo animal o a distintos.
Entonces en la tabla historial no aparece nada distinguible si lo hago así.
Voy a darte algo más de información para intentar aclarar el problema:
Tengo una tabla con todos los campos que definen un animal, que se basan en la descripción de la anilla identificativa y en otros campos propios del animal (raza, sexo...)Y lo que busco es asociar una tabla de enfermedades que pueda tener cada ejemplar (cada ejemplar podrá tener ninguna o varias enfermedades) y que tendrá tres campos (nombre enfermedad, tratamiento y duración de tratamiento + un campo autonumérico como clave).
Si no te he entendido bien y sigues pensando que podría hacerse como comentaste en tu respuesta, por favor, házmelo saber.
Un saludo y gracias otra vez.
Yo pondría como identificador único los datos de la anilla. Ten en cuenta que una clave única no tiene porque ser sólo un campo, puede estar compuesta por varios. Cuando hablo de clave única no me refiero a que sea clave única en la tabla, sino que identifique inequívocamente al animal. En la tabla historial claro que podrás tener el mismo animal con la misma enfermedad 2 o más veces, lo distinguirás por la fecha que supongo meterás en un campo dónde registras el registro (podría ser la fecha del día Date())
Lo que pasa es que tendríamos que poner varios cuadros combinados. Supongamos que la identificación la da el Criador, Color y Numero:
1er cuadro: selCriador
2º cuadro: selColor
3er cuadro: selNumero
No sé si los colores o los número son parte del criador o independientes. Si fuese lo 1º podrías hacer cuadros combinados dependientes (cuadros combinados en cascada, en la página tienes como hacerlos), en el 2º caso cuadros combinados independientes, no tienen relación uno con otro.
Me cuentas.
Muchas gracias por tu interés, Ángeles.
He probado a resolver el problema según tu enfoque, pero me ha parecido un poco tedioso lo de tener que ir eligiendo entre tantos cuadros combinados. Tal vez para otra aplicación sí sería la solución idónea, pero las particularidades de ésta (más de 250 registros) me han hecho volver a probar redefiniendo la relación entre las tablas como pensaba inicialmente y al final ha resultado. En realidad, he eliminado toda relación definida.
He creado tres tablas:
La primera con los campos que describen la anilla de identificación y el animal (nombre común, orden, familia, diámetro, color.) Y con un campo "llave" autonumérico que he llamado Id.
La segunda es la de enfermedades, con el campo Id de la primera (numérico), un campo de nombre de la enfermedad, fecha de inicio de tratamiento, nombre del tratamiento, duración del tratamiento y un id autonumérico propio.
La tercera la he llamado "diario", y tiene el campo Id de la primera, un campo fecha y un campo de comentarios además de un id autonumérico propio.
Luego, en un solo formulario he mostrado todas las tablas, la primera en el principal, y las otras dos en subformularios. He colocado un botón para generar nuevos registros, pasar al registro siguiente y al anterior y borrar registro tanto para la tabla de anillas como para la de enfermedades y diario y ya funciona según lo esperado.
Ya sólo me queda el panel de control y algún informe.
Saludos.
Me alegro de que hayas dado con la solución idónea para tú BD. Ahora ¿Puedo ayudarte en algo? Si no, por favor cierra la pregunta, ya que tengo muchas abiertas y me dificulta para responder a otros usuarios.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas