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

在设计一个通用的用户、权限和菜单管理系统时,我们通常需要创建几个核心的数据库表来管理用户信息、角色信息、权限信息以及菜单信息。下面是一个基于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);

使用说明

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

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

相关推荐
运维行者_4 小时前
Applications Manager中的Redis监控
大数据·服务器·数据库·人工智能·网络协议
悦数图数据库6 小时前
图数据库选型指南 2026:从架构、性能、AI 适配三个维度看 悦数科技
数据库·人工智能·架构
handler018 小时前
【MySQL】常用命令总结(库与表增删查改)
运维·数据库·mysql·命令·总结
week@eight8 小时前
Linux - Doris
linux·运维·数据库·mysql
cdbqss19 小时前
VB2026 菜单生成基类 BqGetMenuStrip
数据库·经验分享·学习·oracle·vb
洛水水9 小时前
Redis 分布式锁详解:实现与缺陷
数据库·redis·分布式
韶博雅9 小时前
oracle中表和列转大写
数据库·oracle
暴躁小师兄数据学院9 小时前
【AI大数据工程师特训笔记】第04讲:PostgreSQL 数据库内置函数详解
大数据·数据库·笔记·ai·语言模型
苏渡苇10 小时前
Spring Cloud Alibaba:将 Sentinel 熔断限流规则持久化到 Nacos 配置中心
数据库·spring boot·mysql·spring cloud·nacos·sentinel·持久化