Approccio preferito a un processo di abbinamento

4

Attualmente sto mettendo insieme un algoritmo di corrispondenza. Il processo di abbinamento è il seguente:

  • I dati delle query vengono utilizzati per eseguire una "ricerca" su un set di dati di riferimento al fine di determinare un id applicabile che viene poi utilizzato in un ordine di vendita
  • Quando vengono interrogati i dati di ricerca, molto spesso viene restituito più di un risultato perché i dati della query generano generalmente un numero elevato di corrispondenze (ovvero c'è più di un ID tra cui scegliere da utilizzare nell'ordine di vendita). Per identificare solo una riga unica one , vengono applicate una serie di regole (utilizzando i dati della query come origine) per restringere il set di risultati, ad esempio in assenza di valore x quindi utilizzare il valore y e così via
  • Una volta che il risultato della query di ricerca è stato ridotto a sufficienza in modo da identificare solo una singola riga univoca, l'ID viene estratto e viene creato un ordine di vendita

Sono interessato a conoscere approcci diversi / preferiti a questo problema. Attualmente, mi avvicino a questo come segue:

  • Chiama una semplice query di dati per estrarre i dati dalla tabella "lookup" su una base "like for like" confrontando i valori garantiti in modo che corrispondano per fornire un set iniziale ridotto di risultati
  • Con il set di dati risultante (disconnesso), applico un metodo personalizzato per perfezionare ulteriormente il set di risultati, restringendo continuamente una query finché non trovo solo una riga
  • Se in qualsiasi momento mi limito a creare un set di risultati zero count, annullo l'ultima query applicata e "rollback" alla query precedente

In linea di massima sono soddisfatto di questo approccio, ma sono anche consapevole del fatto che potrebbero esserci potenziali impatti sulle prestazioni con grandi volumi di dati. In un mondo ideale, avrei la query di dati in primo piano abbastanza affidabile da restituire solo un singolo risultato, ma sono anche preoccupato che non voglio gonfiare troppo quel livello con troppa logica che circonda il modo in cui i vari " regole "dovrebbe essere applicato.

Qualcuno può suggerire un approccio diverso che dovrei prendere in considerazione?

Grazie in anticipo

    
posta Ian 14.10.2016 - 18:53
fonte

1 risposta

0
  1. Chiama una semplice stored procedure per estrarre i dati dalla tabella "lookup" su una base "like for like" confrontando i valori che sono garantiti per corrispondere per dare un set iniziale ridotto. Salva questi risultati in una tabella "funzionante".

  2. La tabella di lavoro dovrebbe includere una colonna aggiuntiva denominata "Classifica" che può essere impostata su un numero elevato, ad esempio 100.

  3. Con la tabella di lavoro risultante, applica un metodo personalizzato per perfezionare ulteriormente il set di risultati. Per ogni riga che supera i criteri più stringenti, decrementa il rango.

  4. Restringi continuamente i risultati, decrementando Classifica ogni volta che una riga passa il filtro.

  5. Recupera la tabella di lavoro, ordinando per Classifica. Usa la prima riga. Facoltativamente, se la seconda riga ha un rango molto vicino alla prima riga, puoi mostrare entrambe le righe all'utente e fargli prendere la decisione finale.

risposta data 14.02.2017 - 01:58
fonte

Leggi altre domande sui tag