gpt4 book ai didi

mysql - SQL:寻求有关表结构等的建议

转载 作者:行者123 更新时间:2023-11-29 06:40:41 24 4
gpt4 key购买 nike

首先是什么条件。我有属于“小”组的人。 (换句话说,每个人都有“small_group_id”。然后“小”组形成“大”组(换句话说,“small_groups”可能有或没有“big_group_id”,这取决于小组是否属于更大的组)。

我想创建一个表结构(将由 PHP 使用)来保存和显示以下两件事:

  • 公开消息(意味着注册的人甚至没有注册的人都可以看到)。只有消息的作者可以编辑/删除。这是简单的部分:)
  • 私有(private)消息 WITH 定义它的私有(private)程度。这意味着私有(private)消息应该具有属性 a) 哪些小团体可以看到它 b) 哪些大团体可以看到它(假设大团体的所有成员都有权看到它)。

基本上,对我来说,挑战是如何设计和处理这些私有(private)消息的可见性。我的第一个表是这样的:msgID, msgBody, small_groups_list, big_group_list, authorID 所以我存储例如在 'small_groups_id' 中类似于 'id_1; id_4; id_10' 等,大组类似。但是后来我不确定如何搜索这些存储的列表,例如属于 small_group_id = 10 的人应该会看到该消息。此外,small_groups_listbig_group_list 防御/类型列应该是什么。

也许有更好的方法来存储和使用这些东西?这就是我来这里的原因。满足此类要求的更好做法是什么?

(即将在mySQL上实现)

提前谢谢你。

[编辑]我对 SQL 和 DB 方面的经验还很缺乏。请在回答时考虑到这一点。

最佳答案

首先:不要使用“数组”列对数据进行反规范化。这使得查询变得很恐怖,更糟更新。

相反,您需要两个单独的表:small_group_visibilitybig_group_visibility。这两个表中的每一个都将包含 msgIDgroupID。基本上,这是一种多对多关系,指向组和它所关注的消息。

这是一种非常常见的数据库模式。

要查询要显示的消息,假设我们有一个用户,其小组是 (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);

关于mysql - SQL:寻求有关表结构等的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21769396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com