"正确的"组织被禁用户的方式?
我是否应该在名为users
的现有is_banned
表中添加一个新列作为布尔值,或者我应该创建一个名为banned_users
的新表,该表充当数据透视表user_id
?
同样的问题适用于管理员。我应该为网站管理员创建一个新表,还是只创建一个名为is_admin
的新列?
这两个选项的表现怎么样?
感谢。
答案 0 :(得分:3)
下一类用户会发生什么 - 添加另一张桌子?最好不要。
您可以添加一个名为type
的新列或类似的内容。一种方法是它包含一个表示类型
1 = normal user
2 = admin
3 = banned
或者您甚至可以添加另一个名为user_types
的表来引用它,但只有在类型随时间变化时才需要。
如果您需要组合类型 - 一次拥有多种类型的用户,那么您可以将该列设为一个字段。
当这些不同的用户具有不同的属性,并且每种类型的用户的表格会有所不同。
答案 1 :(得分:2)
满足多种标准的可扩展解决方案将是:
users
roles
user2roles
您将用户数据与其在应用中的实际角色分开 - 每个用户至少都有姓名和姓名,这些与他们的权限或角色无关。
您很可能需要添加更多角色。例如,一个角色是admin
。另一个角色是被禁止的。另一个角色可以被禁止一周,两周等 - 基本上你可以随时添加这些角色,而无需改变你的表来支持未来的功能。
您的应用程序(php,python,等等)收集数据,然后对这些角色采取行动。
现在你已经建立了一个已建立关系的系统,你可以扩展,并且幼稚园的孩子们可以轻松理解。
这是一个将权限与角色混合的简化系统,您可以进一步扩展它,但IMO最好保持简单。
答案 2 :(得分:1)
您需要考虑禁止概念在现实世界中的表现。你想要一面旗帜吗?什么时候他们被禁止和谁?过去禁止历史?被禁止的回应机制?投诉列表,包含用户/日期/原因?
数据模型是系统发展过程中最困难的部分,因此您需要考虑各种可能的未来,甚至是您尚未在路线图中使用的内容。
为了提高效率,您可能会决定要使用禁止表和禁止列。但是也要付出代价,因为你现在正在多个地方捕捉到相同的事实。
问题很微妙,有时很复杂。不要接受一揽子通用的答案。