0

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

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

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

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

4

3 回答 3

0

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

于 2013-05-10T16:14:53.650 回答
0

我更喜欢将默认值保留在数据库之外。如果未设置,我的默认值大多为 NULL。

原因:

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

如果您保存任何密钥或任何数字,没有人知道它来自哪里,并可能导致团队中的误解。

临:

  • 代码易于阅读/管理
  • ID 或键可提高性能(例如 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
于 2013-05-10T16:24:05.110 回答
0

感谢大家对此发表意见。Dan Bracuk 说得最好:“最佳做法是最适合当前情况的做法。” 出于需要,将默认值放入数据库更有意义。

于 2013-05-10T16:49:16.290 回答