为用户建立隐私设置

时间:2019-03-01 21:57:46

标签: database database-design architecture

您将如何针对每个用户设计隐私设置?

例如,我想让我的电子邮件仅显示在可以向所有人和我的电话号码显示的别名的连接中对所有人隐藏。

我正在考虑建立该表并将其连接到我的用户表中:

--------------------------------------------------
| Column            | Data Type                  |
--------------------------------------------------
| id (primary key)  | uuid                       |
--------------------------------------------------
| user_id           | uuid (with index)          |
--------------------------------------------------
| email_visibility  | enum [none, known, all]    |
--------------------------------------------------
| phone_visibility  | enum [none, known, all]    |
--------------------------------------------------
| alias_visibility  | enum [none, known, all]    |
--------------------------------------------------

要注意的是表演。如果我想使用/users之类的路线来获取所有用户,则该路线现在来自:

// Before
SELECT * 
FROM users 
WHERE "I know this person"

要复杂得多

// After
SELECT *
FROM users 
JOIN user_privacies
ON users.id = user_privacies.user_id
WHERE "I know this person"

// Delete all the extra data
1. Loop through all the users and scan their privacy setting
2a. If user does not want to show email, delete email
2b. If user does not want to show phone, delete phone
2c. If user does not want to show alias, delete alias

这似乎是一种很简单的构建方法,但是我认为这不是一个可扩展的过程。任何有关类似架构的建议或文章,将不胜感激!

1 个答案:

答案 0 :(得分:0)

正如您所说,这很简单,但我认为问题在于您如何列出用户。

通常,您只列出不需要太多处理的数据,并使单个项目页面的处理工作变得繁重。您应该考虑以下事实:您实际上需要执行多少过程,而用户将实际使用它。

即使您必须以这种方式进行操作,我也不认为这是一个太大的问题。您可以使用分页将数据简单地分割成小块,然后我不认为for循环即使对于50个具有3 if的用户来说也是如此。特别是如果渲染是在服务器端。

您可以编写一些更复杂的查询以及一些可以优化性能的代码,但是仍然可以一次处理少量数据。

通常,数据库的设计方式很大程度上取决于应用程序将如何使用数据。设计一个好的模式,您不应该只考虑数据库。