推荐表格设置为一对多/多对一的情况

时间:2009-05-28 00:08:59

标签: sql architecture one-to-many

我需要创建一个脚本,其中有人会发布一个职位的开头,任何有资格的人都会看到开场,但任何不(或选择退出)的人都不会看到开场。因此,两个人可以访问同一页面,看到不同的内容,一些可能相同,一些完全独特。我不确定在MySQL数据库/表中安排数据的最佳方法。

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

  PostID   VisibleTo
 PostingA    user1,user2

这似乎不对(列中的CSV样式)。或者我可以和人一起去:

User   VisiblePosts

user1 posts1,posting2

但这是同样的问题。有没有办法让用户的唯一性,发布独特,并让他们只在匹配的地方加入?

最初的决定是通过对另一组表进行一系列查询来做出的,但是一旦运行了,在用户发布后不会发生变化的情况下,让一些代码块一次又一次地运行似乎效率低下这个职位。

......第二个想法,它可能会改变,但是如果我们认为它没有(因为它不太可能,并且如果用户看到他们不再符合条件的东西那么重要),是否有标准这种情况的解决方案?

3 个答案:

答案 0 :(得分:2)

三张桌子......

用户: [用户身份] [OtherField]

发表: [帖子ID] [OtherFields]

UserPost: [用户身份] [帖子ID]

User.UserId加入UserPost.UserId, Post.PostId加入UserPost.PostId

然后查看表UserPost,当您选择要显示的帖子

时加入Post

答案 1 :(得分:1)

这是多对多关系或n:m关系。

您可以使用列PostVisibilityPostID创建一个额外的表格,例如UserID。如果表格中包含PostIDUserID的组合,则该帖子对该用户可见。

答案 2 :(得分:0)

编辑:抱歉,我认为您是在发帖 - 用户条款中发言,这是多对多的。我在发布“观看权利”这一术语方面正在考虑这个问题,这是一对多的。

除非我遗漏了某些东西,否则这是一对多的情况,需要两张桌子。例如,每个帖子都有n个用户可以查看它。发布对于个人用户是唯一的,因此您无需反向。

  • PostingTable with PostingID(和其他数据)

  • PostingVisibilityTable with PostingID和UserID

  • 具有UserID和用户数据的UserTable

创建与其可见权限无关的帖子,然后针对可见性表单独添加/删除PostingID / UserID对。

选择当前用户可见的所有帖子:

SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"