首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql枚举中放置值的最佳实践

问在sql枚举中放置值的最佳实践
EN

Stack Overflow用户
提问于 2017-09-24 09:57:05
回答 2查看 1.9K关注 0票数 1

我的mysql表中有两个枚举列:

代码语言:javascript
复制
gender enum('male', 'female') not null,
user_type enum('hr', 'manager', 'qa') not null

我的一位同事坚持认为,在所有枚举值中使用小写不是一个好主意,因为在页面中它看起来不太好。例如,

// profile.php

用户类型:人力资源(代表人力资源)

代码语言:javascript
复制
 Gender: male

应:

// profile.php

用户类型: HR

性别:男性

忽略大小写的主要原因是我会多次比较这些列上的值。例如:

代码语言:javascript
复制
if (user_type == "hr")

这将是非常恼人的,如果我有错误只是因为情况错配。那性别专栏呢?上面的情况真的很好吗?

我认为UI端可以将其大写如下:

代码语言:javascript
复制
<?php echo strtoupper($userType) ?>

我对sql不太熟悉,所以我想问一问:是否有关于枚举值的大小写约定的最佳实践?注意,我说的不是命名枚举列。

EN

回答 2

Stack Overflow用户

发布于 2017-09-24 10:44:06

如果您询问的是最佳实践,那么是。您应该在大写中使用ENUM值。因为它们是常量。

和,AFAIK,在所有编程语言中,常量声明为大写。

票数 3
EN

Stack Overflow用户

发布于 2017-09-24 12:11:29

根据我的经验,在我使用的所有语言中,无论是在文档中还是在语言所提供的库中定义的枚举中,枚举都不是用大写或小写写成的,而是使用了骆驼大小写的一些变体,比如Small, Medium, Big或szSmall, szMedium, szBig。下面是一些例子:

当然,在所有这些示例中,枚举值不是字符串,它们有一个名称和一个值,因此您在比较和输出方面没有问题(因为您将输出它的值,而不是它的名称)。

因为在MySQL中,值也是名称,如果您对任何输出使用枚举的值,则应该使用在该输出中更有意义的情况(如果该列是常规的CHAR列,则使用相同的情况),例如'HR','Management','QA'。正如注释中所指出的,默认排序规则应该已经不区分大小写,因此在比较或联接方面没有问题。

在PHP中,您可以使用strcasecmp(),或者如果出于任何原因不喜欢它,则可以使用strtolower()/strtoupper()。

代码语言:javascript
复制
if (strcasecmp(user_type,"hr")==0) // best options IMO
if (strcasecmp(user_type,"HR")==0) // best options IMO
if (strtolower(user_type)=="hr")
if (strtoupper(user_type)=="HR")

这并不是说我反对使用一致的大小写,事实上,我总是使用它,在不需要大小写的情况下,我花了很多时间处理不区分大小写的语言。但最重要的是,该程序提供了所需的结果,因为您编写代码不仅仅是为了好玩,而是为了达到目的,如果命名部门的正确方法是'HR','Management','QA',您不能使用'hr','management','qa',因为它在代码中看起来更漂亮。

也就是说,如果枚举仅在内部使用,例如,因为您只将它们用作id,并且描述存储在Descriptions表中,则使用最适合您和同事的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46388798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档