Ответ
Нет, не может. Согласно стандарту SQL и реляционной модели, все столбцы, входящие в первичный ключ (PK), должны быть NOT NULL.
Причина: Первичный ключ — это минимальный набор атрибутов, однозначно идентифицирующий каждую строку в таблице. Значение NULL означает «неизвестно» или «отсутствует», что нарушает принцип уникальной идентификации. Две строки с NULL в ключевом столбце нельзя было бы различить.
Пример ошибки в SQL:
CREATE TABLE Orders (
order_id INT,
line_item INT NULL, -- ОШИБКА: этот столбец не может быть NULL, если он часть PK
product_name VARCHAR(100),
PRIMARY KEY (order_id, line_item) -- Требует, чтобы order_id и line_item были NOT NULL
);
Правильное определение:
CREATE TABLE Orders (
order_id INT NOT NULL,
line_item INT NOT NULL, -- Явное указание NOT NULL обязательно
product_name VARCHAR(100),
PRIMARY KEY (order_id, line_item)
);
Альтернатива: Если нужна гибкость, можно использовать уникальный индекс (UNIQUE constraint), который в некоторых СУБД допускает NULL в составе, но это не является полноценной заменой первичного ключа.