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

在设计一个通用的用户、权限和菜单管理系统时,我们通常需要创建几个核心的数据库表来管理用户信息、角色信息、权限信息以及菜单信息。下面是一个基于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 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha10 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞23 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean23 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246326 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦27 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_999941 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7652 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码2 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean2 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer