2013-05-10 49 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说得最好 “最好的做法是最适合当前情况的做法。” 对于出于需要,将默认值放入数据库更有意义。

相关问题