实施状态更改限制的最佳方式是什么

What's the best way to implement status change restrictions

我在节点中有一个后端应用程序和一个 mysql 数据库。

假设我有这两个表:

实体

id name fk_status
1 Hello 1
2 World 2
3 Bread 3

状态

id description
1 A
2 B
3 C

我想实施一个限制,不允许状态从 A 更改为 C。

状态A只能变成B,B只能变成C,C可以同时变成A和B

我应该直接在我的应用程序后端实现这个限制(我猜是使用一些 if 语句) 还是我应该以某种“mysql 方式”实现它? (顺便说一句,我不知道该怎么做)

由于您需要在代码中处理示例中显示的警告,因此实施限制将需要大量工作。

但是 mysql 方式总是会保证这样的更新会发生,独立于前端

CREATE TABLE Entity
    (`id` int, `name` varchar(20), `fk_status` int)
;
INSERT INTO Entity
    (`id`, `name`, `fk_status`)
VALUES
    (1, 'Hello', 1),
    (2, 'World', 2),
    (3, 'Bread', 3)
;
CREATE TRIGGER teststatus BEFORE UPDATE ON Entity
FOR EACH row
BEGIN
IF OLD.fk_status = 1 AND NEw.fk_status <> 2 THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'NOt AlLOWED';
ELSEIF OLD.fk_status = 2 AND NEw.fk_status <> 3 THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'NOt AlLOWED';

END IF;

ENd
UPDATE Entity SET `name` = CONCAT( `name`,1) WHERE `id` = 3
UPDATE Entity SET `name` = CONCAT( `name`,1),fk_status = 3 WHERE `id` = 1
NOt AlLOWED
UPDATE Entity SET `name` = CONCAT( `name`,1),fk_status = 1 WHERE `id` = 2
NOt AlLOWED
SELECT * FROM Entity
id | name   | fk_status
-: | :----- | --------:
 1 | Hello  |         1
 2 | World  |         2
 3 | Bread1 |         3

db<>fiddle here