php – 处理Heroku / ClearDB自动增量主键策略

使用Heroku运行ClearDB作为 MySQL层,主键以10的倍数自动递增.因此,例如,第一个插入可以是4,然后14,24,34等.我完全接受他们的推理,所以不是问题.

我的问题是,你在代码中如何处理这个问题.例如,假设我有一个由4行组成的状态表,

id | name
     1  | Active
     2  | Retired
     3  | Banned
     4  | Awaiting Mod

然后在我的应用程序中,我使用:

if($status['id'] == 1){
     //do something
   }else{
     // do something else
   }

显然这将会破裂,由于PK的增加方式.处理这些情况的最佳做法是什么?例如,我不能检查14,因为没有什么可说的,编号策略不会改变为12,22,32等.

我应该按名称检查,例如if($status [‘name’] ==’Active’),还是添加一个新列到我需要的ints的表中?我知道在sql中通过int查询比字符串快得多.

那么,正常的处理方式是什么?

基本上有两个策略来处理这个问题

没有自动增量

不要使用自动增量.只需在插入数据时自己添加id值即可.对于像’status’这样的表,它可能只包含静态数据,你不会动态地改变,这可能是很好的选择.

字符串常量

检查字符串值.并将这些字符串定义为类常量.

class YourClass {
  const ACTIVE = 'Active';
  const RETIRED = 'Retired';
  ...
}

然后把你的支票写成

if($status['name'] == self::ACTIVE){
  //do something
}

我建议使用第二种方法,主要是因为它使您的代码更具语义.它更容易看到$status [‘name’] == self :: RETIRED means than $status [‘id’] == 2

而且,如果您在该表的名称列上添加索引,那么当您以名称而不是主键进行查询时,性能上将不会有任何差异.

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...