【问题标题】:Recommended Table Set up for one to many/many to one situation针对一对多/多对一情况的推荐表设置
【发布时间】:2009-05-28 00:08:58
【问题描述】:

我需要创建一个脚本,让某人发布职位空缺,任何有资格的人都会看到空缺,但任何不符合条件(或选择退出)的人都不会看到空缺。因此,两个人可以访问同一个页面并看到不同的内容,有些可能相同,有些则完全不同。我不确定在 MySQL 数据库/表中排列数据的最佳方式。

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

  PostID   VisibleTo
 PostingA    user1,user2

这似乎是错误的(列中的 CSV 样式)。或者我可以一个人去:

User   VisiblePosts

用户 1 发帖 1,发帖 2

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

该决定最初是通过对另一组表进行一系列查询来做出的,但是一旦运行,在用户发布后它不会更改的某些代码块一次又一次地运行似乎效率低下位置。

...再想一想,它可能会改变,但如果我们假设它不会改变(因为它不太可能,而且如果用户看到他们不再有资格的东西,后果也很小),是否有一个标准这种情况的解决方案?

【问题讨论】:

    标签: sql architecture one-to-many


    【解决方案1】:

    三个表...

    用户: [用户身份] [其他领域]

    帖子: [邮政编号] [其他领域]

    用户帖子: [用户身份] [邮政编号]

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

    然后查找表格 UserPost,当您选择要显示的帖子时加入 Post

    【讨论】:

      【解决方案2】:

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

      您将创建一个附加表,例如 PostVisibility,其中包含 PostIDUserID 列。如果PostIDUserID 的组合出现在表格中,则该用户可以看到该帖子。

      【讨论】:

      • 所以在这种情况下,如果一个用户有 3 个帖子是可见的,并且每个帖子对 2 个用户可见,那么 userID 列会将该用户列出 3 次,他的三个帖子将在 postID 列中出现 6 次?还是我遗漏了部分概念?
      • @Anthony,正确。您还应该使 PostID/UserID 唯一,因为用户不能“两次”访问同一个帖子。
      【解决方案3】:

      编辑:抱歉,我认为您是在使用发布用户术语,即多对多。我是从发布“观看权”条款的角度来考虑这一点的,这是一对多的。

      除非我遗漏了什么,否则这是一对多的情况,需要两张表。例如,每个帖子都有 n 个可以查看的用户。帖子对单个用户来说是唯一的,所以你不需要做相反的事情。

      • 带有 PostingID(和其他数据)的 PostingTable

      • 带有 PostingID 和 UserID 的 PostingVisibilityTable

      • 带有用户 ID 和用户数据的用户表

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-26
        • 1970-01-01
        • 2011-11-09
        • 2020-02-19
        相关资源
        最近更新 更多