0

我正在努力使用存储数据的最佳方式 - 直接来自用户的“原始”数据与需要翻译的“编码”数据。以下是选择列表的具体示例,该列表指示测量患者血压的位置:

<select id="location">
<option value="1">Office</option>
<option value="2">Home</option>
<option value="3">Hospital</option>
<option value="4">Work</option>
<option value="5">Other</option>
</select>

过去,我会创建存储变量 VARCHAR 并将其存储为全部小写的“办公室”、“家”、“医院”、“工作”、“其他”。但是在过去的一个月里,我一直在想,也许一种更“优雅”的方法是将其存储为整数“代码”(如上例所示),然后在从表中读取时对其进行翻译,就像这样服务器端翻译:

  $location=$row['location'];
  if ($location == '1') {$location = "Office";}
  else if ($location == '2') {$location = "Home";}
  else if ($location == '3') {$location = "Hospital";}
  else if ($location == '4') {$location = "Work";}  
  else if ($location == '5') {$location = "Other";}

所以我对你的菜鸟问题有点哲学 -

  1. 您总是/有时将数据存储为“原始”VARCHAR 数据,还是使用整数/布尔值等“编码”?你有做任何一个的标准吗?

  2. 如果你“编码”你的数据,你是在服务器端还是客户端“解码”它?

我提前感谢您的想法。

4

1 回答 1

0

答案是:幻数不好。在任何情况下你都不应该if ($foo == 4)在你的代码中使用,因为,简而言之,WTF 中的“4”是什么意思?

如果有的话,请为此目的使用常量:

define('HOSPITAL', 4);

if ($foo == HOSPITAL) ...

这还不错,因为您不再直接接触潜在的无意义价值。但是,如果您必须调试应用程序,您会在任何地方看到该值,包括数据库。ENUM 在这里很有用,但 PHP 不支持它们。数据库确实如此。因此,一种折衷方案是在数据库中使用ENUM,在 PHP 中使用常量:

CREATE TABLE foos (
    foo ENUM('hospital', 'office', ...)
);

define('HOSPITAL', 'hospital');

if ($foo == HOSPITAL) ...

这给了你:

  • 类型安全并减少数据库中的存储
  • PHP 中的类型安全和最低限度更高效的处理
  • 编写和调试代码时完全清晰
于 2013-07-24T13:29:42.223 回答