权限管理--02(表的设计)

                

用户挂在部门下面,权限挂在权限模块下面

1.部门表的设计

  • 1.首先需要注意的是id的设计,一般都是长整型,无符号 20位的大小,无符号表示id为非负数
  • 2.其次需要注意的是可变长度字符串的大小设计,原则是对于可变长度的字段,在满足条件的前提下,尽可能使用较短的变长字段长度。虽然相同的数据他们占用的存储空间,但是字段的最大长度不一致,造成执行计划预估出现较大的偏差,因此给予较高的内存,浪费无所谓的资源。再看一个通过聚合函数操作两张表的例子,会增加CPU的使用。
  • 3.能不为空的字段尽量不为空,因为对一列含空值的数据做索引在存储方面会有更多的要求。
  • 虽然MySQL可以在含有null的列上使用索引,但不代表null和其他数据在索引中是一样的。不建议列上允许为空。最好限制not null,并设置一个默认值,比如0''空字符串等,如果是datetime类型,可以设置成'1970-01-01 00:00:00'这样的特殊值。对MySQL来说,null是一个特殊的值,Conceptually, NULL means “a missing unknown value” and it is treated somewhat differently from other values。比如:不能使用=,<,>这样的运算符,对null做算术运算的结果都是nullcount时不会包括null行等,null比空字符串需要更多的存储空间等。

 所以最后建表语句为:

2.用户表的设计

CREATE TABLE `sakila`.`Untitled`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户的id',
  `user_name` varchar(32) NOT NULL DEFAULT '',
  `telephone` varchar(13) NOT NULL DEFAULT '',
  `mail` varchar(20) NOT NULL DEFAULT '',
  `password` varchar(64) NOT NULL DEFAULT '',
  `dept_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '部门id',
  `status` int(0) NOT NULL DEFAULT 1 COMMENT '用户的状态,0表示冻结,1表示正常,2表示删除',
  `remark` varchar(225) COMMENT '备注',
  `operator` varchar(64) NOT NULL DEFAULT '' COMMENT '操作人',
  `operator_time` datetime(0) NOT NULL DEFAULT now(),
  `operator_ip` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
);

3.权限模块表

  

CREATE TABLE `sys_acl_module` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '权限模块的id,无符号表示非负数',
  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '权限名称',
  `parent_id` bigint(20) NOT NULL COMMENT '上级权限模块的ID',
  `level` varchar(255) NOT NULL DEFAULT '' COMMENT '权限模块层级',
  `seq` int(11) DEFAULT NULL COMMENT '权限模块在当前层级下的顺序',
  `status` int(0) NOT NULL DEFAULT 1 COMMENT '该权限模块是否启用。1启用,0停用',
  `remark` varchar(255) DEFAULT '',
  `operator` varchar(64) DEFAULT NULL COMMENT '操作人',
  `operator_time` datetime DEFAULT NULL,
  `operator_ip` varchar(32) DEFAULT NULL COMMENT '最后一次更新操作者的IP',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.权限表

CREATE TABLE `sys_acl` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(255) NOT NULL DEFAULT '' COMMENT '权限码',
  `name` varchar(20) NOT NULL DEFAULT '' COMMENT '权限的名称。体现其功能',
  `acl_module_id` bigint(20) NOT NULL COMMENT '权限所在权限模块的id',
  `url` varchar(255) NOT NULL DEFAULT '' COMMENT '请求的url,可以填正则表达式',
  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '类型。1 菜单 2按钮 3其他',
  `status` int(11) NOT NULL DEFAULT '1' COMMENT '该权限是否可以用 1可用,0不可用',
  `seq` int(11) NOT NULL COMMENT '权限在当前模块下的顺序,由小到大',
  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  `operator` varchar(64) NOT NULL DEFAULT '',
  `operator_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `operator_ip` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5.角色表

 

CREATE TABLE `sys_role` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `name` varchar(16) NOT NULL DEFAULT '' COMMENT '角色的名字',
  `type` int(11) NOT NULL DEFAULT '1' COMMENT '角色的类型。1 管理员 2其他',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否启用 1 启用 0不启用',
  `remark` varchar(255) DEFAULT NULL,
  `operator` varchar(64) NOT NULL DEFAULT '',
  `operator_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `operator_ip` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.角色用户关联关系表

CREATE TABLE `sys_role_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `role_id` bigint(20) NOT NULL,
  `operator` varchar(64) NOT NULL DEFAULT '',
  `operator_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `operator_ip` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

7.角色权限关系表


 

CREATE TABLE `sys_role_acl` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `role_id` bigint(20) NOT NULL,
  `acl_id` bigint(20) NOT NULL,
  `operator` varchar(64) NOT NULL DEFAULT '',
  `operator_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `operator_ip` varchar(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

8.权限更新记录表

 

CREATE TABLE `sys_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `type` int(11) NOT NULL DEFAULT '0' COMMENT '权限跟新的类型,1部门 2用户 3权限模块 4 权限 5角色\r\n6用户角色关系 7权限角色关系',
  `target_id` bigint(20) NOT NULL COMMENT '基于type后指定的对象id',
  `old_value` text,
  `new_value` text,
  `operator` varchar(64) NOT NULL DEFAULT '',
  `operator_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `operator_ip` varchar(32) NOT NULL DEFAULT '',
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '当前是否复原过 0没有 1有',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

9.数据库表设计的规范

第二条解释:如果null字段被索引的话需要额外的一个字节,第二点是如果做索引统计的时候,值得比较将会变得更复杂,这里我们可以使用0还有空字符串或其他代码里没有含义得值占位,给的空字符串就是占位。

在建表的时候我们选择UTF-8,排序规则一般选择utf8_unicode_ci,utf8_general_ci 不区分大小写,utf8_general_ci校对速度快,但准确度稍差。(准确度够用,一般建库选择这个)详见:https://blog.csdn.net/qq_38224812/article/details/80745868

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值