2010-04-12 4 views
5

Perché sono necessari vincoli UNICI nel database?Vincoli UNICI in SQL (SQL Server)

Potete fornire qualche esempio?

chiave primaria è UNICO di default ... Comprensibile come vengono chiamati in altre tabelle come chiavi esterne ... relazione è necessaria per collegarli per la piattaforma RDBMS ...

ma perché si rimanda ad altri colonne come UNIQUE, qual è il vantaggio di farlo?)

+2

Una chiave primaria è SEMPRE unica, per definizione. –

risposta

2

il nome utente è univoco, ma non PK. UserId è PK.

+0

quindi c'è un PK numerico e un campo 'testo' che ha una relazione 1: 1. Supponi che questo sarebbe un indicatore per un vincolo univoco sul "testo"? – lexu

+0

sì. il nome utente non è piacevole per PK, ma deve essere univoco – Andrey

3

I vincoli devono essere utilizzati il ​​più possibile per garantire che il database sia conforme alle aspettative. In questo caso particolare, i vincoli unici sono i più utili per garantire la qualità dei dati.

Un unico vincolo POTREBBE essere utile su una colonna di indirizzo e-mail, ad esempio, che richiederebbe che non ci siano due righe con lo stesso indirizzo e-mail - mentre non sarebbe un PK, e in genere sarebbe permesso di cambiare.

Ogni volta che si ha un'aspettativa di univocità e il valore non è già limitato da un PK o simile, l'aggiunta di un vincolo univoco può garantire che le ipotesi siano sempre preservate.

In generale, i vincoli possono anche be used by the optimizer.

Il secondo articolo della serie di Celko sui vincoli riguarda specificamente lo unique constraints.

0

emailID può essere univoco.

differenza tra uniqueID e chiave primaria è supporto unico un'unica nulla in tutta la colonna ma PK abituato.

+2

Una chiave primaria è un concetto di database logico implementato in SQL Server con un indice, ma NON è necessario che sia cluster. –

+0

Non è necessario che un PK sia in cluster, è solo cluster se non si specifica nulla, poiché per impostazione predefinita verrà raggruppato in cluster – SQLMenace

3

Quando qualcosa è una chiave primaria, non mi aspetto che cambi: dovrebbe essere statica, poiché viene utilizzata per il collegamento ad altre tabelle nel database. Se la tua "chiave primaria" cambierà (ad esempio, un nome utente), allora dovrebbe essere un campo aggiuntivo nella tua tabella e la chiave primaria dovrebbe invece essere una sorta di ID incrementale.

Tuttavia, non è ancora possibile avere due utenti con lo stesso nome utente: in tal caso, è garantito un vincolo univoco.

1

La maggior parte delle volte, mentre progettiamo il database, manteniamo le nostre chiavi primarie come campo di identità. Anche se ha senso farlo diventare un campo identitario, potrebbe non risolvere il problema del raggiungimento dell'unicità. Per assicurarsi che la riga sia univoca, poniamo un vincolo univoco sulla colonna (dato che Andrey ha specificato un UserNane). Questo è quello che dicono MSDN:

È possibile utilizzare vincoli UNIQUE per assicurarsi che nessun valori duplicati vengono inseriti in colonne specifiche che non partecipano a una chiave primaria. Sebbene sia un vincolo UNIQUE sia un vincolo PRIMARY KEY impongono univocità, utilizzare un vincolo UNIQUE anziché un vincolo PRIMARY KEY quando si desidera applicare l'univocità di una colonna o una combinazione di colonne, che non è la chiave primaria.

HTH

2

ci sono un paio di differenze tra un PK e UQ. Un PK non può avere valori NULL in cui un UQ può avere 1 valore null (Oracle consente più valori NULL). Si può avere solo 1 PK per tavolo, ma si può avere UQ multipla per ogni tabella Un PK di default è di tipo cluster (ma non ha bisogno di essere)

1

Se i dati è necessario per essere unico, allora avete bisogno di un vincolo unico. Altrimenti otterrete dati poveri. Un PK deve essere unico, ma ciò non significa che non sia necessario che anche altri dati siano unici. Forse ogni record deve avere un datetime unico, questo è improbabile che sia il PK, ma l'unicità deve essere forzata in qualche modo.

In particolare se si utilizza una chiave surrogata per il PK (che consiglio vivamente), allora si vuole assicurarsi che i campi chiave naturali facciano parte di un unico contrappeso per evitare la duplicazione dei dati.

Stessa cosa per i dati del tipo di ricerca. Supponiamo che tu abbia un elenco di specialità professionali per i medici che i tuoi utenti possono scegliere quando inseriscono i dati e supponiamo che siano autorizzati ad aggiungere a questo elenco se necessario. Un vincolo unico impedirà all'Onologologist di essere inserito più volte, il che renderà più facile quando si vuole effettivamente trovare il numero di persone che sono oncologi.