Sql 针对一对多/多对一情况设置的建议表格
我需要创建一个脚本,其中有人将发布一个职位空缺,任何符合条件的人都将看到该空缺,但任何没有(或选择退出)的人都不会看到该空缺。所以两个人可以在同一个页面上看到不同的内容,有些可能是相同的,有些完全不同。我不确定在MySQL DB/表中排列这些数据的最佳方式 例如,我可以通过张贴安排,但这看起来有点像:Sql 针对一对多/多对一情况设置的建议表格,sql,architecture,one-to-many,Sql,Architecture,One To Many,我需要创建一个脚本,其中有人将发布一个职位空缺,任何符合条件的人都将看到该空缺,但任何没有(或选择退出)的人都不会看到该空缺。所以两个人可以在同一个页面上看到不同的内容,有些可能是相同的,有些完全不同。我不确定在MySQL DB/表中排列这些数据的最佳方式 例如,我可以通过张贴安排,但这看起来有点像: PostID VisibleTo PostingA user1,user2 这似乎是错误的(列中的CSV样式)。或者我可以亲自去: User VisiblePosts 用户
PostID VisibleTo
PostingA user1,user2
这似乎是错误的(列中的CSV样式)。或者我可以亲自去:
User VisiblePosts
用户1发布1,发布2
但这是同样的问题。有没有一种方法可以让用户的帖子独一无二,让他们只在匹配的地方加入
这个决定最初是通过对另一组表执行一系列查询来做出的,但一旦执行了查询,当用户发布位置后代码块不会改变时,让代码块一次又一次地运行似乎效率低下
…再想一想,它可能会改变,但如果我们假设它不会改变(因为这是不可能的,如果用户看到他们不再有资格使用的东西,后果也很小),是否有一个标准解决方案用于此场景?三个表
用户:
[用户ID]
[其他字段]
职位:
[张贴]
[其他字段]
用户邮箱:
[用户ID]
[张贴]
User.UserId加入到UserPost.UserId,
Post.PostId连接到UserPost.PostId
然后查找表UserPost,当您选择要显示的帖子时加入到Post中三个表
用户:
[用户ID]
[其他字段]
职位:
[张贴]
[其他字段]
用户邮箱:
[用户ID]
[张贴]
User.UserId加入到UserPost.UserId,
Post.PostId连接到UserPost.PostId
然后查找UserPost表,当您选择要显示哪些帖子时加入Post编辑:对不起,我认为您是在用Post用户术语说话,这是多对多的。我是从发布“查看权限”的角度来考虑的,这是一对多 除非我遗漏了什么,否则这是一对多的情况,需要两张表。例如,每个帖子有n个用户可以查看。帖子对于单个用户来说是唯一的,因此您不需要做相反的事情
- 带有PostingID的PostingTable(和其他数据)
- 具有PostingID和UserID的PostingVisibilityTable
- 具有用户ID和用户数据的UserTable
SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"
编辑:对不起,我认为你是在发表用户术语,这是多对多。我是从发布“查看权限”的角度来考虑的,这是一对多 除非我遗漏了什么,否则这是一对多的情况,需要两张表。例如,每个帖子有n个用户可以查看。帖子对于单个用户来说是唯一的,因此您不需要做相反的事情
- 带有PostingID的PostingTable(和其他数据)
- 具有PostingID和UserID的PostingVisibilityTable
- 具有用户ID和用户数据的UserTable
SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"
这是一个多对多关系或n:m关系
您将创建一个附加表,例如
PostVisibility
,其中包含一列PostID
和UserID
。如果表中存在PostID
和UserID
的组合,则该用户可以看到该post。这是一种多对多关系或n:m关系
您将创建一个附加表,例如
PostVisibility
,其中包含一列PostID
和UserID
。如果表中存在PostID
和UserID
的组合,则该帖子对该用户可见。因此,在这种情况下,如果一个用户有3篇可见的帖子,且其中每篇帖子对2个用户可见,则UserID列将列出该用户3次,他的三篇文章会在postID栏中出现6次?还是我遗漏了这个概念的一部分?@Anthony,没错。您还应该使PostID/UserID唯一,因为用户不能“两次”访问同一帖子。因此,在这种情况下,如果一个用户有3篇可见的帖子,并且其中的每篇帖子都对2个用户可见,UserID列将列出该用户3次,他的3篇帖子将在PostID列中显示6次?还是我遗漏了这个概念的一部分?@Anthony,没错。您还应该使PostID/UserID唯一,因为用户不能“两次”访问同一篇文章。