簡體   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