禁止的用户单独的表



组织被禁用户的"正确"方式是什么?

我应该简单地在现有的users表中添加一个名为is_banned的新列作为布尔值,还是应该创建一个名为banned_users的新表,作为user_id的数据透视表?

同样的问题也适用于管理员。我应该为站点管理员创建一个新表,还是只创建一个名为is_admin的新列?

两个选项的性能如何?

谢谢。

下一种类型的用户-添加另一个表会发生什么?最好不要。

你可以添加一个新的列叫做type或者类似的东西。一种方法是包含一个数字,表示类型,如

1 = normal user
2 = admin
3 = banned

或者您甚至可以添加另一个名为user_types的表来引用它,但只有当类型随时间变化时才需要这样做。

如果您需要组合类型—用户同时拥有多个类型,那么您可以将列设置为位字段。

您什么时候需要单独的桌子?

当这些不同的用户将具有不同的属性并且每种类型的用户的表将不同时

您需要考虑禁止概念将如何在现实世界中发挥作用。你只是想要一面旗帜吗?那它们是什么时候被谁禁止的呢?过去的禁赛历史?对被禁者的反应机制?投诉列表,注明用户/日期/原因?

数据模型是系统中最难发展的部分,所以你要考虑所有可能的未来,甚至是你还没有在路线图上的东西。

为了提高效率,您可能决定要一个禁止表和一个禁止列。但这也是要付出代价的,因为你现在在多个地方捕捉到同样的事实。

这些问题很微妙,有时甚至很复杂。不要接受千篇一律的答案。

满足多种标准的可伸缩解决方案是这样的:

    包含用户数据的
  • users
  • 包含角色的表- roles
  • 连接表,user2roles

你把用户数据和他们在应用中的实际角色分开——每个用户至少有名字和姓,这些和他们的权限或角色无关。

您很可能需要添加更多角色。例如,其中一个角色是admin。另一个角色被禁止了。另一个角色可以被封禁一周、两周等——基本上你可以随时添加,而不需要修改你的表来支持未来的功能。

你的应用程序(php, python,等等)收集数据,然后对这些角色进行操作。

现在你有了一个建立关系的系统,你可以扩展它,它很容易被幼儿园的孩子理解。

这是一个简单的系统,混合了权限和角色,你可以进一步扩展它,但在我看来,最好保持简单。

相关内容

最新更新