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

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

使用说明

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

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

相关推荐
得物技术1 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维5 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉5 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud21 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud21 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger1 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥2 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud2 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql