SQL:数据库中下拉列表的默认值

时间:2013-05-10 16:07:49

标签: sql drop-down-menu default

我和一位同事正在讨论如何处理数据库中的默认值并使用它填充下拉列表。

我的观点:将默认值放在数据库中。 BlankNot Completed是有效选项,应作为选项保存在数据库中。

他的观点:从数据库中删除默认值。对于第一个项目,如果它不在数据库中,则代码应提供默认值。如果选择了任何其他值,则将其存储到数据库中,否则为NULL

这可能会引发争论,但我只是在寻找人们的意见。

3 个答案:

答案 0 :(得分:0)

恕我直言,就像大多数事情一样,这取决于。如果Not Completed是数据上下文中的有效值,则它应该在数据库中。例如,如果您需要指明表单上的特定字段未被用户完成。但是,如果您尝试指示缺失的数据,那么NULL就可以了。

答案 1 :(得分:0)

我更喜欢保留数据库的默认值。如果没有设置,我的默认值大多为NULL。

<强>原因:

您可以轻松管理数据库模型类中的默认值。如果要提供多语言,在数据库中保存ID或密钥(而不是单词或句子)非常重要。

如果你保存任何钥匙或任何号码,没有人知道它来自哪里,可能会引起团队的误解。

临:

  • 代码易于阅读/管理
  • ID或密钥会提高性能(e.q.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

答案 2 :(得分:0)

感谢大家说明你对此的看法。 Dan Bracuk说得最好 “最佳做法是最适合当前局势的做法。” 对于out out,将默认值放入数据库更有意义。