针对一对多/多对一情况设置的推荐表
-
06-09-2019 - |
题
我需要创建一个脚本,其中有人会发布职位空缺,任何符合条件的人都会看到该空缺,但任何不符合条件(或选择退出)的人都不会看到该空缺。因此,两个人可以访问同一页面并看到不同的内容,有些内容可能相同,有些则完全独特。我不确定在 MySQL 数据库/表中安排这些数据的最佳方法。
例如,我可以通过发布来安排它,但这看起来有点像:
PostID VisibleTo
PostingA user1,user2
这似乎是错误的(列中的 CSV 样式)。或者我可以亲自去:
User VisiblePosts
用户1 发帖1, 发帖2
但这是同样的问题。有没有办法让用户独一无二,发帖独一无二,并且让他们只在匹配的地方加入?
该决定最初是通过对另一组表进行一系列查询来做出的,但是一旦运行,当某些代码块在用户发布职位后不会发生变化时,再次运行该代码块似乎效率很低。
...再想一想,它可能会改变,但如果我们假设它不会改变(因为它不太可能,并且如果用户看到他们不再有资格获得的东西,后果也很小),是否有一个标准的解决方案设想?
解决方案
这是一个多到多的关系或N:米关系
您将创建一个额外的表,说PostVisibility
,与一列PostID
和UserID
。如果PostID
和UserID
的组合存在于所述表中,交是到该用户可见。
其他提示
三个表...
用户: [用户身份] [OtherField]
发表: [帖子ID] [OtherFields]
UserPost: [用户身份] [帖子ID]
User.UserId加入到UserPost.UserId, Post.PostId加入到UserPost.PostId
然后查表UserPost,加入到后,当您选择显示哪个帖子
编辑:抱歉,我认为您用的是“发布用户”术语,即多对多。我从发布“观看权”术语的角度来考虑这一点,这是一对多的。
除非我遗漏了什么,否则这是一对多的情况,需要两个表。例如,每个帖子都有 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"