que sería adoptar un enfoque diferente a su esquema de atribución. En lugar de tratar diferentes atribuciones como sinónimos, las trataría como superposiciones, o más específicamente, anidadas descripciones de una propiedad. Esto manejaría su caso comercial al mismo tiempo que reconoce la astuta observación hecha por Mike Sherrill.
Aquí es un rápido esbozo ERD:
A modo de un diccionario de datos muy rápido:
PROPERTY
es un pedazo de bienes raíces.
CATEGORY
es una colección de atributos descriptivos. El objetivo de esta tabla es más como un organizador de atributos que cualquier otra cosa. Podría incluir cosas como "tipo de propiedad", "estructura de propiedad", "cantidad de baños" y cualquier otra cosa que pueda ser de su interés.
ATTRIBUTE
es una cualidad de interés específica. Tenga en cuenta la relación involucionada en este tipo de entidad. Trataré más con eso más tarde. El punto principal es que los atributos pueden ser más generales o más específicos y algunos atributos se pueden ver como refinamientos de otros atributos.
DESCRIPTOR
es la intersección de una PROPIEDAD y los ATRIBUTOS que se han asociado con esa propiedad en particular.
Entonces, ¿cómo se supone que esto ayuda?
La clave es cómo funcionan los atributos. Si usa un modelo anidado modelo, puede abordar los criterios de atribución y búsqueda más o menos específicos. Considere el siguiente diagrama de una categoría potencial con sus atributos asociados:
En este ejemplo, la categoría es "tipo de propiedad". Puede ver en el diagrama que hay un desglose jerárquico de atributos en esta categoría. Cada cuadro en el diagrama es un registro en ATRIBUTO. Los cuadros que contienen otros cuadros tienen atributos secundarios. Las cajas que están dentro de otra caja tienen un FK en su caja contenedora y así sucesivamente.
De esta manera, podría decir "Quiero encontrar una propiedad que sea un Penthouse". A continuación, puede encontrar los registros de PROPIEDAD con un DESCRIPTOR relacionado que señala en el ATRIBUTO "Penthouse". Eso es bastante fácil. ¿Pero qué ocurre si su búsqueda aparece vacía?
La ventaja de este enfoque es que puede aflojar sus criterios diciendo: "vamos a subir la jerarquía de atribución a la siguiente cosa menos específica que penthouse". En mi ejemplo, eso sería "Highrise". Ahora prueba tu búsqueda nuevamente y es posible que tengas mejor suerte.
Un sistema como este le da la capacidad de ser tan específico como desee en cada categoría de atribución mientras relaja los otros lo suficiente como para comenzar a obtener resultados de búsqueda. De esto se trata realmente el trabajo de un agente inmobiliario, ¿no es así? ¿Ayuda al cliente a hacer los compromisos necesarios para encontrar el mejor ajuste a sus criterios más importantes?
Manejo anidada Establece
La única parte difícil de este enfoque es cómo manejar los conjuntos anidados. Hay muchas formas de hacerlo, muchas de las cuales han sido documentadas exhaustivamente en otros lugares. A mí me gusta la técnica visitation number, especialmente para conjuntos de datos relativamente estáticos. Esto hace que sea muy fácil encontrar coincidencias para un ATRIBUTO dado o cualquiera de sus hijos sin tener que hacer nada exótico en su SQL.
EDITAR: ¿Cómo funciona esto?
OP pregunté cómo se maneja la cantidad de habitaciones y cómo son las consultas? Tomemos otro ejemplo para la ilustración:
Lo anterior muestra los conjuntos anidados en la categoría "Número de dormitorios". También agregué los números de visita al diagrama. Tenga en cuenta la forma en que funcionan los números de visita, en particular, tenga en cuenta que los números de la izquierda (verde) y derecho (rojo) para cualquier valor de atributo dado contienen los números de visita izquierda y derecha para cualquier atributo subordinado. Por ejemplo, "2+ dormitorios" tiene números izquierdo y derecho 6 y 15 respectivamente. Cada atributo que corresponde a "2+ habitaciones" tiene números de izquierda y derecha que se encuentran dentro de este rango.
Entonces, ¿cómo consultaría las propiedades con un descriptor dado? Digamos que queremos encontrar todas las propiedades con dos o más habitaciones. El SQL para dicha consulta podría ser algo como esto:
select P.*
from PROPERTY P
inner join DESCRIPTOR D
on P.id = D.property_id
inner join ATTRIBUTE A
on D.attribute_id = A.id
where A.left >= (select X.left from ATTRIBUTE X
where X.name = '2+ Bedrooms')
and A.right <= (select Y.right from ATTRIBUTE Y
where Y.name = '2+ Bedrooms')
Tenga en cuenta que la consulta anterior es un poco diferente que lo que se podría utilizar realmente. Por ejemplo, probablemente busque el atributo de filtrado utilizando su clave de identidad int en lugar de su nombre de cadena. Sin embargo, pensé en dejarlo como se muestra para mayor claridad alrededor del punto principal, que es el filtro mirando no para un atributo relacionado específico, pero para cualquier atributo relacionado que caiga dentro de su filtro rango.
Si desea filtrar en múltiples atributos, simplemente agregue más sub-cláusulas a su cláusula where.
"... Apartamento, apartamento y ático pueden referirse esencialmente, el mismo tipo de propiedad" Y no pueden. Si estoy buscando un ático, no quiero ver un apartamento. (Probablemente) –
"cualquiera planta baja Y tener un jardín". no tiene sentido, tampoco ¿qué? – reggaeguitar