禁止用户的单独表格?

时间:2015-07-20 21:33:16

标签: mysql sql

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

我是否应该在名为users的现有is_banned表中添加一个新列作为布尔值,或者我应该创建一个名为banned_users的新表,该表充当数据透视表user_id

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

这两个选项的表现怎么样?

感谢。

3 个答案:

答案 0 :(得分:3)

下一类用户会发生什么 - 添加另一张桌子?最好不要。

您可以添加一个名为type的新列或类似的内容。一种方法是它包含一个表示类型

的数字
1 = normal user
2 = admin
3 = banned

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

如果您需要组合类型 - 一次拥有多种类型的用户,那么您可以将该列设为一个字段。

您何时需要单独的表格?

当这些不同的用户具有不同的属性,并且每种类型的用户的表格会有所不同。

答案 1 :(得分:2)

满足多种标准的可扩展解决方案将是:

  • 包含用户数据的表users
  • 包含角色的表格 - roles
  • 连接两个user2roles
  • 的联结表

您将用户数据与其在应用中的实际角色分开 - 每个用户至少都有姓名和姓名,这些与他们的权限或角色无关。

您很可能需要添加更多角色。例如,一个角色是admin。另一个角色是被禁止的。另一个角色可以被禁止一周,两周等 - 基本上你可以随时添加这些角色,而无需改变你的表来支持未来的功能。

您的应用程序(php,python,等等)收集数据,然后对这些角色采取行动。

现在你已经建立了一个已建立关系的系统,你可以扩展,并且幼稚园的孩子们可以轻松理解。

这是一个将权限与角色混合的简化系统,您可以进一步扩展它,但IMO最好保持简单。

答案 2 :(得分:1)

您需要考虑禁止概念在现实世界中的表现。你想要一面旗帜吗?什么时候他们被禁止和谁?过去禁止历史?被禁止的回应机制?投诉列表,包含用户/日期/原因?

数据模型是系统发展过程中最困难的部分,因此您需要考虑各种可能的未来,甚至是您尚未在路线图中使用的内容。

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

问题很微妙,有时很复杂。不要接受一揽子通用的答案。