-- 创建示例表
DROP TABLE IF EXISTS `t_base_user`;CREATE TABLE `t_base_user` ( `USER_ID` char(36) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `IDENTITY_ID` int(11) DEFAULT NULL, `PERSON_ID` int(11) DEFAULT NULL, `USER_NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `BUREAU_ID` int(11) DEFAULT NULL, `DEPARTMENT_ID` int(11) DEFAULT NULL, `CREATE_TIME` datetime(0) DEFAULT NULL, `B_USE` int(255) DEFAULT NULL, `DYNAMIC_COLS` blob, PRIMARY KEY (`USER_ID`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;INSERT INTO T_BASE_USER(USER_ID,IDENTITY_ID,PERSON_ID,USER_NAME,BUREAU_ID,DEPARTMENT_ID,CREATE_TIME,B_USE,DYNAMIC_COLS)VALUES('75B2E977-A00D-440D-BA60-0F47361CE55D',5,1,'黄海',20,21,now(),1,COLUMN_CREATE('XB_NAME', '男', 'MZ', '汉族'));INSERT INTO T_BASE_USER(USER_ID,IDENTITY_ID,PERSON_ID,USER_NAME,BUREAU_ID,DEPARTMENT_ID,CREATE_TIME,B_USE,DYNAMIC_COLS)VALUES('61A110A9-3E36-430C-AF9F-D23A74649044',5,1,'朱八',20,21,now(),1,COLUMN_CREATE('XB_NAME', '女', 'MZ', '回族'));-- 查询SELECT USER_ID,IDENTITY_ID,PERSON_ID,USER_NAME,BUREAU_ID,DEPARTMENT_ID,CREATE_TIME,B_USE, COLUMN_GET(dynamic_cols, 'XB_NAME' AS CHAR) AS XB_NAME FROM t_base_user where COLUMN_GET(dynamic_cols, 'XB_NAME' AS CHAR)='男'-- 使用场景说明:以基础数据为例,我们对于人员有四张表:t_base_person(教工表),t_base_student(学生表),t_base_parent(家长表),t_sys_loginperson(登录表), 其实都是人员的基本表格,但因为属性有差异,导致派生出了四张表,而差异却不是查询的最关键信息,也就是速度不是第一位的。目前这四张表的问题也很多,比如互相之间的数据不对应(这可以通过外键等方式进行限制,但外键的问题也很多),比如开发了大量的无用接口。我们可以考虑使用json功能,通过一个基类表t_base_user完成所有设计,这样设计极简,以后的问题也会最少。但在Mariadb中的json,不像是mongodb中的json那样灵活,还是做为定位列扩展比较合适。