概述

至此,我们已经学习了 Go Web 编程的基础知识。为了方便大家回顾,我将前面几篇文章放在下面:

接下来,我们来完成一个实战项目,编写一个简单的社交平台功能。我们的社交平台有下面几个基本功能:

  • 用户注册和登录;
  • 用户可以发布帖子,其他用户可以回复帖子;
  • 用户可以关注其他用户,登录时主页上显示自己和其他用户的帖子信息;
  • 用户可以编辑自己的个人信息和帖子内容。

今天我们先完成数据库表的设计。

数据库设计

根据上面我们列出的功能需求,可知系统中存在下面几个实体:

  • 用户;
  • 帖子;
  • 评论。

我们还需要有一张表存储用户之间的关注关系。数据库表的设计推荐两个工具,SQL Designerdbdiagram。前者比较轻量级,后者功能较为丰富,还可以根据设计导出 SQL 语句。我是使用后者进行设计:

dbdiagram 的使用比较简单,在左侧用它规定的语法定义表,以及表与表之间的外链关系,添加索引等。右侧会可视化显示表结构和关系。

用户表users字段如下:

  • id:自增id,主键;
  • username:用户名,唯一;
  • email:邮件,唯一;
  • register_at:注册时间;
  • password:密码。

usernameemail设置唯一索引,用户名和邮件都不能重复。这里注意一点,我这里表中直接存储了密码。一般在生产环境中,直接存储密码是非常不安全的,容易受到攻击。这里只是为了简化处理。

帖子表posts字段如下:

  • id:自增id,主键;
  • content:内容;
  • created_at:创建时间;
  • updated_at:更新时间;
  • user_id:作者id。

这里user_id外链到用户表users

评论表comments字段如下:

  • id:自增id,主键;
  • content:内容;
  • created_at:评论日期;
  • post_id:帖子id;
  • user_id:用户id。

这里post_id外链到帖子表postsuser_id外链到用户表users

最后一个表follows表示用户之间的关注关系,因为每个用户可以关注多个其他用户,也可以被多个其他用户关注,所以不能放在用户表users中。

然后导出social.sql

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
CREATE TABLE `users` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `username` varchar(64),
  `email` varchar(128),
  `register_at` datetime,
  `password` varchar(128)
);

CREATE TABLE `posts` (
  `id` int PRIMARY KEY,
  `content` varchar(1024),
  `created_at` datetime,
  `updated_at` datetime,
  `user_id` int
);

CREATE TABLE `comments` (
  `id` int PRIMARY KEY AUTO_INCREMENT,
  `content` varchar(256),
  `created_at` datetime,
  `post_id` int,
  `user_id` int
);

CREATE TABLE `follows` (
  `follower_id` int,
  `followed_id` int,
  PRIMARY KEY (`follower_id`, `followed_id`)
);

ALTER TABLE `posts` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

ALTER TABLE `comments` ADD FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`);

ALTER TABLE `comments` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

ALTER TABLE `follows` ADD FOREIGN KEY (`follower_id`) REFERENCES `users` (`id`);

ALTER TABLE `follows` ADD FOREIGN KEY (`followed_id`) REFERENCES `users` (`id`);

CREATE UNIQUE INDEX `users_index_0` ON `users` (`username`);

CREATE UNIQUE INDEX `users_index_1` ON `users` (`email`);

CREATE INDEX `posts_index_2` ON `posts` (`created_at`);

CREATE INDEX `comments_index_3` ON `comments` (`created_at`);

在启动命令行,切换到social.sql所在目录,连接mysql,创建数据库social,切换到该数据库,执行source social.sql,所有表就创建好了:

总结

参考

  1. SQL Designer, https://ondras.zarovi.cz/sql/demo/
  2. dbdiagram, https://dbdiagram.io/d/5e44b95c9e76504e0ef1622f

我的博客

欢迎关注我的微信公众号【GoUpUp】,共同学习,一起进步~