Evitare duplicati in DB sqlite?

di il
4 risposte

Evitare duplicati in DB sqlite?

Ciao a tutti ho fatto un programmino in c++ che mi salva delle domande randomiche in un db sqlite, il problema è che essendo randomica la costruzione della domanda (che avviene con la scelta randomica tra "chi,cosa,quando,come,perche" + "congiunzione" + "aggettivi randomici") capita che mi manda nel db a volte delle domande duplicate, come posso ovviare al problema? qui vi allego una foto del db in questione con esempio di frase duplicata.

Grazie mille.
Allegati:
21642_0e15604168cca3631f6a1a82b3b1edf8.jpeg
21642_0e15604168cca3631f6a1a82b3b1edf8.jpeg

4 Risposte

  • Re: Evitare duplicati in DB sqlite?

    Metodo "hokuto" o banale?
    metodo "hokuto": giustapponi le stringhe, calcolane l'hash (ti basta perfino CRC32), memorizza l'hash.
    quando fai inserimento controlla che non esista una riga con l'hash pari a quello.

    in alternativa: prima di inserire controlla un campo alla volta che non sia duplicato.
    terzo metodo: una chiave primaria composta su tutti i campi che ti interessano (ma te lo sconsiglio)
  • Re: Evitare duplicati in DB sqlite?

    Mhhh il metodo hokuto pare buono domandina, il calcolo dell hash della domanda formulata lo faccio prima di mandarla nel db o dopo? cioe prima genero la domanda, calcolo l hash, lo memorizzo insieme ad essa nel db e poi durante la creazione di una nuova domanda ricalcolo il suo hash e scrivo una query sqlite che mi confronti l hash della nuova domanda con eventuali hash uguali delle altre domande nel db?

    Qualche idea su come scrivere la query per il confronto?
  • Re: Evitare duplicati in DB sqlite?

    jarvis1 ha scritto:


    Mhhh il metodo hokuto pare buono domandina, il calcolo dell hash della domanda formulata lo faccio prima di mandarla nel db o dopo? cioe prima genero la domanda, calcolo l hash, lo memorizzo insieme ad essa nel db e poi durante la creazione di una nuova domanda ricalcolo il suo hash e scrivo una query sqlite che mi confronti l hash della nuova domanda con eventuali hash uguali delle altre domande nel db?

    Qualche idea su come scrivere la query per il confronto?
    Non proprio.
    Il metodo bozambico (che ti consiglio) è
    - calcola la stringa da aggiungere ,e il relativo hash
    - controlla se esiste già quell'hash (select count(*) from archivio where hash="booo")
    - se esiste già, non aggiungi in quanto duplicato

    nota: il secondo passo non è il massimo della vita in un ambito multiutente, ma visto che stai usando sqllite non penso dovrai preoccuparti eccessivamente di una gestione transazione D
  • Re: Evitare duplicati in DB sqlite?

    Perfetto tutto funzionante grazie mille!
Devi accedere o registrarti per scrivere nel forum
4 risposte