目录
ER图
好久没画过ER图,不知道画的对不对,一开始没画,答辩老师说让画ER图
数据库详细设计
表3.1 用户表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
number | 学号/教师号 | VARCHAR(20) | |
Name | 姓名 | VARCHAR(20) | |
classes | 班级 | VARCHAR(20) | |
sex | 性别 | INT(1) | 0:男 1:女 |
nickname | 昵称 | VARCHAR(20) | |
phone_number | 手机号 | VARCHAR(20) | |
PASSWORD | 密码 | VARCHAR(100) | 加密后的密码 |
signature | 个性签名 | VARCHAR(100) | |
TYPE | 用户类型 | INT(1) | 0:学生 1:教师 |
is_admin | 是否为管理员 | INT(1) | 0:不是 1:是 |
status | 用户状态 | INT(1) | 0:正常 1:禁用 |
表3.1是用户表。这里存的密码不是用户输入的密码,是通过加密算法加密后的密码,在一定程度上增加了安全性,加密的方法在下一章项目实现讲。Type表示用户的种类,0是默认值表示学生,number对应填学号,1表示教师,number对应填教师号,且教师的班级可不填。Is_admin表示用户是否为管理员,管理员有后台管理权限,在登陆时会根据这个字段判断。Status表示用户的状态,初始用户注册后都为正常,管理员会对发布恶意言论和恶意资料的用户处以禁用的操作,禁用的用户登陆不了平台。
表3.2 资料表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 发布人id | Int | |
Name | 资料名 | VARCHAR(50) | |
description | 描述 | VARCHAR(50) | |
TYPE | 类型 | VARCHAR(20) | |
file_path | 存储路径 | VARCHAR(100) | 文件在fastDFS上的存储路径 |
download_num | 下载次数 | INT | |
create_time | 发布时间 | DATETIME |
表3.2是资料表,值得说明的有2个字段,file_path和download_num。file_path是资料成功上传至fastDFS后返回的唯一标识,也是存储路径。download_num是资料在用户下载一次就会记录一次,使用这个字段的目的在于,可以根据下载的次数来标识资料的热度,并根据下载次数排序。
表3.3 活动表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 发布人id | Int | |
topic | 活动主题 | VARCHAR(20) | |
description | 描述 | VARCHAR(100) | |
create_time | 发布时间 | DATETIME | |
start_time | 开始时间 | DATETIME | |
address | 地点 | VARCHAR(100) | |
cost | 预计需要时长 | FLOAT | 单位小时 |
Total_number | 人数规模 | INT | 1:1-20人
2:20-50人 3:50-100人 4:100人以上 |
表3.3活动表对应学习活动,学习活动是线上创建、线下组织,需要指定开始时间、地点,Total_number是活动的大致预计人数规模,1表示人数规模在1-20人,2表示人数规模在20-50人,3表示50-100人,4表示100人以上。可以根据实际参与人编辑活动的人数规模。
表3.4 活动参与人表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 发布人id | Int | |
activity_id | 活动id | Int |
表3.4主要是记录每个活动的参与人,为了在界面展示出活动参与人的列表。而且在user_id、activity_id设置了UNIQUE KEY,目的在于一个用户只能参加一个活动一次,避免重复操作,插入重复的新值。
表3.5 图书表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 发布人id | Int | |
Name | 书名 | VARCHAR(50) | |
description | 描述 | VARCHAR(50) | |
TYPE | 类型 | VARCHAR(20) | |
cover_path | 图书封面 | VARCHAR(100) | 存储路径 |
create_time | 发布时间 | DATETIME | |
STATUS | 图书状态 | INT(1) | 0:未借出 1:借出 |
表3.5是记录图书信息的表。其中cover_path是图书展示时的封面,也是存储在fastDFS上。
表3.6 借书表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 借书人id | Int | |
book_id | 图书id | Int | |
borrow_time | 借书时间 | DATETIME | |
keep_time | 保存书的时长 | INT | 单位 天 |
willreturn_time | 预计归还时间 | DATETIME | |
realreturn_time | 实际归还时间 | DATETIME |
表3.6记录借书的详情。keep_time表示用户保存借到的书的时长,以天为单位,borrow_time + keep_time = willreturn_time。但是往往还书可能提早也可能延期,所以我又加了个字段realreturn_time,表示实际归还图书的时间。
表3.7 帖子表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 发布人id | Int | |
title | 标题 | VARCHAR(50) | |
content | 内容 | TEXT | |
create_time | 发布时间 | DATETIME | |
update_time | 修改时间 | DATETIME | |
like_num | 赞的个数 | INT | |
dislike_num | 踩的个数 | INT |
表3.8 评论表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 发布人id | Int | |
topic_id | 帖子id | Int | |
parent_id | 评论id | Int | 默认为-1 |
content | 内容 | TEXT | |
create_time | 发布时间 | DATETIME |
表3.8的评论分为两种,一种是对帖子的直接评论,parent_id默认为-1,另一种是对评论的回复,parent_id就是该评论的id,而topic_id置为-1,用这种方法区分评论和回复并可快速查出帖子下的所有评论以及每个里评论下的所有回复。
表3.9记录用户赞帖子表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 赞的用户id | Int | |
topic_id | 帖子id | Int |
表3.10 记录用户踩帖子表
字段名称 | 字段含义 | 字段类型 | 备注 |
Id | 自增主键 | Int | |
user_id | 踩的用户id | Int | |
topic_id | 帖子id | Int |
表3.9、表3.10主要是为了记录点赞、踩帖子的用户,禁止对同一个帖子重复赞或踩。
SQL语句
CREATE DATABASE learningcenter;
#查看mysql的字符集
SHOW VARIABLES LIKE 'char%';
ALTER DATABASE learningcenter CHARACTER SET utf8;
ALTER TABLE USER CHARACTER SET utf8;
SET character_set_filesystem=utf8;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
number VARCHAR(20), #学号
NAME VARCHAR(20), #姓名
classes VARCHAR(20), #班级
sex INT(1) DEFAULT 0 COMMENT '0:男 1:女',
nickname VARCHAR(20), #昵称
phone_number VARCHAR(20), #手机号
PASSWORD VARCHAR(100), #密码
signature VARCHAR(100), #个性签名
head_portrait VARCHAR(100), #头像路径
TYPE INT(1) DEFAULT 0 COMMENT '0:学生 1:老师',
is_admin INT(1) DEFAULT 0 COMMENT '0:不是 1:是', #是不是管理员
satus INT(1) DEFAULT 0 COMMENT '0:正常 1:禁用' #用户状态
) DEFAULT CHARSET=utf8 ;
CREATE TABLE book(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
NAME VARCHAR(50),
description VARCHAR(50),
TYPE VARCHAR(20),
cover_path VARCHAR(100), #图书封面路径
create_time DATETIME DEFAULT NOW(),
STATUS INT(1) DEFAULT 0 COMMENT '0:未借出 1:借出'
)DEFAULT CHARSET=utf8 ;
#借出表 user和book多对多
CREATE TABLE borrowbook(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
book_id INT,
borrow_time DATETIME DEFAULT NOW(), #借出时间
keep_time INT, #可以保存书的时间1-80天
willreturn_time DATETIME DEFAULT NOW(), #预计归还时间
realreturn_time DATETIME, #实际归还时间 如果超过多久没有归还是不是制定一个惩罚措施
UNIQUE KEY(user_id,book_id)
)DEFAULT CHARSET=utf8 ;
CREATE TABLE activity(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT, #发布人
topic VARCHAR(20),
description VARCHAR(100),
create_time DATETIME DEFAULT NOW(),
start_time DATETIME DEFAULT NOW(),
address VARCHAR(100), #地点
cost FLOAT, #预计需要几个小时
img VARCHAR(100),
total_number INT #人数限制
)DEFAULT CHARSET=utf8 ;
CREATE TABLE user_activity(
id INT PRIMARY KEY AUTO_INCREMENT,
activity_id INT, #活动
user_id INT , #参与人
UNIQUE KEY(activity_id,user_id)
)DEFAULT CHARSET=utf8 ;
CREATE TABLE materials(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT, #发布人
NAME VARCHAR(50),
description VARCHAR(50),
TYPE VARCHAR(20),
file_path VARCHAR(100),
download_num INT DEFAULT 0,
create_time DATETIME DEFAULT NOW()
)DEFAULT CHARSET=utf8 ;
CREATE TABLE topic(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT, #发表人
title VARCHAR(50),
content TEXT,
create_time DATETIME ,
update_time DATETIME ,
like_num INT DEFAULT 0, #赞
dislike_num INT DEFAULT 0 #踩
)DEFAULT CHARSET=utf8 ;
#记录点赞
CREATE TABLE recordLike(
id INT PRIMARY KEY AUTO_INCREMENT,
topic_id INT,
user_id INT #发表人
)DEFAULT CHARSET=utf8 ;
#记录踩
CREATE TABLE recordDisLike(
id INT PRIMARY KEY AUTO_INCREMENT,
topic_id INT,
user_id INT #发表人
)DEFAULT CHARSET=utf8 ;
CREATE TABLE reply(
id INT PRIMARY KEY AUTO_INCREMENT,
parent_id INT DEFAULT -1, #表示没有父亲
topic_id INT,
user_id INT, #评论人
content TEXT,
create_time DATETIME DEFAULT NOW()
)DEFAULT CHARSET=utf8 ;
转载请注明:汪明鑫的个人博客 » 毕业设计 数据库表的设计与创建
说点什么
您将是第一位评论人!