0%

数据表的设计

比如我们有个表(UserLiked)记录用户喜欢的 workspace 内容,且一个用户可以喜欢多个 workspace

前端的 UI 展现是用户点击 like 界面显示出用户全部喜欢的 workspace

现在有下面两种表结构,你觉着哪种不错?

注意,MYSQL并不支持Array类型,这里只是比较表设计。

Mongodb支持Array,文档数据库表结构灵活,不要滥用Array,不要过早优化

A 表

ID UserID LikedIds
int int Array<int>

又或者 B 表

ID UserID workspaceID
int int int,外健

A 表可以保证只存在唯一一个 UserId,这时 UserID 可以作为主键

B 表 UserID 可以存在多个,UserID, workspaceID 共同作为主键

为了拿到更细度的 workspace 数据两个数据表都需要 Join 联查

你真的需要存储数组吗?

https://stackoverflow.com/questions/17371639/how-to-store-arrays-in-mysql

https://stackoverflow.com/a/17371788/7529562
上文 A 表结构要通过数组实现,但 MYSQL 并不支持数组,为什么不支持?

设想我们还有一张记录用户全部的手机号 UserPhones 表。按照 UserLiked 的设计我们会在 User 表中添加 Phones 数组,现在表成了这样

UserID Phones Liked
int Array<int> Array<int>

那如果今后还有相似的需求呢?难道总是通过加数组解决吗?

最好的解决办法是像 B 表,将两张表分裂成三张表

User 表只存储用户信息, Phone 表只存储手机号码信息,如果两表有关联应使用新的表记录两者的关联,并通过 JOIN 多表联查,这就是关系数据库。