首页 > 解决方案 > 状态 - 使用哪种数据类型?

问题描述

我目前正在查看我生成的代码,并试图提高其可读性和质量。这是我如何处理一个简单问题的示例,我一直认为这是一个糟糕的解决方案。

具有以下“状态”的用户表,或此示例中的海拔级别

  1. 员工
  2. 导师
  3. 行政

(这些可以是任何东西,例如,一个项目可能具有“未完成”、“搁置”和“完成”状态)

过去,我总是将其存储为 INT 值,然后在打印出帐户及其状态时,我将编写一个函数将其转换回文本,以打印在页面上,例如

if userLevel === 3 { return "Admin"; };

这一直感觉是一个糟糕的解决方案,而且它不是很灵活。添加任何新类型的帐户都需要更新该功能。这种格式也使得阅读页面限制变得非常困难。

如果我要添加该行:

if userLevel !== 2 OR 3 { // Redirect to error page };

您可以看到这会如何变得令人困惑。

最近我开始将这些“状态”纯粹存储为一个字符串,这样它更具可读性。但是现在我对 Laravel 有了更多的了解,我想知道我是否应该有额外的数据库表专门用于这个。

所以我的问题 - 这种数据的合适数据类型是什么,与之交互的理想方式是什么?

标签: phpmysql

解决方案


这可能适合也可能不适合您的特定应用程序,但我经常发现按位运算便于0 or more在单个整数中包含属性。

例如,假设您分配了以下内容:

$admin = 0b1; //(1)
$employee = 0b10; //(2)
$supervisor = 0b100; //(4)

现在您要为其分配一个整数值,$status它是适当值的按位or

所以,主管是两者employeesupervisor所以他们将有一个整数值

2|4 = 0b010 | 0b100 = 0b110 = 6.

现在,当您想查看用户是否有status时,只需屏蔽以下内容:

if(($statusInt & $supervisor) != 0){
    // it is a supervisor...  //maybe more, at least supervisor
}

您当然可以通过statuses这种方式在单个整数或 INT 数据库列中包含更多内容。


推荐阅读