MySQL创建一个由四部分组成的主键(由连接的条目组成)

树木森林

我希望将4列合并为一列,以便作为外键约束,可以更轻松地将唯一的串联值分布在整个数据库中。4列信息是重要的标识信息,我希望在与之连接的所有子表中都可以轻松访问这些信息。

我之所以需要将数据分成4个块,是因为每个部分都通过enum()值或整数长度进行了验证。没有一个是独一无二的,但是结合起来,它们是..

理想情况下,我仍然可以单独访问此数据(例如,按B排序)

我看到的选项是这样的:

  1. 从A,B,C,D创建复合主键,然后在引用该表的每个表中将A,B,C,D包含为列(在大多数子表中,<-似乎是这样,但感觉很笨拙数据将仅用作ABCD。)
  2. 创建一系列使用A,B,C,D的触发器,并将它们串联到新列ABCD中,并将THAT列作为PK(并确保在其中一个组成部分发生更改时保持更新-他们不应该这样做) t,但是...)然后我可以在每个子表中引用ABCD。
  3. 利用BEFORE UPDATE触发器在将数据放入ABCD PK列之前先对其进行验证,然后再将其放入A,B,C,D列中(这可能是2的派生,或相同的结果)

复杂的因素是,理想情况下,UI需要分别请求A,B,C和D,但我不能保证UI程序将能够为我验证数据。

编辑:目标是使数据库对于下一个管理员尽可能简单和易于理解。因此,棘手的触发器不如本地解决方案理想。

我不认为您可以定义一个与其他列连在一起的列?

树木森林

生成专栏进行救援!

在MySQL版本5.7.6中添加了,生成的列可以接受许多参数来计算其内容,包括CONCAT。

CREATE TABLE `testgen` (
  `A` varchar(45) NOT NULL,
  `B` varchar(45) NOT NULL,
  `C` varchar(45) NOT NULL,
  `D` varchar(45) NOT NULL,
  `genID` varchar(45) GENERATED ALWAYS AS (concat(`A`,`B`,`C`,`D`)) STORED NOT NULL,
  PRIMARY KEY (`genID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

当生成的列设置为“ STORED”而不是“ VIRTUAL”(默认)时,该列既可以用作子表的主键又可以用作外部键:

CREATE TABLE `placement` (
  `id` int(11) NOT NULL,
  `ABCD` varchar(45) DEFAULT NULL,
  `otherstuff` varchar(45) DEFAULT NULL,
  `etc` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_placement_testgen_idx` (`ABCD`),
  CONSTRAINT `fk_placement_testgen` FOREIGN KEY (`ABCD`) REFERENCES `testgen` (`genID`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如果对组成部分(例如,列C)进行了更改,并且在FK约束是在UPDATE CASCADE上设置的,则genID列会更新,此更改将在子表中永久保留。

这似乎完全符合我的要求。

然而!!!由于它是一个新功能,现在我知道它确实可以正常工作,所以我提出另一个问题来探讨这是否被接受。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL:创建一个带有外键的表,该表引用由外键组成的主键

HashMap如何仅由一个条目/对象组成?

创建一个由n个元素组成的数组

创建一个由函数内部的类组成并在主体部分使用的系统

如何创建由另一个组成的结构

创建一个由单个字母组成的框架

反应形式由多个组成部分组成

如何检查一个单词是否可以由数组中的条目组成?

创建一个DataFrame,它由另一个的所有行对组成

获取由两部分组成的字符串的第一部分

如何创建一个由使用strtok函数创建的标记组成的数组?

由两个变量组成一个 IP

创建一个由4个Int32元素组成的元组

如何创建一个由两个不同表组成的表

如何创建一个由20个随机字节组成的数组?

动态创建一个由N个ListItemTexts组成的ListItem

如何创建一个由1000个零采样延迟组成的信号?

是否可以创建由一定比例的另一个列表组成的列表?

如何制作由两个外键组成的主键,“是同一个键”,无论值的顺序如何?

由未咖喱的函数组成一个函数

由小阵列组成一个大阵列

制作一个由字符串组成的数组

由几列组成一个公共列

创建一个由子数组和子列表项组成的字典

创建一个由int和float子集组成的类型

使用熊猫在DataFrame中创建一个由列表组成的新列

创建一个由连续相同元素的三元组组成的数组

创建一个由可变字符串组成的元组

如何生成一个 List<KeyValuePair<string, int>> 由另一个列表中的分组组成?