Come evitare record duplicati in una tabella Access: tutorial pratico

Per evitare record duplicati in una tabella Access devi prima stabilire quali campi rendono un record realmente unico, quindi applicare una chiave primaria o un indice univoco e aggiungere controlli nelle maschere e nelle importazioni. L’errore più comune è affidarsi soltanto alla ricerca manuale: funziona con poche righe, ma non protegge il database quando i dati crescono o vengono inseriti da più utenti.

Questa guida fa parte delle Guide Access. Per una struttura solida consulta anche come creare una chiave primaria, perché la chiave primaria è importante e come usare l’Autonumerazione.

Indice

  • Che cosa significa record duplicato
  • Duplicati tecnici e duplicati aziendali
  • Chiave primaria e indice univoco
  • Come impedire duplicati su un campo
  • Come impedire duplicati su più campi
  • Come trovare duplicati già esistenti
  • Controlli nelle maschere
  • Importazioni da Excel e CSV
  • Query SQL utili
  • Troubleshooting e FAQ

Che cosa significa record duplicato

Un duplicato non è semplicemente una riga che “sembra simile” a un’altra. Devi prima definire la regola aziendale. Due clienti con lo stesso nome possono essere persone diverse; due prodotti con lo stesso codice articolo, invece, potrebbero rappresentare un errore. Un ordine può contenere più righe dello stesso cliente, mentre una tabella AnagraficaFornitori potrebbe richiedere un codice fornitore univoco.

Il primo passo è quindi distinguere duplicati tecnici e duplicati logici. La chiave primaria impedisce che due record abbiano lo stesso identificatore tecnico. Un indice univoco può invece impedire che si ripeta un valore aziendale come CodiceArticolo, Email o Matricola.

Perché l’Autonumerazione non basta

Se IDCliente è Autonumerazione, ogni riga avrà un ID diverso. Questo non impedisce di creare due clienti con la stessa email o lo stesso codice fiscale. Dal punto di vista di Access sono due record distinti; dal punto di vista del processo aziendale potrebbero essere un duplicato.

Per questo devi identificare i campi che rappresentano l’unicità reale. Se Email deve essere unica, applica un indice univoco a Email. Se una coppia IDOrdine + IDProdotto non può ripetersi, crea un indice composto univoco oppure una chiave primaria composta.

Metodo 1: usare la chiave primaria

La chiave primaria è il vincolo fondamentale. Access crea un indice univoco sul campo o sulla combinazione di campi usati come chiave primaria e non permette valori duplicati. Per una tabella Clienti è comune usare IDCliente Autonumerazione. Per una tabella ponte, invece, puoi usare una chiave composta.

La chiave primaria è necessaria per identificare i record, ma non sostituisce le regole aziendali. Puoi avere IDCliente 1 e IDCliente 2 con la stessa email. La soluzione è affiancare alla chiave primaria altri indici o controlli.

Metodo 2: creare un indice univoco su un campo

Microsoft Support documenta due modalità principali per impedire valori duplicati in un campo: impostare la proprietà Indicizzato su Sì (Duplicati non ammessi) oppure creare un indice univoco tramite una query di definizione dati.

Procedura in Visualizzazione Struttura

  1. Apri la tabella in Visualizzazione Struttura.
  2. Seleziona il campo che deve essere univoco, per esempio CodiceProdotto.
  3. Nella sezione Proprietà campo individua Indicizzato.
  4. Seleziona Sì (Duplicati non ammessi).
  5. Salva la tabella.

Da quel momento Access rifiuta un nuovo valore se è già presente nello stesso campo. Prima di attivare l’indice su una tabella popolata, devi eliminare o correggere i duplicati esistenti.

Metodo 3: creare un indice univoco composto

Se l’unicità dipende da più campi, devi creare un indice composto. Esempio: nella tabella DettagliOrdine puoi voler impedire la ripetizione della stessa coppia IDOrdine + IDProdotto. In Visualizzazione Struttura apri la finestra Indici, assegna un nome all’indice sulla prima riga, indica il primo campo e aggiungi gli altri campi nelle righe successive lasciando vuoto il nome dell’indice. Imposta la proprietà Univoco su Sì.

Questo approccio è spesso preferibile a una chiave primaria composta quando vuoi mantenere un ID Autonumerazione come identificatore principale, ma devi comunque imporre una regola di unicità sulla combinazione.

Come trovare duplicati già presenti

Access dispone di una procedura guidata Trova duplicati e puoi anche costruire query di raggruppamento. Per verificare email duplicate, il principio SQL è SELECT Email, Count(*) AS Occorrenze FROM Clienti GROUP BY Email HAVING Count(*) > 1;. Per controllare una combinazione puoi raggruppare per più campi.

