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

¿Cómo resolverían ustedes esto?

Estas en el tema de ¿Cómo resolverían ustedes esto? en el foro de Bases de Datos General en Foros del Web. Hola gente, ¿cómo están? Estoy con una duda que no puedo resolver de forma que me parezca elegante... El tema es así: estoy haciendo una ...
  #1 (permalink)  
Antiguo 19/06/2012, 22:18
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 8 meses
Puntos: 26
¿Cómo resolverían ustedes esto?

Hola gente, ¿cómo están?

Estoy con una duda que no puedo resolver de forma que me parezca elegante... El tema es así: estoy haciendo una web relacionada con las mascotas, donde obviamente tengo las tablas "mascotas", "razas" y "especies".
Cada registro de la tabla mascotas tiene una clave foránea que apunta a la raza, en caso de ser un animal mestizo ("de ninguna raza") actualmente dejo el campo en nulo. Cada una de esas razas tiene una llave que apunta a la especie a la que pertenece, ya que necesito cargar un <select> con las razas de la especie seleccionada.



Ahora, ¿qué pasa si el animal es mestizo? ¿cómo sé a qué especie pertenece? Las soluciones que se me ocurren son:
1. Agregar un campo id_especie a la mascota, colocando dos veces el mismo dato en dos tablas, lo cual es reiterativo (en la tabla razas y en mascotas estaría el id_especie). Esta es la opción que elegí de momento.
2. Hacer una "raza" en la tabla razas que sea "Mestizo canino", otra "Mestizo felino" y así, lo cual no me gusta porque no me interesa seleccionar esas opciones desde el mismo <select> donde están todas las razas, estaría mezclando cosas diferentes. Prefiero que primero se elija si es mestizo o de raza, y si es de raza ahí recién muestro las razas de esa especie.
3. Como de momento tengo sólo dos especies (canina y felina) podría hacer que si id_raza es NULL entonces es un mestizo de raza canina, y si es 0 entonces es mestizo de raza canina, los valores del 1 en adelante serían alguna raza en particular. El problema acá es: ¿qué pasa si luego agrego otra raza?
4. Agregar una columna con valor booleano en "mascotas" que sea "es_mestizo", pero no le veo mucho sentido tampoco ya que podría saber si es mestizo o no al ver que no tiene ningún valor en id_raza.

Espero sus respuestas y desde ya muchas gracias. Un saludo.

Última edición por RabidFish; 19/06/2012 a las 22:31
  #2 (permalink)  
Antiguo 19/06/2012, 23:32
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: ¿Cómo resolverían ustedes esto?

La PKderaza no es si,ple, sino doble. Lleva la PK de especie como parte de su propia clave, con eldiscriminante de la raza. Eso hace que mascota herede ambas al mismo tiempo. Para hacer esto tienes que entender que una PK no debe ser necesariamente ni numerica ni incremental. Se pueden usar otros atributos para definirla.
__________________
¿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 19/06/2012, 23:40
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 8 meses
Puntos: 26
Respuesta: ¿Cómo resolverían ustedes esto?

Gracias por responder, gnzsoloyo, pero no entiendo bien lo que me planteas. ¿Podrías darme un ejemplo de cómo quedaría un registro en la tabla "mascotas" cuando esta mascota es mestiza (no tiene ninguna raza) y es de la raza canina y cómo quedaría otro registro de una mascota que también es mestiza pero de la raza felina? Para las mascotas que son de raza no tengo problema, pongo en "mascotas" el ID de la raza y con ese ID de la raza ya puedo llegar a la especie.

Un saludo.

Etiquetas: registro, tabla, campos
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:22.