Domanda

Perché dichiarazione creazione dell'indice ha argomento UNICO?

Per quanto ho capito, l'indice non cluster contiene un segnalibro, un puntatore a una riga, che dovrebbe essere unico per distinguere le righe anche non univoci,
in modo da assicurare indice non cluster per essere unico?
Corretto?

Quindi, non ho capito che nessuno unico indice può essere solo sul tavolo cluster? dal

  • "un indice cluster in una vista deve essere unico" [1]

Da "Il fondo, o foglia, livello dell'indice cluster contiene le righe di dati effettivi della tabella" [1], faccio capito bene che lo stesso effetto UNIUE su indice cluster può essere ottenuto vincolo univoco ( possibilmente tutto o in parte) colonne di una tabella [2]

Allora, che cosa portare argomento UNICO per l'indice?
tranne confusione alla definizioni di base concetti [3]


Aggiornamento:
Questa è ancora una volta la stessa trappola -. Spiegare qualcosa già spiegato molte volte in base a termini non definiti conversione di tutti i spiegazione senza fine guessing game
Si prega di vedere il mio subquestion [4], che è in realtà ri-formulazione di questa stessa domanda qui.


Update2:
Il problema è in ambigue, mancano definizioni o uso improprio di termini in contesti impropri. Se l'indice è definito come struttura destinata a (trovare e) individuare / punto a dati reali, quindi gli indici non univoci o NULL non fanno alcun senso. Bye


citati:
[1]
CREATE INDEX (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188783. aspx

[2] | CREATE TABLE (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms174979. aspx

[3]
indice univoco o chiave univoca?
indice univoco o chiave univoca?

[4]
ciò che è indice e può indice non cluster essere non unico?
ciò che è indice e può indice non cluster essere non univoco?

È stato utile?

Soluzione

La clausola indice UNIQUE è in realtà solo un capriccio della sintassi SQL Server e di alcuni altri DBMS. In standard SQL, vincoli di unicità sono implementati mediante l'utilizzo della chiave primaria e la sintassi vincolo UNIQUE, non attraverso gli indici (non vi sono indici in SQL standard).

Il meccanismo SQL Server utilizza internamente per implementare vincoli unicità è chiamato un indice univoco. Un indice univoco viene creato automaticamente per voi ogni volta che si crea un vincolo PRIMARY KEY o UNIQUE. Per motivi più noti al team di sviluppo di SQL Server hanno deciso di esporre la parola chiave UNIQUE come parte della sintassi di CREATE INDEX, anche se la sintassi vincolo fa lo stesso lavoro.

A fini di chiarezza e di supporto agli standard vi consiglio di evitare la creazione di indici univoci in modo esplicito, ove possibile. Utilizzare la chiave primaria o Unqiue vincolo di sintassi, invece.

Altri suggerimenti

Mentre un indice non univoco è sufficiente per distinguere tra le righe (come hai detto), l'indice UNIQUE serve come un vincolo: eviterà i duplicati di essere inseriti nella banca dati - in cui "duplicati" sono le righe che contengono gli stessi dati nelle colonne indicizzate.

Esempio:

 Firstname  | Lastname  | Login
================================
 Joe        | Smith     | joes
 Joe        | Taylor    | joet
 Susan      | Smith     | susans

Si supponga che i nomi di login di Let sono di default generato dal nome di battesimo + prima lettera del cognome.

Che cosa succede quando cerchiamo di aggiungere Joe Sciavillo al database? Normalmente, il sistema sarebbe felicemente generare loginname joes e inserto (Joe,Sciavillo,joes). Ora avremmo due utenti con lo stesso nome utente -. Probabilmente una cosa negativa

Ora diciamo che abbiamo un indice di UNIQUE sulla colonna Login - il database sarà verificare che nessun altra fila con gli stessi dati esiste già, prima che permette di inserire la nuova riga. In altre parole, il tentativo di inserire un'altra joes verrà rifiutato, quando i dati non sarebbe unico in quella riga più.

Naturalmente, si potrebbe avere indici univoci su più colonne, nel qual caso il combinazione dei dati avrebbe dovuto essere unico (ad esempio, un indice univoco Firstname,Lastname sarà lieto di accettare una riga con (Joe,Badzhanov), come la combinazione non è nella tabella ancora, ma sarebbe rifiutare una seconda fila con (Joe,Smith))

I clausola UNIQUE specifica che i valori nella colonna (s) deve essere univoco tavolo, essenzialmente aggiungendo un vincolo univoco. Un indice cluster in una tabella specifica che l'ordine delle righe della tabella sarà la stessa come indice. Un indice non cluster non cambia l'ordine fisico, che è il motivo per cui è bene avere non cluster, ma più un solo indice cluster. Si possono avere gli indici cluster e non cluster univoci o non univoci su un tavolo.

Credo che la questione di fondo è: qual è la differenza tra gli indici unici e non univoci

?

La risposta è che le voci indici univoci possono ciascuno unico punto ad una singola riga, mentre voci indici non univoci possono indicare più righe.

Per esempio, si consideri una tabella di voce di ordine:

ORDER_NO     INTEGER
LINE_NO      INTEGER
PRODUCT_NO   INTEGER
QUANTITY     DECIMAL

-. Con un indice univoco order_no e Line_no, e un indice non univoco in PRODUCT_NO

Per una singola combinazione di order_no e line_no ci può essere solo una voce nella tabella, mentre per un singolo valore di PRODUCT_NO ci possono essere molte voci nella tabella (perché ci saranno più movimenti per quel valore nell'indice) .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top