Il risultato non decide automaticamente quale record eliminare. Devi analizzare i dati correlati: uno dei duplicati potrebbe avere ordini, note o allegati associati. Prima di cancellare, valuta se unire informazioni e ricollegare eventuali record figli.

Come gestire duplicati con valori Null

Un campo univoco con valori Null richiede attenzione perché il comportamento può differire dalla semplice idea “nessun duplicato”. Se il campo è obbligatorio, imposta anche la proprietà Richiesto o una regola adeguata. Non usare un indice univoco come sostituto di tutte le regole di validazione.

Per esempio, se Email deve essere obbligatoria e univoca, configura sia l’obbligatorietà sia l’indice. Se invece Email è facoltativa, valuta come vuoi trattare i record senza email e testa la struttura con dati reali.

Duplicati dovuti a spazi e maiuscole

Molti duplicati nascono da dati sporchi: spazi iniziali o finali, formati diversi, trattini, prefissi telefonici o abbreviazioni. Prima di applicare una regola di unicità, normalizza i dati. Per codici e email puoi usare funzioni come Trim in query di aggiornamento, sempre dopo aver creato un backup.

Se confronti numeri di telefono, decidi un formato standard. “06 1234567”, “061234567” e “+39 06 1234567” potrebbero rappresentare lo stesso numero. L’indice univoco vede valori diversi se le stringhe sono diverse, quindi la qualità dei dati resta fondamentale.

Controllare duplicati nelle maschere

Un indice univoco protegge il database a livello strutturale, ma puoi migliorare l’esperienza utente controllando i duplicati prima del salvataggio. Una maschera può usare DCount o DLookup per verificare se un codice esiste già e mostrare un messaggio più chiaro.

Esempio concettuale: prima di salvare un nuovo prodotto, controlla quanti record hanno lo stesso CodiceProdotto. Se il conteggio è maggiore di zero, annulla il salvataggio e invita l’utente ad aprire il prodotto esistente. Non affidarti però soltanto al controllo in maschera: due utenti potrebbero superare il controllo quasi nello stesso momento. L’indice univoco resta la protezione definitiva.

Duplicati nelle importazioni da Excel

Le importazioni sono una fonte frequente di duplicati. Evita di importare direttamente nella tabella principale quando i file non sono perfettamente controllati. Una strategia robusta consiste nell’importare prima in una tabella temporanea, pulire e normalizzare i dati, trovare duplicati e poi accodare soltanto i record validi.

Se la tabella di destinazione contiene un indice univoco, Access può rifiutare le righe che violano il vincolo. È meglio però identificare gli errori prima dell’accodamento, così puoi produrre un report delle righe scartate e correggere il file sorgente.

Duplicati nelle tabelle collegate

Se Access usa tabelle collegate a SQL Server o altre fonti ODBC, le regole di unicità dovrebbero essere definite principalmente nel database server. Access può utilizzare indici e chiavi rilevati dalla fonte, ma la protezione più affidabile è mantenere i vincoli nel sistema che possiede realmente i dati.

SQL per creare un indice univoco

Microsoft documenta l’istruzione CREATE INDEX. Un esempio è CREATE UNIQUE INDEX UX_Clienti_Email ON Clienti (Email);. Per un indice composto puoi indicare più campi: CREATE UNIQUE INDEX UX_OrdineProdotto ON DettagliOrdine (IDOrdine, IDProdotto);.

Le query di definizione dati modificano la struttura. Esegui sempre un backup, verifica i duplicati prima dell’esecuzione e testa la query su una copia del database.

Quando usare una query DISTINCT

La proprietà Valori univoci o la parola SQL DISTINCT può nascondere righe duplicate nei risultati di una query, ma non elimina né impedisce i duplicati nella tabella. È utile per report e liste, non come meccanismo di integrità.

Se una query mostra una sola volta ogni città, DISTINCT è appropriato. Se invece vuoi impedire due prodotti con lo stesso codice, devi usare un indice univoco o una chiave, non DISTINCT.

Come correggere duplicati già collegati ad altri dati

Supponiamo di avere due record Cliente che rappresentano la stessa persona e che entrambi abbiano ordini associati. Non eliminare semplicemente uno dei due. Scegli il record da mantenere, aggiorna gli ordini del record duplicato affinché puntino all’ID corretto, unisci eventuali informazioni mancanti e solo dopo elimina il record ridondante.

