Deduplica i record senza ID?

0

Ho una serie di record per le offerte (esempio sotto in JSON). Vorrei memorizzare questi dati in un database relazionale (Postegresql), tuttavia i dati del fornitore non sono forniti con ID e ci saranno alcune voci che devono essere deduplicate. Ad esempio, nell'esempio seguente, "John Smith and Associates" è elencato sotto diversi nomi simili come fornitore.

Devo dare a ciascun fornitore un ID univoco (anche quelli con i nomi corrispondenti) e quindi deduplicare dopo che il db è stato compilato, o farlo durante l'aggiunta di voci al database?

[ { "Solicitation No": "B2342", "Issuing Organization": "VT Timber Sales", "Award Date": "2017/06/29", "Supplier_details": [{ "Successful Supplier(s)": "John Smith & Associates", "Supplier City": "Georgetown", "Award Total": "$22034.13" }] }, { "Solicitation No": "B2344", "Issuing Organization": "VT Timber Sales", "Award Date": "2017/06/30", "Supplier_details": [{ "Successful Supplier(s)": "John Smith & Assoc", "Supplier City": "Georgetown", "Award Total": "$5034.13" }, { "Successful Supplier(s)": "Some Logging ltd.", "Supplier City": "Georgetown", "Award Total": "$1034.13" }] }, (...)

    
posta Ryder Bergerud 26.07.2017 - 18:03
fonte

2 risposte

2

Dovresti evitare di riempire il database con i duplicati quando possibile.

Se si dispone di un sistema multiutente, la creazione di un duplicato con il proprio ID potrebbe far sì che un altro utente faccia riferimento per errore a questo ID aggiuntivo prima che si verifichi un processo di pulizia tour. In questo caso sarà molto più difficile pulire il casino!

Un secondo argomento è che tu sai che la fonte può contenere duplicati. Se inserisci dei duplicati, in seguito non potrai più sapere quale proviene da una fonte inaffidabile e che proviene da altre fonti (come la voce manuale nel db).

    
risposta data 26.07.2017 - 18:14
fonte
0

La maggior parte dei database ha qualcosa come MERGE o ON DUPLICATE KEY UPDATE e questo è quello che potresti usare. Aggiungi una chiave univoca che copre tutte le colonne pertinenti e il DB non ti permetterà mai di inserire un duplicato.

Se stai utilizzando un linguaggio di programmazione decente, una deduplicazione nel codice è piuttosto semplice e (a condizione che tutti i dati si adattino alla memoria) anche più velocemente di quando si utilizza il database (poiché si risparmiano i costi di comunicazione). Tuttavia, è necessario creare la chiave univoca della tabella, in modo che anche il database controlli i duplicati (mantenere i dati coerenti). Questo controllo aiuta in caso di errore di programmazione o accesso concorrente.

    
risposta data 26.08.2017 - 09:43
fonte

Leggi altre domande sui tag