gpt4 book ai didi

mysql - 表格设计建议

转载 作者:可可西里 更新时间:2023-11-01 06:38:37 24 4
gpt4 key购买 nike

我有一个用户表:

user_id - name

并且那些用户可以创建一篇文章,然后与其他成员分享,表格文章:

article_id - user_id - article_name

提问是最好的分享方式...我在想另外一张表article_shares:

share_id - article_id - user_id

这将简单地列出有权访问该文章的所有用户,并且创建者将有权在该表中添加或删除他们创建的文章

因此,当文章创建者 (user_id 123) 查看他的文章时,他可以看到他分享每篇文章的所有其他用户的列表

select as.user_id, a.article_name from article_shares as
join users u on u.user_id = as.user_id
join articles a on a.article_id = as.article_id where u.user_id = '123'

和一个用户(user_id 456)可以看到他们分享的文章列表

select a.article_name from articles a
join article_shares as on as.article_id = a.article_id
where as.user_id = '456'

这看起来合乎逻辑吗?我走在正确的轨道上吗?

感谢您的帮助

最佳答案

你说得对。如果你很好奇,你已经做了一个 junction tableusersarticles 之间创建多对多关系,这是相当标准的。

您经常会看到这些类型的表被命名为 ArticlesToUsers 或类似的名称,这有时会是第一种提示您正在查看联结表的方式。当然,命名方案是相当主观的,所以不要觉得有必要更改名称。 article_shares 对我来说似乎是一个很好的描述。

正如@MaxVT 所展示的那样,您会发现许多开发人员不会将 surrogate key在这样的联结表上,并且宁愿只使用两列作为主键(article_id,user_id)。选择显然是您的选择,并且可能与与其余数据库表保持一致有更多关系,尽管您肯定会看到所有自然排列。如果您确实保留了代理键,我建议您使用 article_id, user_id 的唯一约束来消除重复项(为什么一篇文章需要与用户共享两次?)。

关于mysql - 表格设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com