Встречается на собеседованиях • сегодня

Будет ли работать Foreign Key одной таблицы относящийся к Unique Key другой таблицы, если Unique Key состоит из 2 колонок и одна из них имеет значение NULL

Да, будет работать, но с ограничениями. В MySQL, если хотя бы один столбец в составном Unique Key содержит NULL, то ограничение уникальности не применяется для этой строки. Это означает, что может существовать несколько строк с одинаковыми значениями в не-NULL столбцах, что может нарушить целостность Foreign Key.

Пример:

sql
CREATE TABLE parent (
    id INT,
    code VARCHAR(10),
    UNIQUE KEY (id, code)  -- Составной уникальный ключ
);

CREATE TABLE child (
    child_id INT PRIMARY KEY,
    parent_id INT,
    parent_code VARCHAR(10),
    FOREIGN KEY (parent_id, parent_code) 
        REFERENCES parent(id, code)  -- Внешний ключ
);

-- Вставка в parent с NULL в code допустима
INSERT INTO parent VALUES (1, NULL);
INSERT INTO parent VALUES (1, NULL);  -- Повторная вставка возможна

-- Вставка в child с NULL в parent_code будет работать
INSERT INTO child VALUES (1, 1, NULL);

В PostgreSQL и других СУБД поведение может отличаться - там составные уникальные ключи с NULL могут работать иначе.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы