Lo que tienes que pensar es: ¿Qué voy a mostrar habitualmente y por tanto cuál será la consulta que más realice? Eso te dará la clave.
No te hacen falta tantas tablas, tienes que pensar que tu consulta más habitual será la información de un inmueble y mostrarás todos o casi todos los datos. Por tanto mejor agruparlos en una tabla.
Para filtrar no te hace falta crear nuevas entidades, sino sólo discriminar dentro de la misma tabla de forma horizontal. Esto es, si por ejemplo quieres filtrar por municipio:
PHP:
SELECT *
FROM PRODUCTO
WHERE municipio = municipio_seleccionado_por_usuario;
Tal y como estás haciendo en el ejemplo de tu primer post, estarías cargando la consulta innecesariamente. Para obtener todo la información tendrías que poner una clave foránea en producto a alguna de las claves candidatas de cada entidad que creas; o como mínimo, poner una clave foránea en producto e ir relacionando todas, lo que aún encarecería más la consulta en términos de eficiencia. Lógicamente esto te lo digo pensando en que la web funcione y la base de datos crezca, para ahorrar modificaciones futuras y tener que repensar toda la aplicación.
Piensa que si quieres rescatar todos los datos, con una sola clave foránea, tendrías que recurrir a algo similar:
PHP:
SELECT a.titulo, a.descripcion, a.coste, a.imagen, b.nombre, c.nombre, d.nombre, e.nombre
FROM PRODUCTO a JOIN TIPO b
ON a.id = b.id
JOIN CATEGORIA c
ON b.id = c.id
JOIN ESTADO d
ON c.id = d.id
JOIN MUNICIPALIDAD e
ON d.id = e.id
WHERE filtro = filtro_seleccionado;
Siempre que se pueda es mejor juntar la información y no dividirla porque a primera vista pueda parecer lógico. De esta forma aprovecharás mejor los índices y también la forma en que los gestores de base de datos recuperan la información del disco.
Es sólo un ejemplo llevado al absurdo para que veas que no tiene sentido ese diseño entidad-relación.
La información se podría obtener de otras formas obviamente con esa estructura, pero la manera más sencilla es la que te comento.
Esa división (añadiendo las claves foráneas correctamente), sería correcta si por ejemplo la consulta más habitual no mostrara nada de municipio o tipo, o estas entidades incluyesen mucha más información que sólo se mostrase en una consulta más específica.
Este es un problema serio, porque la gente que no trabaja con bases de datos y programa con frameworks sin aprender primero de BD, comete errores que a la largan lastran los proyectos. He visto webs con pocas visitas que por consumo de recursos tenía que estar pagando un dedicado mensualmente. Cuando un compartido le habría sido suficiente.
Espero haber sido de ayuda.