3

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

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

创建将存储所有属性选项的额外表。但在这种情况下,每次额外加入时,我都需要为这样一个小东西创建。

或者我可以在 profile_helper.php 中放入此类属性的所有函数。例如

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

说到性能,这么小的东西值得额外加入吗?

4

5 回答 5

3

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

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

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

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

于 2012-06-28T19:15:37.570 回答
0

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

在性别的情况下,如果您正在构建一个多语言应用程序,无论如何都需要映射到您的语言工具,因此数据库中的函数或常量或 ENUMs 对于任何不太可能改变的数据真的都很好.

于 2012-06-28T19:19:22.650 回答
0

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

SELECT tblGender.gender FROM tblGender, tblUser WHERE tblUser.genderID = tblGender.genderID AND tblUser.userID = "x"
于 2012-06-28T19:14:34.863 回答
0

这得看情况。如果它是性别并且它肯定不会增长 - 我会做一个常量类。

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 方式,因为硬编码东西不好,除非它是“类似性别”的问题。

恕我直言,无需为此进行连接,因为性别永远不会超过男性和女性。

干杯

于 2012-06-28T19:25:38.963 回答
0

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

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

它在性能方面仍然非常有效。这似乎很愚蠢,因为现在只有两个值,但这并不意味着您不应该遵循规范化规则。

于 2012-06-28T19:34:25.153 回答