Primary key и clustered index часто путают, потому что базы данных часто связывают их вместе — но они служат принципиально разным целям.
Primary key — это логическое ограничение, которое налагает два правила на столбец или набор столбцов:
Его цель — уникально идентифицировать каждую строку в таблице. Это бизнес-правило о целостности данных, а не о хранении.
Clustered index — это физическая структура данных, которая контролирует, как строки сортируются и хранятся на диске. Таблица может иметь только один clustered index, потому что сами строки данных могут быть физически упорядочены только одним способом.
| Primary Key | Clustered Index | |
|---|---|---|
| Type | Логическое ограничение | Физическая структура |
| Purpose | Обеспечить уникальность | Определить порядок хранения |
| Nullable | Никогда | Допускается |
| Limit per table | Один | Один |
Большинство реляционных баз данных (например, SQL Server, MySQL InnoDB) автоматически создают clustered index на столбце primary key по умолчанию. Однако это независимые концепции:
-- Primary key с non-clustered index
ALTER TABLE Orders
ADD CONSTRAINT PK_Orders PRIMARY KEY NONCLUSTERED (OrderID);
-- Clustered index на другом столбце
CREATE CLUSTERED INDEX IX_Orders_Date ON Orders(OrderDate);
Это показывает, что эти две концепции, хотя часто используются вместе, не являются одним и тем же.
Первичный ключ — это физическая структура данных, которая определяет физический порядок строк на диске, в то время как кластеризованный индекс — это логическое ограничение, которое обеспечивает уникальность.
Новый — ещё не проверен сообществом
Вы