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;
字段名 | 类型 | 长度/值 | 允许空值 | 默认值 | 键 | 注释 | 其他特性 |
---|---|---|---|---|---|---|---|
userid | int | NOT NULL | PRI | 用户编号 | |||
username | varchar | 20 | NULL | 用户名 | |||
password | varchar | 255 | NULL | 用户密码 | |||
phone | varchar | 11 | NULL | 用户手机号 | |||
varchar | 100 | NULL | 用户邮箱 | ||||
address | varchar | 100 | NULL | 用户地址 | |||
sex | varchar | 10 | NULL | 用户性别 | |||
hobby | varchar | 255 | NULL | 用户爱好 | |||
remark | varchar | 255 | NULL | 备注 | |||
isblog | enum | 'false','true' | NULL | 'false' | 是否是博主 | ||
registertime | timestamp | NULL | 用户注册时间 | 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 | 默认值 | 自动递增 | 字符集/排序规则 | 注释 |
---|---|---|---|---|---|---|
blogid | int(11) | NOT NULL | - | 是 (AUTO_INCREMENT) | - | 评论id |
userid | int(11) | 允许 | NULL | 否 | - | 用户id |
tittle | varchar(255) | 允许 | NULL | 否 | utf8mb4_general_ci | 评论标题 |
content | varchar(255) | 允许 | NULL | 否 | utf8mb4_general_ci | 博客内容 |
clicked | int(11) | 允许 | NULL | 否 | - | 博客点击数 |
attachment | varchar(255) | 允许 | NULL | 否 | utf8mb4_general_ci | 附件 |
createtime | timestamp | 允许 | 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;
字段名 | 数据类型 | 允许为空 | 默认值 | 自动递增 | 字符集 | 排序规则 | 说明 |
---|---|---|---|---|---|---|---|
tagid | int(11) | 否 | - | 是 | - | - | 标签ID |
tagname | varchar(255) | 是 | NULL | 否 | utf8mb4 | utf8mb4_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;
字段名 | 数据类型 | 允许为空 | 默认值 | 主键 | 索引 | 说明 |
---|---|---|---|---|---|---|
id | int(11) | 否 | - | 是 | - | 主键ID |
tagid | int(11) | 是 | NULL | 否 | 是 | 标签ID |
blogid | int(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;
字 段名 | 数据类型 | 允许为空 | 默认值 | 自动递增 | 字符集 | 排序规则 | 索引 | 说明 |
---|---|---|---|---|---|---|---|---|
commentid | int(11) | 否 | - | 是 | - | - | 主键 | 评论ID |
userid | int(11) | 是 | NULL | 否 | - | - | BTREE | 用户ID |
blogid | int(11) | 是 | NULL | 否 | - | - | BTREE | 博客ID |
content | varchar(255) | 是 | NULL | 否 | utf8mb4 | utf8mb4_general_ci | - | 评论内容 |
status | varchar(255) | 是 | NULL | 否 | utf8mb4 | utf8mb4_general_ci | - | 评论状态 |
ip | varchar(255) | 是 | NULL | 否 | utf8mb4 | utf8mb4_general_ci | - | 评论IP地址 |
createtime | timestamp | 是 | ON UPDATE CURRENT_TIMESTAMP | 否 | - | - | - | 评论时间 |
6.一些总结
表的设计有 一对多的关系 ,一对一的关系,还可以使用外键约束 ,外键约束时,外键在从表中建立,而非主表建立,通过在从表建立外键从表中的数据进行限制.下面是用navicat设计数据库中的一些外键参数说明
各选项的含义
On Delete(删除时行为)
-
CASCADE(级联):当主表中的记录被删除时,自动删除从表中相关联的记录。
-
例如:删除一个部门,该部门下的所有员工记录也会被自动删除
-
-
NO ACTION(无动作):如果从表中有关联记录存在,则不允许删除主表中的记录。
-
这是最严格的约束,确保数据完整性
-
-
RESTRICT(限制):与 NO ACTION 类似,阻止删除操作
-
在大多数数据库中,NO ACTION 和 RESTRICT 是相同的
-
-
SET NULL(设为空):当主表中的记录被删除时,将从表中相关记录的外键字段设为 NULL
-
前提是外键字段允许为 NULL
-
On Update(更新时行为)
这些选项与 On Delete 类似,但是针对主表主键被更新时的情况:
-
CASCADE:主表主键更新时,从表外键自动更新为新值
-
NO ACTION/RESTRICT:阻止主键更新(如果有外键引用)
-
SET NULL:主键更新时,从表外键设为 NULL
实际应用场景
-
CASCADE:适用于强关联数据,如订单和订单项
-
NO ACTION/RESTRICT:适用于需要强制保持数据完整性的情况
-
SET NULL:适用于可选关联,如员工和部门关系(允许员工暂时无部门)
注意事项
-
使用 CASCADE 要特别小心,可能导致意外的大规模数据删除
-
在大多数业务场景中,NO ACTION/RESTRICT 是更安全的选择
-
SET NULL 要求外键字段必须允许 NULL 值