2013-05-10 47 views
0

一位同事和我正在討論如何處理數據庫中的默認值並使用它填充下拉菜單的最佳做法。SQL:數據庫中的下拉菜單的默認值

我的觀點:將默認值放在數據庫中。 BlankNot Completed是有效的選項,應作爲選項保存在數據庫中。

他的觀點:從數據庫中刪除默認值。對於第一項,如果它不在數據庫中,那麼代碼應該提供一個默認值。如果選擇了任何其他值,則將其存儲到數據庫中,否則爲NULL

這可能開始辯論,但我只是在尋找人們的意見。

+1

最佳做法是最適合當前情況的方法。 – 2013-05-10 16:33:02

回答

0

恕我直言,像大多數事情一樣,這取決於。如果Not Completed在數據上下文中是有效值,那麼它應該在數據庫中。例如,如果您需要指示表單上的特定字段未由用戶完成。但是,如果您試圖指示缺少數據,則需要使用NULL

+0

這兩個答案都是非常棒的答案,但從它的外觀來看,我們將採用上述路線。由於「未完成」在我們的數據範圍內是有效的值,因此將其放入數據庫是有意義的。 – 2013-05-10 16:47:56

0

我寧願保留數據庫的默認值。如果沒有設置,我的默認值大部分是NULL。

原因:

您可以輕鬆地管理數據庫中的模型類的默認值。如果您想提供多種語言,在數據庫中保存ID或密鑰(而不是單詞或句子)非常重要。

如果您保存任何密鑰或任何號碼,沒有人知道它來自哪裏,並可能導致團隊中的誤解。

臨:

  • 的代碼很容易讀/管理
  • ID或鍵提高性能(EQ VARCHAR與TINYINT)

缺點:

  • 不知道任何。

例子:

# Model 
class User_Model { 

    const STATUS_DEFAULT  = null; 
    const STATUS_ACTIVE  = 1; 
    const STATUS_INACTIVE  = 2; 
    const STATUS_BANNED  = 3; 
    const STATUS_NOT_COMPLETED = 4; // you could save the int 4   
            // instead of varchar "not completed" 

    public function __construct() { 
     self::STATUS_DEFAULT = self::STATUS_ACTIVE; 
    } 
} 

# simple multi-language 
$lang   = "en"; 
$languages  = array(); 
$languages["en"] = array(
    "user_status_1" => "active", 
    "user_status_2" => "not active", 
    "user_status_3" => "banned", 
    "user_status_4" => "not completed" 
); 

echo $languages[$lang]["user_status_4"]; // output: not completed 
0

謝謝大家,說明你對這個意見。 Dan Bracuk說得最好 「最好的做法是最適合當前情況的做法。」 對於出於需要,將默認值放入數據庫更有意義。

相關問題