这是在MySQL中为Web项目存储性别列的最佳方法

时间:2012-10-31 08:25:44

标签: mysql database web enums

我已经构建了一个JavaEE项目,需要在MySQL中存储用户的性别。我想在添加新用户帐户时显示此属性。例如

<select name="gender">
    <option value="0">Male</option>
    <option value="1">Female</option>
</select>

现在我发现了两种在MySQL中存储此属性的方法。

  1. 使用integer / char存储性别列:

    gender tinyint(1) not null;
    

    在这种情况下,我必须在我的Java代码中写这些:

    public class StaticData {
        public static final short MALE = 0;
        public static final short FEMALE = 1;
    }
    

    如果是这样,我的数据库将依赖于我的Java代码来限制值范围并解释0/1代表什么(低级别取决于高级别)。我认为这不是一个好主意。

  2. 使用枚举来存储性别列:

    gender enum("MALE", "FEMALE") not null
    

    在这种情况下,我的Java代码将取决于枚举的值。有两种方法可以获得这些值:

    1)public enum Gender {MALE,FEMALE},它与方法1的问题几乎相同。

    2)从MySQL中检索这些值,例如“SHOW COLUMNS FROM user LIKE \”gender \“”然后使用正则表达式来拆分字符串。但这是一种冗长的方法。每次加载JSP时都必须从db查询。我认为这会很贵。

  3. 这有一个共同的习惯用法吗?如果没有,在为我的项目选择合适的解决方案时,我需要考虑哪些因素?

2 个答案:

答案 0 :(得分:2)

我会创建一个表为“Gender”的表,其中id为key,而Text应该显示给用户:

  • ID - 文字
  • 1 - 男
  • 2 - 女性

在Person中,您将gender-ID保存为外键。

当您想要显示您加入的人时,可以将性别加入此人并打印出文本。 对于选择控件,您可以选择性别表中的所有行,并生成带有行的html。

如果要支持新的性别,只需将其添加到数据库中,就不必编辑任何java代码......

答案 1 :(得分:1)

对于大多数要求性别的应用程序来说,

可能不是,但是如果绝对需要,我建议您也选择“其他”和“未知”,前者用于不完全符合二元性别模型的人,如果不选择披露则不然。

对于这4个值,最简单的方法可能是将其以CHAR(1)ENUM("F", "M", "O", "U")的形式存储在数据库中(请注意,我是按字母顺序选择的,而不是令人惊讶的典型“男性优先”选项)