Mariadb 10.2中的json使用及应用场景思考

-- 创建示例表
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那样灵活,还是做为定位列扩展比较合适。

posted @ 2017-12-07 14:17  糖豆爸爸  阅读(5594)  评论(0编辑  收藏  举报
Live2D