我希望将4列合并为一列,以便作为外键约束,可以更轻松地将唯一的串联值分布在整个数据库中。4列信息是重要的标识信息,我希望在与之连接的所有子表中都可以轻松访问这些信息。
我之所以需要将数据分成4个块,是因为每个部分都通过enum()值或整数长度进行了验证。没有一个是独一无二的,但是结合起来,它们是..
理想情况下,我仍然可以单独访问此数据(例如,按B排序)
我看到的选项是这样的:
复杂的因素是,理想情况下,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] 删除。
我来说两句