如何设计通用用户、权限、菜单数据表

在设计一个通用的用户、权限和菜单管理系统时,我们通常需要创建几个核心的数据库表来管理用户信息、角色信息、权限信息以及菜单信息。下面是一个基于SQL的示例,展示了如何建立这些基础表格。

数据库表设计

1. 用户表 (users)
复制代码

Sql

1CREATE TABLE users (
2    id INT AUTO_INCREMENT PRIMARY KEY,
3    username VARCHAR(255) NOT NULL UNIQUE,
4    password VARCHAR(255) NOT NULL,
5    email VARCHAR(255),
6    first_name VARCHAR(255),
7    last_name VARCHAR(255),
8    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
9    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
10);
2. 角色表 (roles)
复制代码

Sql

1CREATE TABLE roles (
2    id INT AUTO_INCREMENT PRIMARY KEY,
3    name VARCHAR(255) NOT NULL UNIQUE,
4    description TEXT,
5    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
6    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
7);
3. 权限表 (permissions)
复制代码

Sql

1CREATE TABLE permissions (
2    id INT AUTO_INCREMENT PRIMARY KEY,
3    name VARCHAR(255) NOT NULL UNIQUE,
4    description TEXT,
5    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
6    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
7);
4. 菜单表 (menus)
复制代码

Sql

1CREATE TABLE menus (
2    id INT AUTO_INCREMENT PRIMARY KEY,
3    name VARCHAR(255) NOT NULL,
4    url VARCHAR(255),
5    parent_id INT,
6    FOREIGN KEY (parent_id) REFERENCES menus(id),
7    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
9);
5. 用户-角色关联表 (user_roles)
复制代码

Sql

1CREATE TABLE user_roles (
2    user_id INT,
3    role_id INT,
4    PRIMARY KEY (user_id, role_id),
5    FOREIGN KEY (user_id) REFERENCES users(id),
6    FOREIGN KEY (role_id) REFERENCES roles(id)
7);
6. 角色-权限关联表 (role_permissions)
复制代码

Sql

1CREATE TABLE role_permissions (
2    role_id INT,
3    permission_id INT,
4    PRIMARY KEY (role_id, permission_id),
5    FOREIGN KEY (role_id) REFERENCES roles(id),
6    FOREIGN KEY (permission_id) REFERENCES permissions(id)
7);
7. 菜单-权限关联表 (menu_permissions)
复制代码

Sql

1CREATE TABLE menu_permissions (
2    menu_id INT,
3    permission_id INT,
4    PRIMARY KEY (menu_id, permission_id),
5    FOREIGN KEY (menu_id) REFERENCES menus(id),
6    FOREIGN KEY (permission_id) REFERENCES permissions(id)
7);

使用说明

  • 用户表存储用户的基本信息。
  • 角色表存储角色信息,角色用于授予一组权限。
  • 权限表存储具体的权限,如"创建文章"、"删除评论"等。
  • 菜单表存储系统菜单项,每个菜单项可以关联一个或多个权限。
  • 用户-角色关联表用来连接用户和角色,实现多对多的关系。
  • 角色-权限关联表菜单-权限关联表分别用于角色和菜单与权限之间的多对多关系。

这种设计允许灵活的权限管理和用户角色分配,同时也支持构建复杂的菜单结构。

相关推荐
丁总学Java29 分钟前
MySQL高级-MVCC-原理分析(RR级别)
数据库·mysql·mvcc·rr级别·可重复读
“抚琴”的人29 分钟前
C#——Path类详情
开发语言·数据库·microsoft·c#
创作小达人29 分钟前
InnoDB中的表级锁、页级锁、行级锁详解
java·数据库·mysql
missterzy1 小时前
Spring Boot 创建定时任务
java·数据库·spring boot·定时任务
m0_748171582 小时前
数据库第一次作业
数据库
V+zmm101342 小时前
springcloud分布式架构网上商城 LW +PPT+源码+讲解
java·数据库·后端·vue·idea·springclud
苏生Susheng2 小时前
【Oracle】Oracle常用语句大全
java·数据库·sql·mysql·oracle·sql语句·数据库语法
叶孤程3 小时前
【Qt知识】window frame 对窗口坐标的影响
数据库·qt·microsoft
dot.Net安全矩阵3 小时前
.NET 漏洞分析 | 某ERP系统存在SQL注入
数据库·sql·安全·web安全·矩阵·.net
编程梦想家(大学生版)3 小时前
数据库数据插入实战:创建表与插入数据
数据库·电子商务平台数据库创建于与插入