gpt4 book ai didi

mysql - 存储具有特定查看权限的用户之间的关系

转载 作者:行者123 更新时间:2023-11-29 05:35:10 25 4
gpt4 key购买 nike

我正在为 MySQL 设计一个数据库,以在应用程序的两个用户之间创建关系。我不确定存储这种关系细节的最佳方式,尽管我目前打算在名为 RELATIONS 的链接表中为每个关系使用一个记录。每个用户都有基本的数据,比如他们的姓名和职业存储在 USERS 表中,更具体的个人数据存储在其他表中,我们称之为 OTHER1、OTHER2 和 OTHER3,它们都包含一些其他数据要共享,我们将在一个名为 [Data] 的字段中说出每个,并用 ID 和 USER_ID 标识。

困难在于应用程序允许用户指定他们向每个用户显示哪些基本和高级数据,反之亦然。 RELATIONS 链接表需要 FK 到 USERS 以便两个用户建立关系,但我不知道如何最好地指定每个用户能够共享哪些数据,因为数据库存储的几乎所有数据都是可选择存储,但所有这些都可能需要对无权查看它的用户隐藏。但是,第二个用户应该能够看到那里是否有数据,以便他可以请求查看数据的权限。

此时我的 RELATIONS 模型如下所示:

关系

ID
USER_ID1
USER_ID2
USER1OTHER1_ID [(Value), Unshared, Null]
...
USER1OTHER100_ID [(Value), Unshared, Null]
USER2OTHER1_ID [(Value), Unshared, Null]
...
USER2OTHER100_ID [(Value), Unshared, Null]

因此,如果 User1 已与 User2 共享,USER1OTHER1_ID 将包含对 OTHER1 的 FK,如果存在但未共享,则为“Unshared”,如果 User1 在 OTHER1 中没有数据,则为 Null。与 User1 共享的 USER2OTHER1 相同。不过,我不喜欢拥有庞大的字段数组,而且我不喜欢如果 User1 稍后决定将数据添加到 OTHER1,我必须更新所有关系。有没有一种更简单、更规范化的表示方式?

最佳答案

我认为规范化的方法是只存储用户 A 是否有权查看用户 B 的数据,而不是在 Relations 表中添加 FK 引用,因为您已经在其他地方引用了用户 B 的数据。通过在 Relations 表中存储额外的引用,您正在复制数据,并且必须确保它像您在问题中描述的那样保持同步,这可能是一个持续的维护麻烦,并且在重构代码时您还必须牢记一件事.

如果您只在关系表中存储权限(没有 fks),您将加入表(用户?)以获取用户的共享数据或根据权限查看它是否存在。

就关系表上的列数过多而言,我认为您在查询表时不会看到真正的退化(您可以就此纠正我)。为了数据库代码和您的应用程序代码的清晰起见,我认为您最好为每个权限设置一列,而不是尝试找到捷径,例如将它们组合成一个 clob 或其他东西。

关于mysql - 存储具有特定查看权限的用户之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377537/

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