>Domanda da nabbo, su un db sql express ho la necessita di avere
>un campo che non ammetta duplicati, premetto che le relazioni
>esistenti sono state effettuate con chiave primaria e identita'.
>Non esiste come in access un duplicati non ammessi?
Ciao,
SQL Server come Access e praticamente tutti i database relazionali in circolazione, permette di definire i constraint UNIQUE che servono proprio per garantire l'univocità di una colonna o insieme di colonne per tutte le righe di una tabella che non facciano parte della PRIMARY KEY.
Vediamo un piccolo esempio. Data la tabella Students voglio fare in modo che non sia possibile inserire due studenti con il medesimo nome e cognome:
USE tempdb;
CREATE TABLE dbo.Students(
StudentID int NOT NULL,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL,
CONSTRAINT PK_Students PRIMARY KEY(StudentID),
CONSTRAINT UN_Name UNIQUE(FirstName, LastName)
);
/* Questi inserimenti andranno a buon fine */
INSERT dbo.Students VALUES(1, 'Lorenzo', 'Benaglia');
INSERT dbo.Students VALUES(2, 'Luca', 'Bianchi');
INSERT dbo.Students VALUES(3, 'Andrea', 'Montanari');
INSERT dbo.Students VALUES(4, 'Marcello', 'Poletti');
/* Questo no */
INSERT dbo.Students VALUES(5, 'Lorenzo', 'Benaglia');
/* Output:
Msg 2627, Level 14, State 1, Line 2
Violation of UNIQUE KEY constraint 'UN_Name'.
Cannot insert duplicate key in object 'dbo.Students'.
The statement has been terminated.
*/
DROP TABLE dbo.Students;
In pratica SQL Server definisce un indice UNIQUE sulle colonne FirstName e LastName che assume lo stesso nome del constraint, ma occhio a non confondere le due cose:
- Un indice è una struttura dati il cui unico scopo è quello di velocizare gli accessi in lettura/scrittura;
- Un constraint è un vincolo che limita i possibili valori di una colonna, di una tabella o di due tabelle.
In futuro un constraint UNIQUE potrà essere implementato diversamente, quindi non fare affidamento sul fatto che indice unique e constraint unique siano "la stessa cosa"
>Grazie in advance
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org