No necessariamente. Infatti l’indice clustered e la chiave primaria di una tabella sono due cose nettamente distinte fra loro: – la chiave primaria è un vincolo che assicura l’univocità di ogni riga della tabella – un indice clustered è un struttura B+Tree che determina un ordinamento specifico dei dati della tabella nelle pagine di dati. Di fatto, però, SQL Server implementa il vincolo di chiave primaria attraverso un ‘unique index’ di tipo ‘clustered’, a meno che venga prima creata la tabella priva di chiave primaria, quindi aggiunto l’indice clusterd, infine aggiunto il vincolo di chiave primaria che sarà quindi implementata attraverso un ‘unique index’ di tipo ‘non-clustered’
GO
–creaiamo prima la tabella senza chiave primaria
CREATE TABLE t1 (
col1 INT NOT NULL,
col2 NVARCHAR(30) NULL,
)
GO
–quindi l’indice clustered
CREATE CLUSTERED INDEX IX_clustered ON t1 (col2)
GO
–infine aggiungiamo il vincolo di chiave primaria
ALTER TABLE t1
ADD CONSTRAINT PK_t1 PRIMARY KEY (col1)
GO