У меня есть таблица board_positions
, которая содержит позиции (например, president, vice-president, member, etc.
). Я ссылаюсь на ID этих позиций на другую таблицу board_members
.
Я борюсь с тем, как заставить эту таблицу board_members
принимать только один president
и много members
?
Я пытался сделать это с ограничением unique
, но это ограничение заставляет board_members
принимать уникальную позицию для каждого члена.
🤔 А знаете ли вы, что...
MySQL может работать с несколькими одновременными соединениями к базе данных.
Решение состоит в том, чтобы написать триггер, который будет проверять количество должностей президента.
Например:
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 будет выглядеть аналогично.