Bases de Datos - Tengo una redundancia de datos

 
Vista:

Tengo una redundancia de datos

Publicado por Luis (3 intervenciones) el 08/10/2010 22:54:32
Hola a todos mi nombre es Luis y soy nuevo en el foro.

Mi problema es el siguiente.

Tengo una tabla hijos la cual contiene los siguientes campos: idhijo, idmadre, idpadre, nombre, fechanac, peso y sexo

Yo cree otra tabla padres cuyos campos son los siguientes: idpadre, nombre, fechanac, peso y sexo.

Vamos a suponer que tengo dos registros en la tabla padres y un registro en la tabla hijos.

En este caso el registro hijo quedaria algo como esto: idhijo: 1, idmadre:1, idpadre:2, nombre:juan, ect

Donde idmadre y idpadre son los dos registros que tengo en la tabla padres.

Aqui es donde llegamos el problema. Como haria yo para hacer una consulta a la tabla hijo donde me devuelva todos los datos del hijo mas los nombres del padre y de la madre.

Yo intente hacer esto: select hijos.idhijos, hijos.idnombre, padres.idpadre from hijos,padres

El problema que yo veo es que en la tabla hijos hay 1 solo registro y en la tabla padres hay dos registros. Existe alguna forma de hacer esa consulta y que me devuelva esos datos en una sola fila?

Luego que me consegui con este problema cree una tabla madre y una tabla padre. Pero me consegui con otro problema. Como hago si quiero que me salgan en una consulta todos los padres (las madres y los padres juntos), ya que su unica diferencia para el caso es el sexo.

Entonces decidi dejar la tabla padres y cuando registro por ejem una madre tambien la registro en la tabla padres. Y con esto funciona bien.

Ahora bien, para mi existe una gran redundancia de datos ya que todos los datos de dos tablas son almacenados en una tercera tabla. Existe otra forma de hacer esto donde no exista tanta redundancia de datos?.

Gracias de antemano. Espero me puedan ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Tengo una redundancia de datos

Publicado por Franklin Gamboa (188 intervenciones) el 11/10/2010 14:45:26
Luis,

Hijos, Padres y Madres son Personas, se pueden encapsular bajo una unica tabla personas, de esta forma tendr'as la menor redundancia de datos.

En los tres casos, van a tener nombre, apellidos, sexo, fecnac, peso, un padre y una madre.

Entonces, como lo haces? creas una tabla de personas, pones el campo idPadre y idMadre, ambos son una referencia a la misma tabla y ya con eso tienes la liga, utilizando una unica tabla.

Ahora la parte mas interesante, como hacer para obtener en un solo registro esos datos: simple, SQL nos permite utilizar Alias en las tablas y compararlas independientemente.

Tenemos al final la tabla personas

IdPersona
IdPadre
IdMadre
nombre
apellido1
apellido2
sexo
fecnac
peso

Tenemos las restricciones de integridad de modo que:

IdPadre = IdPersona
IdMadre = IdPersona

Esto solo dice que un IdPadre DEBE existir en la tabla persona, y el IdMadre tambien, NO tienen que ser el mismo registro, solo existir previamente en esa tabla.

La consulta seria alo asi:

Select hijo.Nombre + ' ' + hijo.Apellido1 + ' ' + hijo.Apellido2 as NombreHijo,
Padre.Nombre + ' ' + Padre.Apellido1 + ' ' + Padre.Apellido2 as NombrePadre,
Madre.Nombre + ' ' + Madre.Apellido1 + ' ' + Madre.Apellido2 as NombreMadre
From Persona HIjo
Inner Join Persona Padre on Hijo.idPadre = Padre.IdPersona
Inner join Persona Madre on Hijo.idMadre = Madre.IdPersona

Nota que yo llamo 3 veces la misma tabla personas, una la llamo hijos, otra padre y la tercera madre, al hacerlo asi el motor de base de datos los va a tomar como 3 tablas independientes y a hacer al comparacion como tal.

Ya con esto vas a tener el nombre con apellidos del hijo y de los padres, en una sola linea para cada registro.

Espero haberte ayudado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tengo una redundancia de datos

Publicado por Luis (3 intervenciones) el 11/10/2010 16:19:46
Hola Franklin Gamboa,

Me evitaste el desastre que tenia planeado. Ademas de todo lo que comente antes tambien existia el problema de que un hijo algun dia iba a ser padre o madre y se iban crear muchos mas datos innecesarios.

Probe el ejemplo que me diste y funciona muy bien, a pesar de 3 errores de sintaxis (ojo no se si esto funciona en otro sql tal cual como esta. yo trabajo con mysql).

Voy a colocar el ejemplo sin errores por si a alquien le hace falta. Yo probe el ejemplo con un sql un poco mas sencillo sin realizar las concatenaciones. Esto lo digo por si alguien ejecuta el sql tal cual, eso no lo probe. Las correcciones son tres (AS) que faltaron y son los siguientes: Persona AS HIjo, Persona AS Padre, Persona AS Madre.

Select hijo.Nombre + ' ' + hijo.Apellido1 + ' ' + hijo.Apellido2 as NombreHijo,
Padre.Nombre + ' ' + Padre.Apellido1 + ' ' + Padre.Apellido2 as NombrePadre,
Madre.Nombre + ' ' + Madre.Apellido1 + ' ' + Madre.Apellido2 as NombreMadre
From Persona AS HIjo
Inner Join Persona AS Padre on Hijo.idPadre = Padre.IdPersona
Inner join Persona AS Madre on Hijo.idMadre = Madre.IdPersona

Me fue muy util participar el foro Gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tengo una redundancia de datos

Publicado por Franklin Gamboa (188 intervenciones) el 11/10/2010 18:13:08
Genial que te haya resultado, en otros motores de bases de datos, los tres (AS) que mecionas son opcionales (y yo etsoy muy acostumbrado a no usarlos, mi error)... pero lo importante es que lograste tu objetivo :)

Ha sido un gusto ayudarte y exitos. aprende bastante para que puedas compartir tus conocimientos con nosotros.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar