如何在 MySQL 中嵌入外键计算?

问题描述

我在 MariaDB 中创建了两个表,其中一个一个用于计算外键的列。脚本的简化版本遵循以下格式:

CREATE TABLE a {
pk     INT     PRIMARY KEY,value  INT
}
CREATE TABLE b {
pk     INT     PRIMARY KEY,value  INT,calc   INT,CONSTRAINT fk
  FOREIGN KEY (value)
  REFERENCES a (value)
}

事实证明'calc'总是等于'value'+1。查询 'b' 时,从不引用 b.value,但经常引用 b.calc。 我应该删除“calc”以保持第三范式,还是有办法删除 b.calc 对 b.value 的依赖?类似的东西:

CREATE TABLE b {
pk     INT     PRIMARY KEY,CONSTRAINT fk
  FOREIGN KEY (calc)
  REFERENCES a (value+1)
}

感谢您的帮助。

解决方法

外键必须具有引用列的实际值。

您可以使用虚拟(AKA 生成)列来创建计算列。

CREATE TABLE b (
    pk INT PRIMARY KEY,value INT,calc GENERATED ALWAYS AS value + 1,FOREIGN KEY (value) REFERENCES a (value)
);