Cómo identificar los elementos duplicados obtenidos de múltiples alimentaciones y enlace a ellos en una base de datos

StackOverflow https://stackoverflow.com/questions/4275954

Pregunta

Tengo una base de datos de almacenamiento de datos de los productos que se toman de muchos sitios, y se reunieron a través de la API de sitios individuales. Cuando llamo a la alimentación, los datos se almacenan en una tabla de base de datos.

El problema que estoy teniendo es que debido a que el mismo producto aparece en muchos sitios por el vendedor me acaban de tener elementos duplicados en mi base de datos, y luego cuando les mostrar en una página web hay muchos duplicados.

El problema es que el elemento no tiene ningún identificador único obvio, tiene detalles específicos del material (de los cuales podrían ser muchas), y luego una descripción del artículo del vendedor.

Lo que me gustaría es para que el artículo aparece una vez, y luego se dan los datos de usuario de dónde si no aparece el elemento.

¿Cómo puedo identificar los duplicados que han llegado, sin ralentizar toda la base de datos? ¿Cómo iba yo a continuación, también escoger uno anuncio de todos los duplicados, y luego almacenar lo que otros sitios se muestra en el anuncio.

Gracias por cualquier ayuda.

¿Fue útil?

Solución

El problema es doble, y ambos están de su lado. Al encontrar la manera de lidiar con eso, escribir el código en un programa (Java o SQL serán fáciles). Voy a nombrar a ellos primero y luego identificar las soluciones.

  1. Por alguna razón desconocida, se ha asumido que la recopilación de las descripciones de productos de sitios haya numerosas voluntad no recoja el mismo producto.

  2. Usted está acostumbrado a la común y la columna Id sin sentido, lo cual está bien cuando se trabaja con hojas de cálculo de prototipos funcionalidad; pero está muy lejos de lo que se requiere para una funcionalidad de base de datos o de desarrollo a nivel. Sus usuarios (o jefe) se espera naturalmente la capacidad de la base de datos de la base de datos y no proporcionar ninguna. (Y no, no requiere la lógica difusa cadena o la magia de ningún tipo.)

Solución

Esta es una versión condensada de la IDEF1X estándar para el modelado Bases de datos relacionales; la porción re Identificadores.

  1. Es necesario pensar en términos de bases de datos, y pensar en las tablas de la base que necesita para realizar su función, lo que significa que no está autorizado a utilizar una columna Id incremento automático. Esa columna da una hoja de cálculo de un RowId, pero no implica nada sobre el contenido de la tabla, o las columnas que identifican un producto.

  2. Y puedes datos no simplemente estafa otro sitio web, usted necesita pensar acerca de lo que su sitio web requiere para los productos. ¿Qué hace su empresa entiende que un producto es, y cómo identificar un producto?

  3. Identificar todas las columnas y tipos de datos para las columnas.

  4. Identificar las columnas que son obligatorios y cuáles son opcionales.

  5. Identificar que son fuertes Identificadores . P.ej. Manufacturer y Model; Product Name corto, no el largo Description (o puede ser para su empresa, la descripción larga es un identificador). Trabaja con sus usuarios, y el trabajo que fuera.

  6. encontrará que en realidad tienen un pequeño grupo de mesas alrededor de Product, como Manufacturer, ProductType, quizás Vendor, etc.

  7. Organizar las mesas, y normalizarlos, por lo que no está duplicando los datos.

  8. Asegúrese de que usted trata a esos identificadores con un poco de respeto. Elija el que será único. Esos son Candidato Keys . Se necesita al menos una por mesa, y no habrá más de uno de Product. Todos los identificadores que será buscado en necesitarán ser indexados (único o no). Tenga en cuenta que los índices único no puede ser anulable, por lo que no se puede elegir una columna opcional.

  9. Lo que hace que un único identificador único para Product no puede ser una sola columna. Eso está bien, podemos evaluar varias columnas para las llaves en las bases de datos; se les llama claves compuestas .

  10. Tome la mejor, más estable (uno que no va a cambiar) identificador único, una de las claves candidatas, y hacer que el clave principal .

  11. Si, y sólo si, el identificador único, la clave principal, que puede ser una clave compuesta, es muy largo, y por lo tanto inadecuado para una clave principal, que se migró a las tablas secundarias, a continuación, Añadir sustituto clave . Esa será la columna de la Id. Tenga en cuenta que esto es una columna adicional y el índice adicional. No es un sustituto de los Identificadores de Product, las claves candidatas; que no pueden ser quitados.

Hasta el momento tenemos una base de datos del producto empresas en su lado de la banda, que sea significativo para él. Ahora estamos en condiciones de evaluar los productos desde el otro lado de la banda; y cuando lo hacemos, tenemos un marco en nuestro lado del that es fuerte, contra el cual podemos medir la basura que tenemos desde el otro lado de la banda.

Feeds

  1. Se necesita una mesa de WebSite para manejar los alimentos.

  2. Habrá una tabla asociativa (muchos-a-muchos) entre Product y WebSite. Digamos que es ProductSite. Contendrá sólo nuestra ProductId y el WebSiteCode. It may containPrice`. Los contenidos son válidos para un único ciclo de alimentación.

  3. Carga de cada toma en una base de datos provisional o esquema, una mesa ProductIn entrante, tal vez uno por cada sitio web de origen. Esto es sólo el archivo plano de la fuente externa. Añadir un IsValid columna y establecer el defecto a true.

  4. A continuación, escribir algo de SQL que compara esa mesa ProductIn, con su contenido sueltos y flexibles, con nuestra mesa Product con sus fuertes Identificadores.

    • La forma en que lo haría es, varias oleadas de cheques por separado, marcando las filas que no, con IsValid a cada falsa. Al final Inserte las filas IsValid en nuestra ProductSite.

    • Es posible que tenga suerte, y salirse con un enfoque optimista. Es decir, siempre y cuando se encuentra una coincidencia en algunas columnas importantes, el partido es válido. (Revertir el defecto y actualización de la boolean IsValid).

    • Este es el proc que requerirá algo de trabajo de ida y vuelta, hasta que se establezca. Es por ello que es necesario trabajar con los usuarios de los Identificadores de re. El objetivo es excluir hay productos externos, pero su punto de partida excluirá a muchos. Eso incluirá volver a nuestra mesa Product y mejorar el contenido (valores en las filas) de los identificadores, y otras columnas relevantes que se utiliza para identificar las filas coincidentes.

  5. Repetir para cada sitio web.

  6. Ahora pueblan nuestra página web desde la mesa Product, utilizando la información que estamos a punto de confianza, y mostrar los sitios que tienen el producto para la venta de ProductSite.

Otros consejos

No creo que esto es un código o una base de datos de problema (aún). Usted dice:

  

El problema es que el elemento no tiene ningún identificador único obvio

Es necesario trabajar a cabo lo que es uniqeness antes de pedir una computadora para hacer eso por usted. Suena como que necesita algún tipo de algoritmo difuso, cadena de similitud.

Algunos ejemplos de datos que considere ayuda duplicados fuerzas.

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