Pergunta

Eu tenho um banco de dados que armazena detalhes de produtos retirados de vários sites e coletados por meio de APIs de sites individuais.Quando chamo o feed, os detalhes são armazenados em uma tabela de banco de dados.

O problema que estou tendo é que, como exatamente o mesmo produto está listado em muitos sites pelo vendedor, acabo tendo itens duplicados em meu banco de dados e, quando os exibi em uma página da web, há muitos itens duplicados.

O problema é que o item não possui nenhum identificador exclusivo óbvio, ele possui detalhes específicos do item (que podem ser muitos) e, em seguida, uma descrição do item do vendedor.

O que eu gostaria é que o item aparecesse uma vez e depois fornecesse ao usuário detalhes de onde mais o item está listado.

Como eu identificaria as duplicatas recebidas, sem deixar todo o banco de dados lento?Como eu também escolheria um anúncio entre todas as duplicatas e armazenaria em quais outros sites o anúncio é exibido?

Obrigado por qualquer ajuda.

Foi útil?

Solução

O problema é duplo e ambos estão do seu lado.Quando você descobrir como lidar com isso, escrever o código em um programa (Java ou SQL será fácil).Vou nomeá-los primeiro e depois identificar as soluções.

  1. Por alguma razão desconhecida, você presumiu que coletar descrições de produtos de vários sites não coletará o mesmo produto.

  2. Você está acostumado com o comum e sem sentido Id coluna, o que é bom quando você está trabalhando com funcionalidade de prototipagem de planilhas;mas não está nem perto do que é necessário para um banco de dados ou funcionalidade em nível de desenvolvimento.Seus usuários (ou chefe) esperavam naturalmente capacidade de banco de dados e você não forneceu nenhuma.(E não, não requer lógica de string difusa ou magia de qualquer tipo.)

Solução

Esta é uma versão condensada do IDEF1X Padrão para modelagem de Bancos de Dados Relacionais;a parte referente aos identificadores.

  1. Você precisa pensar em termos de banco de dados e nas tabelas de banco de dados necessárias para executar sua função, o que significa que você não tem permissão para usar um incremento automático Id coluna.Essa coluna dá à planilha uma RowId, mas não implica nada sobre o conteúdo da tabela ou sobre as colunas que identificam um produto.

  2. E você não pode simplesmente extrair dados de outro site; você precisa pensar sobre o que seu site exige para os produtos.O que sua empresa entende como um produto e como ela o identifica?

  3. Identifique todas as colunas e tipos de dados das colunas.

  4. Identifique quais colunas são obrigatórias e quais são opcionais.

  5. Identifique quais são fortes Identificadores.Por exemplo. Manufacturer e Model;o curto Product Name, não o longo Description (ou pode ser para sua empresa, a descrição longa é um identificador).Trabalhe com seus usuários e resolva isso.

  6. Você descobrirá que na verdade tem um pequeno grupo de mesas ao redor Product, como Manufacturer, ProductType, talvez Vendor, etc.

  7. Organize essas tabelas e normalize-as para não duplicar dados.

  8. Certifique-se de tratar esses identificadores com um pouco de respeito.Escolha qual será único.Esses são Chaves Candidatas.Você precisa de pelo menos um por mesa, e haverá mais de um em Product.Todos os Identificadores que serão pesquisados ​​precisarão ser indexados (Únicos ou não).Observe que índices exclusivos não podem ser anuláveis, portanto você não pode escolher uma coluna opcional.

  9. O que constitui um único identificador exclusivo para Product não pode ser uma única coluna.Tudo bem, podemos avaliar múltiplas colunas para chaves em bancos de dados;eles são chamados Chaves Compostas.

  10. Pegue o melhor e mais estável (aquele que não mudará) Identificador Único, uma das Chaves Candidatas, e faça com que o Chave primária.

  11. Se, e somente se, o Identificador Único, a Chave Primária, que pode ser uma Chave Composta, for muito longa e, portanto, inadequada para uma Chave Primária, que é migrada para as tabelas filhas, então adicionar a Chave substituta.Esse será o Id coluna.Observe que esta é uma coluna adicional e um índice adicional.Não é um substituto para os Identificadores de Product, as Chaves Candidatas;eles não podem ser removidos.

Até agora, temos um banco de dados de produtos no lado da web de sua empresa, que é significativo para ela.Agora estamos em condições de avaliar produtos do outro lado da web;e quando o fazemos, temos do nosso lado uma estrutura que é forte, contra a qual podemos medir o lixo que recebemos do outro lado da web.

Feeds

  1. Você precisa de um WebSite tabela para gerenciar os feeds.

  2. Haverá uma tabela associativa (muitos para muitos) entre Product e WebSite.Vamos chamá-lo ProductSite.Ele conterá apenas nossos ProductId, e a WebSiteCode. It may containPreço`.O conteúdo é válido para um único ciclo de alimentação.

  3. Carregue cada feed em um banco de dados ou esquema de teste, uma entrada ProductIn tabela, talvez uma por site de origem.Este é apenas o arquivo simples da fonte externa.Adicionar uma coluna IsValid e defina o padrão como verdadeiro.

  4. Em seguida, escreva um SQL que compare isso ProductIn mesa, com seu conteúdo solto e disquete, com nosso Product tabela com seus identificadores fortes.

    • A maneira como eu faria isso seria várias ondas de verificações separadas, cada uma marcando as linhas que falharam, com IsValid para falso.No final insira o IsValid linhas em nosso ProductSite.

    • Você pode ter sorte e conseguir uma abordagem otimista.Ou seja, desde que você encontre uma correspondência em algumas colunas importantes, a correspondência será válida.(reverter o padrão e atualizar o IsValid boleano).

    • Este é o processo que exigirá algum trabalho de ida e volta, até que se estabeleça.É por isso que você precisa trabalhar com seus usuários em relação aos identificadores.O objetivo é não excluir nenhum produto externo, mas seu ponto de partida excluirá muitos.Isso incluirá voltar ao nosso Product tabela e melhorando o conteúdo (valores nas linhas) dos Identificadores e outras colunas relevantes que você usa para identificar linhas correspondentes.

  5. Repita para cada site.

  6. Agora preencha nosso site a partir de nosso Product tabela, usando informações nas quais temos confiança, e mostrar quais sites têm o produto à venda ProductSite.

Outras dicas

Eu não acho que este seja um código ou problema de banco de dados (ainda). Você diz:

O problema é que o item não tem nenhum identificador único óbvio

Você precisa descobrir o que é essa união antes de pedir a um computador para fazer isso por você. Parece que você precisa de algum tipo de algoritmo confuso de similaridade de cordas.

Alguns exemplos de dados que você considera duplicatas podem ajudar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top