数据存储为VARCHAR vs INT,“转换”服务器端vs客户端

TimSPQR

我在最好的数据存储方式上苦苦挣扎-直接来自用户的“原始”数据与需要转换的“编码”数据。这是一个选择列表的具体示例,该列表指示在哪里测量了患者的血压:

<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,并将其存储为所有小写字母“ office”,“ home”,“ hospital”,“ work”,“ other”。但是在过去的一个月中,我一直在思考,也许更“优雅”的方法是将其存储为整数“代码”(如上例所示),然后在从表中读取它时将其转换,像这样服务器端翻译:

  $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. 如果您对数据进行“编码”,那么您是在服务器端还是在客户端“解码”数据?

我预先感谢您的想法。

答案是:魔术数字不好。在任何情况下,您都不应在if ($foo == 4)代码中使用代码,因为简单地说,WTF是“ 4”的意思吗?

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

define('HOSPITAL', 4);

if ($foo == HOSPITAL) ...

这还不错,因为您不再与潜在的无意义的价值直接接触。但是,如果您必须调试应用程序,那么您会在所有位置(包括数据库)看到该值。枚举在这里很有用,但是PHP不支持它们。数据库确实可以。因此,一个折衷方案是在数据库中使用ENUM,在PHP中使用常量:

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

define('HOSPITAL', 'hospital');

if ($foo == HOSPITAL) ...

这给您:

  • 类型安全性并减少数据库中的存储
  • 类型安全性和PHP中效率最低的处理
  • 编写和调试代码时完全清晰

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Alfresco中的存储库层VS Web层VS服务器端VS客户端端

构建 HTML 客户端 VS 服务 HTML 服务器端?

客户端数据到服务器端

客户端VS服务器脚本?

在客户端和服务器端格式之间转换数据的正确术语是什么?

带有Einaros WebSocket的NodeJS:客户端Ping服务器VS服务器Ping客户端

刷新令牌-服务器端存储和多个客户端的吊销

会话状态是存储在客户端还是服务器端?

OpenVPN:如何从服务器端为客户端分配特定的网络掩码?

客户端数据未到达服务器端...也许

从API获取数据时的客户端与服务器端

Rails:获取客户端数据到服务器端模型回调

如何将客户端数据发送到服务器端

将数据从客户端传递到服务器端

Next.js:在getInitialProps()中获取数据:服务器端与客户端

如何使用打字稿客户端读取预提取的服务器端数据?

什么是客户端和服务器端数据表处理?

将数据从HTTP服务器端推送到浏览器客户端的最佳方法

我们是否需要在客户端和服务器端都存储访问令牌?

无法在VS Code中启动客户端Clang语言服务器

节点xmpp服务器vs节点xmpp客户端

MVC Razor是否在客户端或服务器端的视图中为模板生成HTML?

当SQL Server数据库是本地的时,ADO客户端游标与服务器端游标之间的区别?

数据生成中处理html创建的最佳位置是什么(服务器端或客户端)

从数据库服务器端创建绘图并在客户端对其进行可视化

如何在 next.js 中使用来自客户端的数据执行服务器端代码

在客户端JavaScript上编码数据,在服务器端PHP上解码

Vuetify:服务器端分页数据表未对客户端进行排序

一次将gridview数据从客户端发送到服务器端