Mysql 表格设计建议

Mysql 表格设计建议,mysql,sql,Mysql,Sql,我有一个表用户: user_id - name 这些用户可以创建一篇文章,然后与其他成员共享,表文章: article_id - user_id - article_name 问题是分享它的最好方式。。。我想另一个表格文章分享: share_id - article_id - user_id 这将简单地列出所有有权访问该aerticle的用户,创建者将有权从该表中添加或删除他们创建的文章 因此,当文章创建者(用户_id 123)查看他的文章时,他可以看到与他共享每篇文章的所有其他用户的列表

我有一个表用户:

user_id - name
这些用户可以创建一篇文章,然后与其他成员共享,表文章:

article_id - user_id - article_name
问题是分享它的最好方式。。。我想另一个表格文章分享:

share_id - article_id - user_id
这将简单地列出所有有权访问该aerticle的用户,创建者将有权从该表中添加或删除他们创建的文章

因此,当文章创建者(用户_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'
这看起来合乎逻辑吗?我走对了吗


谢谢你的帮助

你做对了。如果你很好奇,你已经做出了一个决定,在
用户
文章
之间建立多对多关系,这是相当标准的

您经常会看到这些类型的表,它们的名称类似于
ArticlesToUsers
或类似的名称,这有时是提示您正在查看连接表的第一种方法。当然,命名方案非常主观,因此不必更改名称<代码>文章共享对我来说似乎是一个很好的描述


正如@MaxVT所演示的,您会发现许多开发人员不会在这样的连接表上放置一个,而宁愿将这两个列都用作主键(article\u id,user\u id)。选择显然是你自己的,可能与保持与其他数据库表的一致性有关,尽管你肯定会看到所有的排列。如果您确实保留了代理密钥,我建议您使用
article\u id,user\u id
的唯一约束,以消除重复项(为什么一篇文章需要共享给用户两次?)。

是的,我觉得可以。您需要一些方法将共享文章与能够看到它们的用户关联起来,我想不出一个更简单的方法。@Jay谢谢,两天前才自学了加入,所以感谢您抽出时间来看一看!你在正确的轨道上。一旦你习惯了使用JOIN,以及它的所有形式(内部、左侧等),你可能会觉得没有什么是你做不到的!:)我唯一的问题是为什么在文章共享中需要共享id。@MaxVT我总是为我创建的任何表创建一个id-只是习惯我猜谢谢Tim,感谢你的建议!