Sitter och försöker förstå vad det är för skillnad på ett fält skapat som PRIMARY KEY och ett fält där jag skapat ett UNIQUE CLUSTERED INDEX. Finns det någon skillnad egentligen? Jag använder MS SQL-Server 2000. En Primary Key upprätthålls i SQL Server genom att ett unikt index skapas på kolumnen(/erna). Det behöver inte vara ett clustered index, även om default är att det blir clustered. Det kan vara viktigt att tänka på när du skapar primärnyckeln, eftersom man (självklart) inte kan ha mer än ett clustered index och det är inte nödvändigtvis så att det ska läggas på primärnyckelkolumnen. Ok, så indexen fungerar lika i mitt fall. Men vad jag inte riktigt greppar är detta med primärnyckeln... Varför ska man använda en primärnyckel, vad är den bra till? En skillnad är att en primärnyckel tillåter aldrig NULL. Ett Unique indexkan tillåta ett NULL-värde, om man vill. Ah, oki.Primary Key vs Unique Clustered Index (MSSQL2000)?
Jag har skapat två test tabeller enligt nedan. Den första har jag skapat tre fält där jag i efterhand skapar ett klustrat index. I den andra har jag tre fält och sätter ett av dem som primärnyckel.
CREATE TABLE SiteA (
GUID uniqueidentifier NOT NULL DEFAULT (newid()),
LastEdit timestamp NOT NULL,
[Name] varchar(50) NOT NULL
)
GO
CREATE UNIQUE CLUSTERED INDEX GUID_indx
ON SiteA(GUID)
GO
CREATE TABLE SiteB (
GUID uniqueidentifier PRIMARY KEY NOT NULL DEFAULT (newid()),
LastEdit timestamp NOT NULL,
[Name] varchar(50) NOT NULL
)
GO
Efter att jag skapat dessa kör jag sp_helpindex för att se vilka egenskaper de båda index har:
EXEC sp_helpindex SiteA
EXEC sp_helpindex SiteB
Index_name | index_description | index_keys
GUID_indx | clustered, unique located on PRIMARY | GUID
Index_name | index_description | index_keys
PK__SiteB__1ED998B2 | clustered, unique, primary key located on PRIMARY | GUID
Den enda skillnaden jag ser är just texten ’primary key’ på beskrivningen... Fungerar dessa fält på exakt samma vis?Sv: Primary Key vs Unique Clustered Index (MSSQL20
Alltså, 'indexmässigt' är det ingen skillnad på dina index.Sv: Primary Key vs Unique Clustered Index (MSSQL20
Sv: Primary Key vs Unique Clustered Index (MSSQL20
Annars är ju primärnyckeln framförallt viktig i databasdesignen. Man måste ju ha den för att definiera normaliseringsformer, t ex 3NF: Alla kolumner som inte är nycklar ska vara beroende av hela primärnyckeln och inte av någon annan kolumn.Sv: Primary Key vs Unique Clustered Index (MSSQL20
Tack för dina svar!
Mvh,
Håkan Wennerberg