状态-使用哪种数据类型?

jdzmm42g  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(825)

我目前正在研究我所编写的代码,并试图提高其可读性和质量。下面是一个我如何处理一个简单问题的例子,我一直觉得这是一个糟糕的解决方案。
在本例中,具有以下“状态”或标高的用户表
雇员
监督人
管理员
(这些可以是任何东西,例如,项目可以具有“未完成”、“暂停”和“完成”状态)
在过去,我总是将其存储为int值,然后在打印出帐户及其状态时,我将编写一个函数将其转换回文本,以便打印在页面上,例如。 if userLevel === 3 { return "Admin"; }; 这一直感觉是一个糟糕的解决方案,它不是很灵活。添加任何新类型的帐户都需要更新该功能。这种格式也使得阅读页面限制变得非常困难。
如果我加上一行: if userLevel !== 2 OR 3 { // Redirect to error page }; 你可以看到这会让人困惑。
最近我开始将这些“状态”存储为一个字符串,这样就更容易阅读了。但是现在我对laravel有了更多的了解,我想知道是否应该有额外的数据库表专门用于此。
所以我的问题是-什么是适合这种数据的数据类型,什么是与之交互的理想方式?

ddarikpa

ddarikpa1#

在遗留代码中,我会使用常量,基本上bit并不真正关心其中的数据类型。它是可读的,您可以很容易地找到用法和您的ide可以帮助您。
在有大量业务逻辑的新代码中,可以创建一个表示状态的小类,以便将逻辑放在那里。
在db中,您可以找到几篇文章说enum不是一个好主意。如果您想优化很多,tinyint可以帮助您,但是使用短字符串也很好(我通常使用它)。然后您应该在phpofc中翻译它,我推荐上面描述的对象方法。

bvn4nwqk

bvn4nwqk2#

这可能适合也可能不适合您的特定应用程序,但我经常发现按位操作非常方便 0 or more 单个整数中的属性。
e、 g.假设您指定以下内容:

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

现在要为 $status 这是一个位 or 具有适当的值。
所以,主管既是 employee 以及 supervisor 所以它们的整数值为 2|4 = 0b010 | 0b100 = 0b110 = 6 .
现在,当您想查看用户是否有 status ,只是掩饰一下:

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

你当然可以有更多 statuses 在单个整数或int数据库列中。

相关问题