数据库或 php 代码,用于有关属性选项 ID 的小事情


Database or php code for small things regarding attribute option ids?

用户配置文件。我有一些属性只有 2 或 3 个选项。例如,我将表中的性别存储为 tinyint(男性 = 1,女性 = 2)。所以在表中我有 tinyint,但在前端我需要显示字符串。我有大约 4 个属性,只有大约 2 个选项。

所以我有两个选项如何显示来自选项的字符串:

创建将存储所有属性选项的额外表。但是在这种情况下,我需要每次额外连接时都为这么小的东西创建。

或者我可以为这种属性输入profile_helper.php所有函数。例如

function getGender($optionId){
  $gender = $optionId == 1 ? "male" : "female";
  return $gender;
}

说到性能,这么小的事情值得多加加入吗?

你可以让你的生活更轻松,并枚举所有的可能性,如下所示:

`gender` ENUM( 'MALE', 'FEMALE')

这样,您实际上将'MALE''FEMALE'的值插入到数据库中,当您从数据库中检索值时,您将获得其中一个字符串,您可能需要的唯一帮助程序函数是 ucfirst()strtolower()

我只推荐这种方法用于极不可能改变的事情(性别就是一个很好的例子)。

我肯定会走SQL路线。 未来更具可扩展性。显然不是性别的问题,但根据其他选项,它可能会为您节省一些时间。所以像这样:

SELECT tblGender.gender FROM tblGender, tblUser WHERE tblUser.genderID = tblGender.genderID AND tblUser.userID = "x"

我不喜欢属性表。SQL 也没有优化。某些内容应规范化到另一个表。有些事情不应该。这真的取决于你的结构和你想做什么。

就性别而言,如果您正在构建一个多语言应用程序,无论如何都需要映射到您的语言工具,因此数据库中的函数或常量或 ENUM 对于任何不太可能更改的数据来说都很好。

嗯,这取决于。如果是性别并且它肯定不会增长 - 常量类是我会做的事情。

class Constants {
    public static $gender = array(0 => 'male', 1 => 'female');
    public static function getGender( $value ) {
        if ( !empty(self::$gender[$value])) {
            return self::$gender[$value];
        }
    }
}

非常有用,如果你想封装和做,即:

echo Constants::getGender($user->gender);

但是,如果你想要的值会经常更改,请采用SQL方式,因为硬编码东西是不好的,除非它是一个"性别"问题。

恕我直言,无需为此加入,因为性别永远不会超过男性和女性。

干杯

我会有第二张桌子。 它灵活,可扩展,易于更改或添加性别(即未指定)

SELECT person.id, gender.name
FROM person
INNER JOIN gender
ON person.genderid = gender.id

它仍然非常有效的性能明智。 这看起来很愚蠢,因为现在只有两个值,但这并不意味着您不应该遵循规范化规则。