当前位置: 首页 > news >正文

PHP+MYSQL开发一个简易的个人博客(一)

目录

个人博客系统数据库设计

1.用户表设计

2.博客表设计

3.标签表设计

4.博客_标签表设计

5.评论表设计

6.一些总结

各选项的含义

On Delete(删除时行为)

On Update(更新时行为)

实际应用场景

注意事项


个人博客系统数据库设计

1.用户表设计

sql语句

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
  `username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户密码',
  `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户手机号',
  `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户邮箱',
  `address` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户地址',
  `sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户性别',
  `hobby` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户爱好',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  `isblog` enum('false','true') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'false' COMMENT '是否是博主',
  `registertime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '用户注册时间',
  PRIMARY KEY (`userid`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

字段名类型长度/值允许空值默认值注释其他特性
useridintNOT NULLPRI用户编号
usernamevarchar20NULL用户名
passwordvarchar255NULL用户密码
phonevarchar11NULL用户手机号
emailvarchar100NULL用户邮箱
addressvarchar100NULL用户地址
sexvarchar10NULL用户性别
hobbyvarchar255NULL用户爱好
remarkvarchar255NULL备注
isblogenum'false','true'NULL'false'是否是博主
registertimetimestampNULL用户注册时间ON UPDATE CURRENT_TIMESTAMP

2.博客表设计

blog表设计

DROP TABLE IF EXISTS `blog`;
CREATE TABLE `blog`  (
  `blogid` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论id',
  `userid` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `tittle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '评论标题',
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '博客内容',
  `clicked` int(11) NULL DEFAULT NULL COMMENT '博客点击数',
  `attachment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件',
  `createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '博客创建时间',
  PRIMARY KEY (`blogid`) USING BTREE,
  INDEX `userid`(`userid`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
 

字段名数据类型允许NULL默认值自动递增字符集/排序规则注释
blogidint(11)NOT NULL-是 (AUTO_INCREMENT)-评论id
useridint(11)允许NULL-用户id
tittlevarchar(255)允许NULLutf8mb4_general_ci评论标题
contentvarchar(255)允许NULLutf8mb4_general_ci博客内容
clickedint(11)允许NULL-博客点击数
attachmentvarchar(255)允许NULLutf8mb4_general_ci附件
createtimetimestamp允许CURRENT_TIMESTAMP (ON UPDATE CURRENT_TIMESTAMP)-博客创建时间

3.标签表设计

tag表

DROP TABLE IF EXISTS `tag`;
CREATE TABLE `tag`  (
  `tagid` int(11) NOT NULL AUTO_INCREMENT COMMENT '标题id',
  `tagname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题名字',
  PRIMARY KEY (`tagid`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
 

字段名数据类型允许为空默认值自动递增字符集排序规则说明
tagidint(11)---标签ID
tagnamevarchar(255)NULLutf8mb4utf8mb4_general_ci标签名称

4.博客_标签表设计

tagblog表

DROP TABLE IF EXISTS `tagblog`;
CREATE TABLE `tagblog`  (
  `id` int(11) NOT NULL COMMENT '标签id',
  `tagid` int(11) NULL DEFAULT NULL COMMENT '标签id',
  `blogid` int(11) NULL DEFAULT NULL COMMENT '博客id',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `blogid`(`tagid`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Fixed;
 

字段名数据类型允许为空默认值主键索引说明
idint(11)--主键ID
tagidint(11)NULL标签ID
blogidint(11)NULL-博客ID

5.评论表设计

comment表

DROP TABLE IF EXISTS `comment`;
CREATE TABLE `comment`  (
  `commentid` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论id',
  `userid` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `blogid` int(11) NULL DEFAULT NULL COMMENT '博客id',
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '评论内容',
  `status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态',
  `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '评论ip地址',
  `createtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '评论时间',
  PRIMARY KEY (`commentid`) USING BTREE,
  INDEX `userid`(`userid`) USING BTREE,
  INDEX `blogid`(`blogid`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
 

段名

数据类型允许为空默认值自动递增字符集排序规则索引说明
commentidint(11)---主键评论ID
useridint(11)NULL--BTREE用户ID
blogidint(11)NULL--BTREE博客ID
contentvarchar(255)NULLutf8mb4utf8mb4_general_ci-评论内容
statusvarchar(255)NULLutf8mb4utf8mb4_general_ci-评论状态
ipvarchar(255)NULLutf8mb4utf8mb4_general_ci-评论IP地址
createtimetimestampON UPDATE CURRENT_TIMESTAMP---评论时间

6.一些总结

表的设计有 一对多的关系 ,一对一的关系,还可以使用外键约束 ,外键约束时,外键在从表中建立,而非主表建立,通过在从表建立外键从表中的数据进行限制.下面是用navicat设计数据库中的一些外键参数说明

各选项的含义
On Delete(删除时行为)
  1. CASCADE(级联):当主表中的记录被删除时,自动删除从表中相关联的记录。

    • 例如:删除一个部门,该部门下的所有员工记录也会被自动删除

  2. NO ACTION(无动作):如果从表中有关联记录存在,则不允许删除主表中的记录。

    • 这是最严格的约束,确保数据完整性

  3. RESTRICT(限制):与 NO ACTION 类似,阻止删除操作

    • 在大多数数据库中,NO ACTION 和 RESTRICT 是相同的

  4. SET NULL(设为空):当主表中的记录被删除时,将从表中相关记录的外键字段设为 NULL

    • 前提是外键字段允许为 NULL

On Update(更新时行为)

这些选项与 On Delete 类似,但是针对主表主键被更新时的情况:

  1. CASCADE:主表主键更新时,从表外键自动更新为新值

  2. NO ACTION/RESTRICT:阻止主键更新(如果有外键引用)

  3. SET NULL:主键更新时,从表外键设为 NULL

实际应用场景
  1. CASCADE:适用于强关联数据,如订单和订单项

  2. NO ACTION/RESTRICT:适用于需要强制保持数据完整性的情况

  3. SET NULL:适用于可选关联,如员工和部门关系(允许员工暂时无部门)

注意事项
  • 使用 CASCADE 要特别小心,可能导致意外的大规模数据删除

  • 在大多数业务场景中,NO ACTION/RESTRICT 是更安全的选择

  • SET NULL 要求外键字段必须允许 NULL 值

相关文章:

  • 第2期:控制流程语句详解(条件判断与循环)
  • LeetCode[459]重复的子字符串(KMP解法)
  • 聊聊Spring AI Alibaba的ElasticsearchDocumentReader
  • opencv图像旋转(单点旋转的原理)
  • linux oracle 19c 静默安装
  • 使用Redis实现实时排行榜
  • Redis(持久化)
  • Gradle与Idea整合
  • python(八)-数据类型转换
  • Vue3 + Three.js 场景编辑器开发实践
  • JAVA学习-多线程
  • 【云馨AI-大模型】2025年4月第三周AI领域全景观察:硬件革命、生态博弈与国产化突围
  • Linux:基础IO---动静态库
  • Python爬虫实战:获取B站查询数据
  • 【一起学Rust】使用Thunk工具链实现Rust应用对Windows XP/7的兼容性适配实战
  • 车载诊断新架构--- SOVD初入门(上)
  • 数据库基础-B+树
  • (二)Trae 配置C++ 编译
  • 少儿编程路线规划
  • 什么是零缺陷质量管理?
  • 揭晓!人形机器人半马完赛奖+专项奖发布
  • 儿童阅读空间、残疾人友好书店……上海黄浦如何打造城市书房
  • 美国税局代理局长卷入马斯克与美财长之争,还未工作就被迫离职
  • 上海地铁18号线二期长轨贯通,预计今年年底开通初期运营
  • 接下来上海很热闹,天后天团轮番来开演唱会
  • 俄总统新闻秘书:乌克兰问题谈判相当艰难