Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 针对一对多/多对一情况设置的建议表格_Sql_Architecture_One To Many - Fatal编程技术网

Sql 针对一对多/多对一情况设置的建议表格

Sql 针对一对多/多对一情况设置的建议表格,sql,architecture,one-to-many,Sql,Architecture,One To Many,我需要创建一个脚本,其中有人将发布一个职位空缺,任何符合条件的人都将看到该空缺,但任何没有(或选择退出)的人都不会看到该空缺。所以两个人可以在同一个页面上看到不同的内容,有些可能是相同的,有些完全不同。我不确定在MySQL DB/表中排列这些数据的最佳方式 例如,我可以通过张贴安排,但这看起来有点像: PostID VisibleTo PostingA user1,user2 这似乎是错误的(列中的CSV样式)。或者我可以亲自去: User VisiblePosts 用户

我需要创建一个脚本,其中有人将发布一个职位空缺,任何符合条件的人都将看到该空缺,但任何没有(或选择退出)的人都不会看到该空缺。所以两个人可以在同一个页面上看到不同的内容,有些可能是相同的,有些完全不同。我不确定在MySQL DB/表中排列这些数据的最佳方式

例如,我可以通过张贴安排,但这看起来有点像:

  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

独立于其可见性权限创建帖子,然后针对可见性表单独添加/删除PostingID/UserID对

要选择当前用户可见的所有帖子,请执行以下操作:

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

独立于其可见性权限创建帖子,然后针对可见性表单独添加/删除PostingID/UserID对

要选择当前用户可见的所有帖子,请执行以下操作:

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唯一,因为用户不能“两次”访问同一篇文章。