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

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

使用说明

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

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

相关推荐
DolphinDB10 小时前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL11 小时前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
DBA小马哥14 小时前
时序数据库是什么?能源行业国产化替换的入门必看
数据库·时序数据库
爱可生开源社区16 小时前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
小瓦码J码18 小时前
PostgreSQL表名超长踩坑记
数据库·postgresql
yhyyht18 小时前
InfluxDB入门记录(三)flux-dsl
数据库·后端
IvorySQL1 天前
PostgreSQL 技术日报 (3月9日)|EXPLAIN ANALYZE 计时优化与复制语法讨论
数据库·postgresql·开源
stark张宇2 天前
MySQL 核心内幕:从索引原理、字段选型到日志机制与外键约束,一篇打通数据库任督二脉
数据库·mysql·架构
倔强的石头_2 天前
融合数据库架构实践:关系型、JSON与全文检索的“一库多能”深度解析
数据库
星辰员2 天前
KingbaseES数据库:ksql 命令行用户与权限全攻略,从创建到删除
数据库