我正在为 MySQL 设计一个数据库,以在应用程序的两个用户之间创建关系。我不确定存储这种关系细节的最佳方式,尽管我目前打算在名为 RELATIONS 的链接表中为每个关系使用一条记录。每个用户都有他们的姓名和职业等基本数据存储在 USERS 表中,以及通过 FK 链接存储在其他表中的更具体的个人数据,我们将其称为 OTHER1、OTHER2 和 OTHER3,它们都将包含一些其他数据要共享,我们将在名为 [Data] 的字段中说每个,并用 ID 和 USER_ID 标识。
困难在于该应用程序允许用户指定他们向每个用户显示的基本数据和高级数据,反之亦然。RELATIONS 链接表需要有 FK 到 USERS 才能让两个用户建立关系,但我不知道如何最好地指定每个用户能够共享哪些数据,因为数据库存储的几乎所有数据都是可选存储,但可能需要对无权查看它的用户隐藏所有内容。但是,第二个用户应该能够查看那里是否有数据,以便他可以请求查看数据的权限。
此时我的关系模型如下所示:
关系
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,如果存在但未共享,则为“未共享”,如果 User1 在 OTHER1 中没有数据,则为 Null。与用户 1 共享的 USER2OTHER1 相同。不过,我不喜欢拥有庞大的字段数组,而且如果 User1 稍后决定将数据添加到 OTHER1,我不喜欢我必须如何更新所有关系。有没有一种更简单、更规范的方式来表示这一点?