Clustered index – více sloupců

Pro vazební tabulky, které tvoří vazbu M:N je vhodný clusterovaný index nad více sloupci. Tedy sloupci, které tvoří cizí klíče. Tento vzor je podobný vzoru pro cizí klíč.

Mějme tabulku zamestnanec, která má clusterovaný index podle vzoru identity sloupec.

CREATE TABLE zamestnanec(
	id_zamestnanec INT IDENTITY(1,1),
	jmeno NVARCHAR(100),
	prijmeni NVARCHAR(100),
	CONSTRAINT pk_zamestnanec PRIMARY KEY CLUSTERED( id_zamestnanec )
)
GO

Dále mějme tabulku pracovni_role, která má také clusterovaný index podle vzoru identity sloupec.

CREATE TABLE pracovni_role(
	id_pracovni_role INT IDENTITY(1,1),
	nazev_role NVARCHAR(100),
	CONSTRAINT pk_pracovni_role PRIMARY KEY CLUSTERED( id_pracovni_role )
)
GO

Vztah mezi zaměstnancem a jeho rolí pak bude reprezentován tabulkou zamestnanec_pracovni_role, která bude podle vzoru více sloupců.

CREATE TABLE zamestnanec_pracovni_role(
	id_zamestnanec_pracovni_role INT IDENTITY(1,1),
	id_zamestnanec INT,
	id_pracovni_role INT,
	CONSTRAINT pk_zamestnanec_pracovni_role PRIMARY KEY NONCLUSTERED 
	(
		id_zamestnanec_pracovni_role
	),
	CONSTRAINT clus_zamestnanec_pracovni_role UNIQUE CLUSTERED(
		id_zamestnanec,
		id_pracovni_role
	)
)
GO

ALTER TABLE zamestnanec_pracovni_role
ADD CONSTRAINT fk_zamestnanec_pracovni_role_id_zamestnanec 
	FOREIGN KEY(id_zamestnanec)
	REFERENCES zamestnanec(id_zamestnanec)
GO

ALTER TABLE zamestnanec_pracovni_role	
ADD CONSTRAINT fk_zamestnanec_pracovni_role_id_pracovni_role 
	FOREIGN KEY(id_pracovni_role)
	REFERENCES pracovni_role(id_pracovni_role)
GO

CREATE INDEX i_fk_zamestnanec_pracovni_role_id_pracovni_role 
	ON zamestnanec_pracovni_role(id_pracovni_role)
GO