PDA

Ver la Versión Completa : Dilema entidad relacion


JAI_ME
10-08-2011, 17:06:33
Buenos días, tengo las siguientes tablas pais, departamento, municipio, noticias con la siguiente estructura.

pais
--------
idpais
nombre

departamento
---------------
iddepartamento
idpais
nombre

municipio
-----------
idmunicipio
iddepartamento
nombre

la idea es que los usuarios puedan crear noticias en cada cada nivel (pais, departamento, municipio) por ende la estructura de la tabla noticia es la siguiente

noticia
---------
idnoticia
titulo
texto


la cuestion es que no se como relacionar la tabla noticia con las tres tablas antes mencionadas.

Sera crear un campo tipo que me diga a que tabla pertenece la noticia, y un campo idregistro donde guarde el codigo de la tabla donde se guardo la noticia.

o que me recomiendan, mil gracias.

maeyanes
10-08-2011, 17:14:39
Hola...

Yo lo haría:


noticia
----------
idnoticia
idmunicipio <--- desde el municipio se puede saber el departamento y el pais
nivel <--- aquí indico el nivel de la noticia
titulo
texto



Saludos...

oscarac
10-08-2011, 17:25:58
iba a sugerir lo mismo, pero se me adelantaron :D

JAI_ME
10-08-2011, 17:53:47
si estamos de acuerdo todos, pero el problema es que si la persona esta en el departamento y desea crear la noticia en ese nivel, sin tener la necesidad de llegar al municipio, que codigo guardo en el campo idmunicipio ?

o quizas el usuario va a crear una noticia en el nivel pais, sin necesidad de entrar al departamento ? que hago en ese caso.


lo que ustedes me dicen me funciona si el usuario siempre crea la noticia en el nivel municipio.

gracias.

oscarac
10-08-2011, 18:04:13
mmm entonces se me ocurre una solucion...:rolleyes:

agrega un campo adicional a noticia para que identifique de donde viene si es Pais, departamento o municipio y un campos donde guardes la informacion del Pais, departamento o municipio

maeyanes
10-08-2011, 18:12:50
Hola...

Si la noticia es del nivel país, en municipio guardas el primero que pertenezca a ese país, y lo mismo para el departamento. Y a la hora de hacer una consulta para las noticias de X país solo haces algo como:


/* Mostrar noticias de X pais */
select p.nombre pais, n.titulo, n.texto from noticia n
join municipio m on m.idmunicipio = n.idmunicipio
join departamento d on d.iddepartamento = m.iddepartamento
join pais p on p.idpais = d.idpais
where n.nivel = 0 and /* pensando que 0 = pais, 1 = depto, 2 = municipio */
p.nombre = 'X'

/* Mostrar noticias de X departamento */
select d.nombre departamento, n.titulo, n.texto from noticia n
join municipio m on m.idmunicipio = n.idmunicipio
join departamento d on d.iddepartamento = m.iddepartamento
where n.nivel = 1 and
d.nombre = 'X'



Saludos...

JAI_ME
10-08-2011, 18:12:53
el campo adicional lo puedo llamar idrelacion, y agrego un tipo para saber de que nivel viene ?

Es correcto ?

oscarac
10-08-2011, 18:16:03
el campo adicional lo puedo llamar idrelacion, y agrego un tipo para saber de que nivel viene ?

Es correcto ?

asi es...... siiiiii:D

JAI_ME
10-08-2011, 19:00:37
muchísimas gracias me imagine que esa era la solución, pero pensé que había otra forma de hacerlo, de nuevo mil gracias.