繁体   English   中英

处理Heroku / ClearDB auto增量主键策略

[英]Handling Heroku/ClearDB auto Increment primary key strategy

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

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

     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')或者我是否需要使用int s向表中添加新列? 我知道在SQL中使用int查询比使用string要快得多。

那么,处理这个问题的正常方法是什么?

基本上有两种策略可以解决这个问题

没有自动增量

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

字符串常量

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

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

然后把你的支票写成

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

我建议使用第二种方法,主要是因为它使您的代码更具语义。 更容易看出$status['name'] == self::RETIRED意味着比$status['id'] == 2

如果在该表的name列上添加索引,则在按名称而不是主键查询时,性能不会(几乎)有任何差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM