首先什么是条件。我有属于“小”群体的人。(换言之,这意味着每个人都有“小团体id”。然后“小”组形成“大”组(换句话说,“小”组可能有或没有“大”组id,这取决于小组是否属于更大的ot not)。
我想创建一个表结构(PHP将使用它)来保存和显示以下两个内容:
公共信息(意味着任何人被注册或甚至不能够看到它)。只有消息的作者才能编辑/删除。这很简单:)
私有消息,定义它的私有程度。这意味着privat emessage应该拥有属性a)小团体可以看到的内容b)大团体可以看到的内容(假设大团体的所有成员都有权看到)。
基本上,我面临的挑战是如何设计和以后使用这些私有消息的可见性。
我的第一个想法是表式的:msgID, msgBody, small_groups_list, big_group_list, authorID
所以我把它存储在'small_groups_id'
中,类似于'id_1; id_4; id_10'
等,类似于大群体。但我不知道如何在这样的存储列表中搜索,例如,属于小团体的人应该看到这个消息。还有什么应该是列small_groups_list
和big_group_list
防御/类型。
也许有更好的方法来储存和使用这些东西?
这就是我来这里的原因。对于这些要求,什么是更好的做法?
(将在mySQL上实现)
提前谢谢你。
[编辑]
我在SQL和DB方面没有经验。回答时请考虑到这一点。
最佳答案
第一:不要用“array”列对数据进行非规范化。这使得查询变得恐怖,更新变得更糟。
相反,您需要两个单独的表:small_group_visibility
和big_group_visibility
。这两个表中的每一个都由msgID
和groupID
组成。基本上,这是一种多对多的关系,它指出了群体和它所关注的信息。
这是一种非常常见的数据库模式。
要查询要显示的消息,假设我们有一个用户,其小组为(1、2、3),大组为(10、20)。
SELECT DISTINCT msgID, msgSubject, msgBody -- and so on
FROM messages m
LEFT JOIN small_group_visibility sg
ON sg.msg_id = m.msg_id
LEFT JOIN big_group_visibility bg
ON bg.msg_id = m.msg_id
WHERE
sg.group_id IN (1, 2, 3) OR
bg.group_id IN (10, 20);