Come identificare gli elementi duplicati raccolti da più feed e collegarli in un database
-
28-09-2019 - |
Domanda
Ho un database che memorizza i dettagli dei prodotti presi da molti siti e raccolti tramite le API dei singoli siti.Quando chiamo il feed, i dettagli vengono archiviati in una tabella del database.
Il problema che sto riscontrando è che, poiché lo stesso identico prodotto è elencato su molti siti dal venditore, finisco per avere articoli duplicati nel mio database e quindi quando li visualizzo su una pagina Web ci sono molti duplicati.
Il problema è che l'oggetto non ha alcun identificatore univoco evidente, contiene dettagli specifici dell'oggetto (che potrebbero essercene molti) e quindi una descrizione dell'oggetto da parte del venditore.
Quello che vorrei è che l'articolo venga visualizzato una volta e quindi fornisca all'utente i dettagli di dove altro è elencato l'articolo.
Come identificherei i duplicati che sono entrati, senza rallentare l'intero database?Come potrei anche scegliere un annuncio da tutti i duplicati e quindi memorizzare su quali altri siti viene visualizzato l'annuncio.
Grazie per qualsiasi aiuto.
Soluzione
Il problema è duplice ed entrambi sono dalla tua parte.Quando capisci come gestirlo, scrivere il codice in un programma (Java o SQL sarà facile).Li nominerò prima e poi identificherò le soluzioni.
Per qualche motivo sconosciuto, hai presupposto che la raccolta delle descrizioni dei prodotti da più siti non consentirà di raccogliere lo stesso prodotto.
Sei abituato al comune e al senza senso
Id
colonna, che va bene quando si lavora con la funzionalità di prototipazione dei fogli di calcolo;ma non è affatto vicino a ciò che è richiesto per un database o per una funzionalità a livello di sviluppo.I tuoi utenti (o il tuo capo) si aspettavano naturalmente funzionalità di database dal database e tu non ne hai fornita alcuna.(E no, non richiede logica di stringhe fuzzy o magia di alcun tipo.)
Soluzione
Questa è una versione condensata del IDEF1X Standard per la modellazione di Database Relazionali;la parte relativa agli Identificatori.
Devi pensare in termini di database e pensare alle tabelle del database di cui hai bisogno per eseguire la tua funzione, il che significa che non ti è consentito utilizzare un incremento automatico
Id
colonna.Quella colonna fornisce un foglio di calcolo aRowId
, ma non implica nulla riguardo al contenuto della tabella o alle colonne che identificano un prodotto.E non puoi semplicemente copiare i dati da un altro sito web, devi pensare a ciò che il tuo sito web richiede per i prodotti.Cosa intende la tua azienda per prodotto e come identifica un prodotto?
Identificare tutte le colonne e i tipi di dati per le colonne.
Identificare quali colonne sono obbligatorie e quali facoltative.
Identifica quali sono forti Identificatori.Per esempio.
Manufacturer
EModel
;il cortoProduct Name
, non a lungoDescription
(o potrebbe essere per la tua azienda, la descrizione lunga È un identificatore).Lavora con i tuoi utenti e risolvilo.Scoprirai che in realtà hai un piccolo gruppo di tavoli in giro
Product
, ad esempioManufacturer
,ProductType
, ForseVendor
, eccetera.Organizza quelle tabelle e normalizzale, in modo da non duplicare i dati.
Assicurati di trattare questi identificatori con un po' di rispetto.Scegli quale sarà unico.Quelli sono Chiavi del candidato.Ne serve almeno uno per tavolo e ce ne sarà più di uno
Product
.Tutti gli identificatori su cui verrà effettuata la ricerca dovranno essere indicizzati (unici o meno).Tieni presente che gli indici univoci non possono essere annullabili, quindi non puoi scegliere una colonna opzionale.A cosa serve un singolo identificatore univoco
Product
potrebbe non essere una singola colonna.Va bene, possiamo valutare più colonne per le chiavi nei database;sono chiamati Chiavi composte.Prendi l'identificatore univoco migliore e più stabile (uno che non cambierà), una delle chiavi candidate, e fai in modo che Chiave primaria.
Se, e solo se, l'Identificatore Univoco, la Chiave Primaria, che può essere una Chiave Composta, è molto lunga, e quindi inadatta per una Chiave Primaria, che viene migrata nelle tabelle figlie, allora aggiungere UN Chiave surrogata.Questo sarà il
Id
colonna.Tieni presente che questa è una colonna aggiuntiva e un indice aggiuntivo.Non sostituisce gli Identificatori diProduct
, le Chiavi del Candidato;non possono essere rimossi.
Finora disponiamo di un database di prodotti sul lato aziendale del Web, che è significativo per questo.Ora siamo in grado di valutare prodotti dall'altra parte del web;e quando lo facciamo, abbiamo dalla nostra parte una struttura forte, rispetto alla quale possiamo misurare la spazzatura che riceviamo dall’altra parte della rete.
Feed
Avete bisogno di un
WebSite
tabella per gestire i feed.Ci sarà una tabella associativa (molti-a-molti) in mezzo
Product
EWebSite
.ChiamiamoloProductSite
.Conterrà solo il nsProductId
, e ilWebSiteCode. It may contain
Prezzo`.I contenuti sono validi per un singolo ciclo di alimentazione.Carica ogni feed in un database o schema di staging, un file in entrata
ProductIn
tabella, forse uno per sito web di origine.Questo è solo il file flat proveniente da una fonte esterna.Aggiungi una colonnaIsValid
e imposta il valore predefinito su true.Quindi scrivi qualche SQL che lo confronti
ProductIn
table, con il suo contenuto sciolto e floscio, con il nsProduct
tabella con i suoi identificatori forti.Il modo in cui lo farei è, diverse ondate di controlli separati, ciascuno contrassegnando le righe che falliscono, con
IsValid
a falso.Alla fine Inserisci ilIsValid
righe nel nostroProductSite
.Potresti essere fortunato e farla franca con un approccio ottimista.Cioè, finché trovi una corrispondenza su alcune colonne importanti, la corrispondenza è valida.(invertire il valore predefinito e aggiornare il file
IsValid
booleano).Questo è il processo che richiederà un po' di lavoro avanti e indietro, finché non si sarà stabilizzato.Ecco perché devi lavorare con i tuoi utenti sugli identificatori.L'obiettivo è non escludere nessun prodotto esterno, ma il tuo punto di partenza ne escluderà molti.Ciò includerà il ritorno al nostro
Product
tabella e migliorando il contenuto (valori nelle righe) degli identificatori e altre colonne pertinenti utilizzate per identificare le righe corrispondenti.
Ripetere per ciascun sito Web.
Ora popola il nostro sito Web dal ns
Product
tabella, utilizzando le informazioni di cui siamo sicuri e mostra da quali siti è in vendita il prodottoProductSite
.
Altri suggerimenti
Non credo che questo sia un codice o database di problema (ancora). Tu dici:
Il problema è che la voce non ha alcun identificativo univoco ovvio
È necessario capire che cosa è uniqeness prima di poter chiedere a un computer per farlo per voi. Suona come è necessario un qualche tipo di fuzzy, stringa di somiglianza algoritmo.
Alcuni esempi di dati che considerate duplicati potrebbe aiutare.