MySQL实战:如何设计一个常用的后台管理系统的数据库结构

news2024/11/30 8:39:15

部分数据来源:ChatGPT  

什么是后台管理系统?

        后台管理系统是指用于管理和维护网站或应用程序的后台界面系统,通常包含用户管理、权限管理、数据管理等功能,能够方便快捷地管理网站或应用程序。常见的后台管理系统有Cms、OA等,下面我们就来介绍如何使用MySQL设计一个常用的后台管理系统。

如何使用MySQL设计一个常用的后台管理系统?

1. 数据库设计

我们首先需要设计一个合适的数据库结构,建立不同的数据表来存放数据。

安装MySQL和Navicat数据库工具后,我们可以登录到MySQL中,选择创建一个数据库:

CREATE DATABASE management_system;

在新建的这个数据库内,我们可以创建用户表(user)、角色表(role)、权限表(permission)、用户角色关联表(user_role)、角色权限关联表(role_permission)等多个数据表。

  • 用户表(user):存储所有的用户信息,包括用户ID、用户名、密码等。
  • 角色表(role):存储所有的角色信息,包括角色ID、角色名称等。
  • 权限表(permission):存储所有的权限信息,包括权限ID、权限名称、权限URL等。
  • 用户角色关联表(user_role):存储用户和角色的关联信息,包括用户ID和角色ID。
  • 角色权限关联表(role_permission):存储角色和权限的关联信息,包括角色ID和权限ID。

如何创建这些数据表和对这些表进行相关操作,下面我们会做更详细的介绍。

2. 数据库表设计

【用户表(user)】

        用户表(user)存储了所有的用户信息,包括用户ID、用户名、密码等。下面是用户表的设计及创建代码:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT, -- 用户ID,自动增加
  `username` varchar(50) NOT NULL, -- 用户名
  `password` varchar(50) NOT NULL, -- 密码
  PRIMARY KEY (`id`), -- 设置用户ID为主键
  UNIQUE KEY `username` (`username`) -- 设置用户名唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们可以在数据表中插入一些数据,以供后面的操作使用:

INSERT INTO `user` (`id`, `username`, `password`) VALUES
(1, 'admin', '123456'),
(2, 'user01', '123456');

上述代码就是向用户表中插入了两条数据,id为1的用户为管理员,用户名为admin,密码为123456;id为2的用户为普通用户,用户名为user01,密码为123456。

【角色表(role)】

        角色表(role)存储了所有的角色信息,包括角色ID、角色名称等。下面是角色表的设计及创建代码:

CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT, -- 角色ID,自动增加
  `name` varchar(50) NOT NULL, -- 角色名
  PRIMARY KEY (`id`), -- 设置角色ID为主键
  UNIQUE KEY `name` (`name`) -- 设置角色名唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们可以在数据表中插入一些数据,以供后面的操作使用:

INSERT INTO `role` (`id`, `name`) VALUES
(1, 'admin'),
(2, 'user');

上述代码中插入了两个角色,id为1的角色为管理员,名称为admin;id为2的角色为普通用户,名称为user。

【权限表(permission)】

        权限表(permission)存储了所有的权限信息,包括权限ID、权限名称、权限URL等。下面是权限表的设计及创建代码:

