權限管理--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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章