使用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