Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

数据表的设计 #52

Open
taikulawo opened this issue Oct 21, 2020 · 0 comments
Open

数据表的设计 #52

taikulawo opened this issue Oct 21, 2020 · 0 comments

Comments

@taikulawo
Copy link
Collaborator

比如我们有个表(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 多表联查,这就是关系数据库。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant