3

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

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

现在我找到了 2 种方法来将此属性存储在 MySQL 中。

  1. 使用整数/字符存储性别列:

    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 查询。我想会很贵。

这有一个通用的成语吗?如果不是,在为我的项目选择合适的解决方案时,我需要考虑哪些因素?

4

2 回答 2

2

大多数应用程序可能不需要询问性别,但如果您绝对需要,我建议您也提供“其他”和“未知”选项,前者适用于不完全适合二进制文件的人性别模型,另一个用于如果该人选择不透露它。

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

于 2019-10-03T00:18:45.180 回答
1

我会制作一个以 id 作为键的表“性别”,并且应该向用户显示文本:

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

在 Person 中,您将性别 ID 保存为外键。

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

如果有新的性别需要支持,直接在数据库中添加即可,不需要编辑java代码...

于 2012-10-31T08:50:58.420 回答