我正在努力解决存储数据的最佳方式 - 直接来自用户的“原始”数据与需要翻译的“编码”数据。以下是指示患者血压测量位置的选择列表的具体示例:
<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";}
所以我对你的noob问题有点哲学 -
你总是/有时将数据存储为“原始”VARCHAR数据,还是用“整数/布尔”等“编码”?你有标准吗?
如果您对数据进行“编码”,那么它是“解码”服务器端还是客户端?
我提前感谢你的想法。
答案 0 :(得分:0)
答案是: magic numbers不好。在任何情况下都不应在代码中使用if ($foo == 4)
,因为,简单地说, WTF会“ 4“是什么意思?
如果有的话,为此目的使用常量:
define('HOSPITAL', 4);
if ($foo == HOSPITAL) ...
这不是一半,因为你不再与潜在的无意义的价值直接接触。如果您必须调试应用程序,您将在任何地方看到该值,包括数据库。 ENUM在这里很有用,但PHP不支持它们。但数据库确实如此。因此,折衷方案是在数据库中使用ENUMs并在PHP中使用常量:
CREATE TABLE foos (
foo ENUM('hospital', 'office', ...)
);
define('HOSPITAL', 'hospital');
if ($foo == HOSPITAL) ...
这会给你: