Pregunta

estoy programando un sitio web que permite a los usuarios publicar anuncios clasificados con los campos que se detallan para los diferentes tipos de artículos que se venden. Sin embargo, tengo una pregunta sobre el mejor esquema de base de datos.

El sitio cuenta con muchas categorías (por ejemplo. Los coches, ordenadores, cámaras) y cada categoría de anuncios tienen sus propios campos distintos. Por ejemplo, los coches tienen atributos como el número de puertas, marca, modelo, y la potencia mientras que las computadoras tienen atributos como la CPU, RAM, placa base modelo, etc.

Ahora, ya que son todos los listados, yo estaba pensando en un enfoque polimórfica, la creación de una mesa LISTADOS padres y una tabla secundaria diferente para cada una de las diferentes categorías (ordenadores, coches, cámaras). Cada tabla secundaria tendrá una listing_id que unirá a volver a la mesa LISTADOS. Así que cuando un anuncio está exagerado, sería extrae una fila de LISTADOS unidas por la fila vinculada en la tabla secundaria asociada.

LISTINGS
-listing_id
-user_id
-email_address
-date_created
-description

CARS
-car_id
-listing_id
-make
-model
-num_doors
-horsepower

COMPUTERS
-computer_id
-listing_id
-cpu
-ram
-motherboard_model

Ahora, este esquema es un buen patrón de diseño o hay mejores maneras de hacer esto?

He considerado la herencia simple, pero rápidamente se sacudió el pensamiento porque la tabla obtendrá demasiado grande demasiado rápido, pero luego otro dilema vino a la mente - si el usuario hace una búsqueda global en todos los anuncios, entonces eso significa que tendrán que consultar cada tabla secundaria por separado. ¿Qué pasa si tengo más de 100 diferentes categorías, no sería ineficiente?

También pensado en otro enfoque, donde hay una tabla maestra (tabla meta) que define los campos de cada categoría y una mesa de campo que almacena los valores de los campos de cada lista, pero habría que ir contra la normalización de base de datos?

¿Cómo sitios como Kijiji hacerlo?

¿Fue útil?

Solución

El diseño de su base de datos está muy bien. No hay razón para cambiar lo que tienes. He visto el hecho de búsqueda de varias maneras. Uno es que su búsqueda de procedimiento almacenado unirse a todas las tablas que necesita para buscar en el índice y las columnas que se debe buscar. La segunda forma en que he visto hacer que funcionó bastante bien era tener una mesa que sólo se utiliza para la búsqueda que recibe una copia de los campos que cualquier necesidad que se debe buscar. De allí tendría que poner disparadores en esos campos y actualizar la tabla de búsqueda.

Ambos tienen inconvenientes pero preferida, la primera a la segunda.

editar

Se necesitan las siguientes tablas.

Categorías - Carné de identidad - Descripción

CategoriesListingsXref - Categoria ID - ListingId

Con este modelo de referencia cruzada puede unirse a todos sus listados para una determinada categoría durante la búsqueda. A continuación, añadir un poco de SQL dinámico (porque es más fácil de entender) y acumular una consulta para incluir el campo (s) que desea realizar la búsqueda y ejecutar la llamada en su consulta.

Eso es todo.

EDIT 2 Esto parece ser una discusión poco más grande que podemos aleta en estos cuadros de comentarios. Sin embargo, nada de lo que discutiríamos puede ser entendido al leer el siguiente post.          http://www.sommarskog.se/dyn-search-2008.html

Es muy completo y muestra más de 1 manera de hacerlo con los pros y los contras. Buena suerte.

Otros consejos

Creo que el diseño que ha elegido será bueno para el escenario que acabamos de describir. Aunque no estoy seguro de si las tablas de clases sub deben tener su propia identificación. Puesto que un coche es un inmueble, tiene sentido que los valores son de la misma "dominio".

En el típico sitio de anuncios clasificados, los datos para un anuncio se escribe una vez y luego es básicamente sólo lectura. Puede explotar esto y almacenar los datos en un segundo conjunto de tablas que están más optimizadas para la búsqueda en la manera que desea que los usuarios buscar. Además, el problema de búsqueda sólo existe realmente para una búsqueda "general". Una vez que el usuario elige un determinado tipo de anuncio, puede cambiar a las tablas de clases de sub con el fin de hacer una búsqueda más avanzada (RAM> 4gb, cpu = subyugado).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top