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.

È stato utile?

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.

  1. Per qualche motivo sconosciuto, hai presupposto che la raccolta delle descrizioni dei prodotti da più siti non consentirà di raccogliere lo stesso prodotto.

  2. 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.

  1. 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 a RowId, ma non implica nulla riguardo al contenuto della tabella o alle colonne che identificano un prodotto.

  2. 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?

  3. Identificare tutte le colonne e i tipi di dati per le colonne.

  4. Identificare quali colonne sono obbligatorie e quali facoltative.

  5. Identifica quali sono forti Identificatori.Per esempio. Manufacturer E Model;il corto Product Name, non a lungo Description (o potrebbe essere per la tua azienda, la descrizione lunga È un identificatore).Lavora con i tuoi utenti e risolvilo.

  6. Scoprirai che in realtà hai un piccolo gruppo di tavoli in giro Product, ad esempio Manufacturer, ProductType, Forse Vendor, eccetera.

  7. Organizza quelle tabelle e normalizzale, in modo da non duplicare i dati.

  8. 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.

  9. 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.

  10. Prendi l'identificatore univoco migliore e più stabile (uno che non cambierà), una delle chiavi candidate, e fai in modo che Chiave primaria.

  11. 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 di Product, 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

  1. Avete bisogno di un WebSite tabella per gestire i feed.

  2. Ci sarà una tabella associativa (molti-a-molti) in mezzo Product E WebSite.Chiamiamolo ProductSite.Conterrà solo il ns ProductId, e il WebSiteCode. It may containPrezzo`.I contenuti sono validi per un singolo ciclo di alimentazione.

  3. 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 colonna IsValid e imposta il valore predefinito su true.

  4. Quindi scrivi qualche SQL che lo confronti ProductIn table, con il suo contenuto sciolto e floscio, con il ns Product 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 il IsValid righe nel nostro ProductSite.

    • 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.

  5. Ripetere per ciascun sito Web.

  6. 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 prodotto ProductSite.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top