Hola:
Siempre que diseñas una base de datos tienes que pensar en el tipo de consultas a las que se va a someter en su vida útil.
O sea, si la operación de lectura(consulta) es la que va a primar y muy pocas veces (o muy pocos usuarios) van a actualizar/insertar datos... entonces no importará redundar porque lo que se intenta es ganar velocidad de acceso de lectura... aunque se pierda rendimiento a la hora de escribir.
En el primer caso que plantes... si tú hicieras una consulta como la que sedinho quiere hacer (y que dio origen a este tema), no habría mayor problema...
Una lista de todos los inmuebles y sus características (las comunes, claro). Simplemente haces la consulta a la tabla "INMUEBLE" y listo.
¿Pero si en lugar de ver todos los inmuebles sólo quieres los áticos y los pisos?... Aquí se complica porque desde la tabla "INMUEBLE" no sabemos quiés es quién. Hay que acceder a tres tablas (inmueble, piso y ático), relacionarlas y discriminar registros...
Si ponemos un campo "tipo_inmueble" esas consultas son tan sencillas como la primera.
Saludos