Вставьте уникальные и неуникальные значения MySQL в один столбец

У меня есть таблица board_positions, которая содержит позиции (например, president, vice-president, member, etc.). Я ссылаюсь на ID этих позиций на другую таблицу board_members.

Я борюсь с тем, как заставить эту таблицу board_members принимать только один president и много members?

Я пытался сделать это с ограничением unique, но это ограничение заставляет board_members принимать уникальную позицию для каждого члена.

🤔 А знаете ли вы, что...
MySQL может работать с несколькими одновременными соединениями к базе данных.


32
1

Ответ:

Решено

Решение состоит в том, чтобы написать триггер, который будет проверять количество должностей президента.

Например:

DELIMITER $$
CREATE TRIGGER before_board_members_insert
BEFORE INSERT ON board_members
FOR EACH ROW
BEGIN
    DECLARE president_id INT;
    DECLARE presidents_count INT;

    SET president_id = 1; -- change here to reflect the actual value

    IF (NEW.position_id = president_id) THEN
        SELECT COUNT(*) INTO presidents_count
        FROM board_members
        WHERE position_id = president_id;

        IF (presidents_count >= 1) THEN
            SIGNAL SQLSTATE '45000'
                SET MESSAGE_TEXT = 'Maximum number of presidents reached.';
        END IF;
    END IF;
END$$
DELIMITER ;

Триггер UPDATE будет выглядеть аналогично.