CREATE TABLE `permission` (
  `id` int(11) NOT NULL AUTO_INCREMENT, -- 权限ID,自动增加
  `name` varchar(50) NOT NULL, -- 权限名称
  `url` varchar(50) NOT NULL, -- 权限URL
  PRIMARY KEY (`id`), -- 设置权限ID为主键
  UNIQUE KEY `name` (`name`) -- 设置权限名称唯一
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们可以在数据表中插入一些数据,以供后面的操作使用:

INSERT INTO `permission` (`id`, `name`, `url`) VALUES
(1, '查看用户', '/user/list'),
(2, '添加用户', '/user/add');

上述代码中插入了两个权限,id为1的权限为查看用户信息,URL为/user/list;id为2的权限为添加用户信息,URL为/user/add。

【用户角色关联表(user_role)】

        用户角色关联表(user_role)存储了用户和角色的关联信息,包括用户ID和角色ID。下面是用户角色关联表的设计及创建代码:

CREATE TABLE `user_role` (
  `user_id` int(11) NOT NULL, -- 用户ID
  `role_id` int(11) NOT NULL, -- 角色ID
  PRIMARY KEY (`user_id`,`role_id`), -- 设置用户ID和角色ID为联合主键
  KEY `role_id` (`role_id`), -- 设置角色ID为索引
  CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`), -- 设置外键规则,关联用户表
  CONSTRAINT user_role_ibfk_2 FOREIGN KEY (role_id) REFERENCES role (id) -- 设置外键规则,关联角色表
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们可以在数据表中插入一些数据,以供后面的操作使用:

INSERT INTO `user_role` (`user_id`, `role_id`) VALUES
(1, 1),
(1, 2),
(2, 2);

上述代码中插入了两条记录,表示id为1的用户为管理员,id为2的用户为普通用户。

【角色权限关联表(role_permission)】

        角色权限关联表(role_permission)存储了角色和权限的关联信息,包括角色ID和权限ID。下面是角色权限关联表的设计及创建代码:

CREATE TABLE `role_permission` (
  `role_id` int(11) NOT NULL,     -- 角色ID
  `permission_id` int(11) NOT NULL,  -- 权限ID
  PRIMARY KEY (`role_id`,`permission_id`), -- 设置角色ID和权限ID为联合主键
  KEY `permission_id` (`permission_id`),   -- 设置权限ID为索引
  CONSTRAINT `role_permission_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`), -- 设置外键规则,关联角色表
  CONSTRAINT `role_permission_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `permission` (`id`) -- 设置外键规则,关联权限表
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们可以在数据表中插入一些数据,以供后面的操作使用:

INSERT INTO `role_permission` (`role_id`, `permission_id`) VALUES
(1, 1),
(1, 2),
(2, 1);

上述代码中插入了三条记录,表示管理员角色有两个权限(查看用户信息和添加用户信息),普通用户角色只有一个权限(查看用户信息)。

3. 数据库表操作

        在建立好数据库和数据表之后,我们需要对表格进行增删改查或修改表结构等操作,下面我们就来详细介绍一下。

【增加数据】

增加数据可以使用INSERT INTO语句,具体示例如下:

INSERT INTO `user` (`username`, `password`) VALUES ('user02', '123456'); -- 插入一条用户数据

INSERT INTO `role` ( `name`) VALUES ('visitor');  -- 插入一条角色数据

INSERT INTO `permission` (`id`, `name`, `url`) VALUES ('修改用户', '/user/edit');  -- 插入一条权限数据

INSERT INTO `user_role` (`user_id`, `role_id`) VALUES (3, 1); -- 插入一条用户角色关联信息

INSERT INTO `role_permission` (`role_id`, `permission_id`) VALUES (3, 3);  -- 插入一条角色权限关联信息

上述代码中,分别向用户、角色、权限、用户角色关联和角色权限关联表中插入了一条数据。注意,本文中为了演示简便,有些数据表暂时只有少量数据,实际应用中可能需要更多的数据。

【查询数据】

查询数据可以使用SELECT语句,可以选择列出所有的数据,也可以根据条件筛选数据。下面是查询数据的基本语句:

SELECT * FROM `user`; -- 查询所有用户信息
SELECT `id`, `username` FROM `user` WHERE id=1; -- 查询id为1的用户ID和用户名
SELECT `name`,`url` FROM `permission` WHERE `id` IN (1,2); -- 查询id为1和2的权限名称和URL
SELECT * FROM `user_role_permission`; -- 查询用户角色权限视图中所有记录

【更新数据】

更新数据可以使用UPDATE语句,可以根据条件对数据进行修改。下面是更新数据的示例:

UPDATE `user` SET `password` = 'newpassword' WHERE `id` = 3; -- 将id为3的用户密码修改为newpassword
UPDATE `role` SET `name` = 'vip' WHERE `id` = 3; -- 将id为3的角色名称修改为vip

【删除数据】

删除数据可以使用DELETE语句,可以根据条件删除数据。下面是删除数据的示例:

DELETE FROM `user` WHERE `id` = 3; -- 删除id为3的用户信息
DELETE FROM `role` WHERE `id` = 3; -- 删除id为3的角色信息
DELETE FROM `permission` WHERE `id` = 3; -- 删除id为3的权限信息
DELETE FROM `user_role` WHERE `user_id` = 3; -- 删除和id为3的用户关联的角色信息
DELETE FROM `role_permission` WHERE `permission_id` = 3; -- 删除和id为3的权限关联的角色信息

【视图创建】

视图是一种虚拟的表格,可以根据实际表格中的数据进行定义,而不是真正存在。我们可以对视图进行增删改查等操作。下面是一个创建用户角色权限视图的示例:

CREATE VIEW `user_role_permission` AS
SELECT `user`.`username`, `role`.`name`, `permission`.`url` 
FROM `user`, `user_role`, `role_permission`, `role`, `permission` 
WHERE `user`.`id` = `user_role`.`user_id` AND `user_role`.`role_id` = `role_permission`.`role_id` AND `role_permission`.`permission_id` = `permission`.`id` AND `role`.`id` = `role_permission`.`role_id`;

上述代码中,我们创建了一个用户角色权限视图,来展示所有用户、角色和权限的信息。这个视图包含了用户名、角色名称和权限URL。我们可以使用SELECT语句对视图进行查询,如:

SELECT * FROM `user_role_permission`;

可以看到,此时我们就可以基于这个视图进行查询,实际查询的是多张表格的关联信息。

【触发器创建】

触发器可以在表格中插入、删除或更新数据时自动执行一段程序。下面是创建一个插入数据时自动更新用户表的数据行数的触发器的示例:

CREATE TRIGGER `user_count` AFTER INSERT ON `user`
FOR EACH ROW BEGIN
   -- ...执行动作...
   SET @total_count = (SELECT COUNT(*) FROM `user`);
   UPDATE `system_info` SET `value` = @total_count WHERE `key` = 'user_count';
END;

-- 这段代码是用来创建一个触发器的,该触发器被命名为user_count,在每次向user表格插入一行新数据后,就会被触发执行。

上述代码中,我们定义了一个触发器,在用户表中插入数据时,自动更新系统信息表中的用户行数。这个操作会在每个插入操作之后执行,统计用户表格中的所有行数,并更新系统信息表格中的值。我们可以在插入用户数据后,查询系统信息表格的值,来确认是否已经更新。

最后的效果图

总结

        本文主要介绍了如何使用MySQL设计一个常用的后台管理系统,包括数据库的设计、表格的操作、视图和触发器的创建等内容,适合有一定MySQL基础的用户学习。通过这篇文章的学习,你可以了解到如何设计一个常见的后台管理系统的数据库结构,以及如何进行常见的表格操作,比如增删改查等。同时,你也可以学习如何创建视图和触发器来优化数据库操作。希望这篇文章对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

元素的alt和title属性相关细节知识

文章目录 I. 引言alt和title属性的作用和原理元素的alt和title属性的区别 II. 元素的alt属性元素的alt属性alt属性的作用alt属性的使用场景引用实例说明alt属性的应用 III. 元素的title属性元素的title属性title属性的作用title属性的使用场景引用实例说明title属性的应用 IV. …

chatgpt赋能python:Python新手必备:如何下载Jupyter

Python新手必备:如何下载Jupyter 如果你正在寻找一个强大而简单的Python编程环境,那么Jupyter可能是你需要的软件。Jupyter是一种交互式的编程环境,让你可以在浏览器中创建和共享笔记本,适合编写数据分析、机器学习、人工智能等方…

chatgpt赋能python:Python编程必备之OpenCV库下载与安装

Python编程必备之OpenCV库下载与安装 作为目前最热门的计算机视觉库之一,OpenCV在人工智能领域中发挥着巨大的作用。而Python作为一门强大的编程语言,在OpenCV的使用上也有其独特的优势。本文将介绍Python如何下载和安装OpenCV库,以及如何引…

chatgpt赋能python:Pythonpip安装库教程

Python pip安装库教程 Python是一个高级编程语言,具有丰富的库和模块,而pip是Python官方推荐的包管理工具,可以轻松地安装、升级和卸载各种库。 什么是pip pip是Python包管理工具,用于安装Python中的第三方库。pip可以轻松地安…

⑦电子产品拆解分析-6600mA充电宝

⑦电子产品拆解分析-6600mA充电宝 一、功能介绍二、电路分析以及器件作用1、锂电池充放电和USB输出2、主控IC部分电量 三、数据资料汇总以及参考 一、功能介绍 ①提供USB的5V1A和5V2A功率输出;②充电使用micro USB对锂电池充电;③充电宝总容量6600MA电量…

chatgpt赋能python:Python如何设计UI:最佳实践和关键洞察

Python如何设计UI:最佳实践和关键洞察 作为一种支持多种编程范式和用途的高级语言,Python已经成为了许多技术创造者和创业者的首选工具之一。但是,Python最初并不是为了动态用户界面(Dynamic User Interface,简称UI&a…

基于STM32C8T6的智能小车项目时钟配置

一、时钟树简介 HSE 是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率从 3-25MHZ 不等。当使用有源晶振时,时钟从 OSC_IN 引脚进入,OSC_OUT 引脚悬空,当选用无源 晶振时,时钟从 OSC_IN 和 OSC_OU…

Python数据分析及案例详细讲解(文末赠书~)

名字:阿玥的小东东 学习:Python、C 博客主页:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 数据分析 618多得图书活动来啦 本期推荐 内容简介 作者简介 目录: 下面我将给出一个…

Spring事务--上篇

Spring事务管理 是什么 事务是逻辑上的一组操作,要么都执行,要么都不执行。 另外,需要格外注意的是:事务能否生效数据库引擎是否支持事务是关键。比如常用的 MySQL 数据库默认使用支持事务的 innodb引擎。但是,如果把…

智能优化算法改进-K-means聚类种群初始化附Matlab代码

目录 0引言 一、K-means聚类原理 二、K-Means聚类算法步骤 三、K-Means聚类原理图​编辑 四、K-means聚类改进智能优化算法种群初始化效果图 4.1 初始种群数据图 ​4.2 K-means聚类结果图 4.2.1 根据K-means聚类原理聚类 4.2.2 根据MATLAB自带kmeans函数聚类 五、K-…

Docker镜像的创建方法及Dockerfile案例

目录 一、基于现有镜像创建1、创建启动镜像2、生成新镜像 三、基于Dockerfile创建1、Dockerfile结构及分层2、联合文件系统3、docker镜像加载原理4、dockerfile操作常用的指令 四、Dockerfile 案例1、dockerfile构建httpd实例2、Dockerfile构建nginx实例3、Dockerfile构建tomca…

chatgpt赋能python:Python下载Pandas库教程

Python下载Pandas库教程 什么是Pandas库? Pandas是用于数据处理和数据分析的Python库,它提供了快速,灵活和全面的数据结构,如Series和DataFrame,使数据清理,分析和处理变得更加娴熟。 为什么要下载Panda…

宝塔面板备份docker,镜像打包下载到本地,镜像还原,镜像推送

目录 1. 生成镜像2. 打包镜像并下载到本地3. 镜像还原4. 镜像推送总结 欢迎关注 『发现你走远了』 博客,持续更新中 欢迎关注 『发现你走远了』 博客,持续更新中 1. 生成镜像 软件商店->点击docker管理器的设置 生成镜像 这里可以直接点击提交&#…

RNN、LSTM知识点总结

CNN——用于计算机视觉(CV) RNN——用于自然语言处理(NLP) 理解:其中h0,h1...ht-1是中间结果,x0,x1...x代表时序输入。举例:如I am Chinese,I love China&…

PS AI功能真实测评;OpenAI提示词最佳实践官方指南;产品出海的多语言场景设计策略;AI黑客松的复兴与狂欢 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 百度商业AI技术创新大赛 (CTI),报名截至7月13日 百度商业AI技术创新大赛,是面向全社会开放的全国性技术创新大…

ROS EKF 机器人位姿估计功能包:robot_pose_ekf 详解

ROS EKF 机器人位姿估计功能包:robot_pose_ekf 详解 功能包使用文件结构配置参数 订阅的话题具体代码轮速里程计惯导数据视觉里程计 发布的话题robot_pose_ekf 的工作原理 功能包使用 文件结构 没有launch文件夹,有两个launch文件都在外面没有config文件…

chatgpt赋能python:Python如何下载FFmpeg:必知方法及优势

Python如何下载FFmpeg:必知方法及优势 如果你是一位使用Python进行视频处理的开发者,那么推荐在项目中使用FFmpeg库。FFmpeg是一个免费开源的视频框架,可以用于解析、编码、转换和流媒体处理等多种操作。本文将介绍如何通过Python下载和使用…

5. 超炫酷的爬虫源代码-vip音乐下载器

文章目录 1. 准备工作2. 安装第3方库2.1 os 库2.2 tkinter库2.3 webbrowser 库2.4 requests 库2.5 PySimpleGUI 库2.6 retrying库 3. 源代码4. 运行结果5. 音乐下载器的使用6. 去哪里找下载的音乐7. 部分代码解析8. 留言 1. 准备工作 在电脑D盘新建一个【安迪笔记】文件夹。 【…

chatgpt赋能python:Python怎么下载cfg模块

Python怎么下载cfg模块 Python是一种流行的编程语言,它多用于Web开发、数据分析、人工智能等领域。要想使用Python编写程序,需要掌握大量的Python模块。其中,cfg模块是一个比较特殊的模块,它可以用来读取和写入INI文件。本文将介…

chatgpt赋能python:Python科学计算之超级强大的数据分析库:Pandas

Python科学计算之超级强大的数据分析库:Pandas Python作为一种高级编程语言,已经被广泛应用于数据分析、机器学习和人工智能等领域。在这些领域中,Pandas是最重要的Python库之一。它提供了高效、灵活的数据结构和数据分析工具,如…