Questa operazione va eseguita con attenzione e preferibilmente su una copia di test. Se esistono molte tabelle collegate, documenta tutti i riferimenti prima di modificare le chiavi esterne.

Impedire duplicati in un database multiutente

In ambiente multiutente la protezione strutturale è ancora più importante. Due persone potrebbero inserire lo stesso codice quasi contemporaneamente. Un controllo fatto soltanto in maschera può non essere sufficiente. L’indice univoco garantisce che una delle due operazioni venga rifiutata se la prima ha già salvato il valore.

Gestisci quindi l’errore nella maschera con un messaggio comprensibile, ma mantieni il vincolo nel database.

Prestazioni degli indici univoci

Gli indici possono accelerare ricerche e ordinamenti, ma ogni indice deve essere aggiornato quando inserisci o modifichi record. Crea indici univoci dove rappresentano vere regole di business. Non trasformare ogni campo in un indice “per sicurezza”.

Checklist per prevenire duplicati

  • Definisci cosa significa “duplicato” per ogni tabella.
  • Usa sempre una chiave primaria.
  • Applica indici univoci ai codici che non possono ripetersi.
  • Usa indici composti quando l’unicità dipende da più campi.
  • Normalizza dati testuali prima di confrontarli.
  • Controlla importazioni in tabelle temporanee.
  • Aggiungi controlli amichevoli nelle maschere.
  • Mantieni il vincolo strutturale anche se esiste il controllo applicativo.
  • Fai backup prima di deduplicare dati esistenti.

Problemi comuni e troubleshooting

Non riesco ad attivare Duplicati non ammessi

Esistono già valori ripetuti. Trovali con una query, correggili e riprova.

Access rifiuta un nuovo record ma non vedo il duplicato

Controlla l’indice coinvolto, eventuali campi composti e valori formattati. Il messaggio può riferirsi a un indice diverso da quello che stai osservando.

La query DISTINCT mostra dati corretti ma la tabella ha ancora duplicati

È normale: DISTINCT modifica solo il risultato della query. Correggi la tabella e applica un vincolo.

L’importazione salta alcune righe

Potrebbero violare un indice univoco o avere tipi dati incompatibili. Importa prima in una tabella staging e controlla gli errori.

Due record hanno la stessa email ma devono essere distinti

Allora Email non è una chiave aziendale adatta. Rimuovi il vincolo o definisci una regola più corretta, ad esempio ClienteAzienda + Email se ha senso nel processo.

Microsoft 365, Access 2024 e Runtime

Chiavi primarie, indici univoci, query e regole di convalida sono disponibili nelle versioni desktop moderne come Access per Microsoft 365 e Access 2024. Access Runtime serve soprattutto a eseguire applicazioni e non è l’ambiente ideale per progettare tabelle e indici. Definisci la struttura nella versione completa e distribuisci poi l’applicazione agli utenti.

FAQ

La chiave primaria impedisce tutti i duplicati?

No. Impedisce duplicati sulla chiave primaria. Per i duplicati aziendali servono indici e regole sugli altri campi.

Posso rendere un campo email univoco?

Sì, impostando Indicizzato su Sì (Duplicati non ammessi), se il processo richiede davvero un’email unica.

Posso impedire duplicati su due campi insieme?

Sì, con un indice univoco composto o una chiave primaria composta.

DISTINCT elimina duplicati?

No, li nasconde nel risultato della query. I dati originali restano invariati.

È meglio controllare i duplicati in maschera o nella tabella?

Entrambi: la maschera migliora l’esperienza, l’indice garantisce l’integrità.

Come gestisco duplicati durante l’importazione?

Usa una tabella temporanea, pulisci i dati, trova duplicati e accoda solo i record validi.

Gli indici rallentano Access?

Possono aumentare il lavoro durante le scritture, ma migliorano molte letture. Usa gli indici necessari, non indiscriminatamente.

Posso rimuovere un indice univoco?

Sì, ma prima valuta perché era stato creato. Rimuoverlo può consentire nuovi duplicati.

Conclusione

Per evitare record duplicati in una tabella Access non basta cercare a occhio o usare una query DISTINCT. Devi trasformare la regola di unicità in una proprietà reale del database. Usa chiavi primarie per identificare i record, indici univoci per i campi aziendali e indici composti per le combinazioni che non possono ripetersi. Completa la protezione con maschere, controlli sulle importazioni e procedure di pulizia. In questo modo il database resta coerente anche quando aumenta il numero di record o di utenti.

Fonti ufficiali: Microsoft Support: impedire valori duplicati con un indice, Microsoft Support: creare e usare indici e Microsoft Support: proprietà Valori univoci.

Lascia un commento