比如说我有一个下拉列表框中有些选项,我究竟在什么情况下直接将这些数据存入数据库,在什么情况下需要再建一个表来专门存储这些个下拉列表框的字段。
如:
下拉列表框中有“西瓜”,“苹果”,“南瓜”这样的数据的话,肯定会存一个专门的表,然后用外键来引用。
再有种情况就是下拉列表框种是常量“男”,“女”这样的数据就可以直接存入数据库我觉得。
具体什么情况下该怎么去决定列?

解决方案 »

  1.   

    像男女这种值不可能去变的可以直接存 0,1 或者 man ,woman之类的
    也可以写成enum 
    public enum Sex { FEMALE("女"),MALE("男");

    private String text;

    Sex(String text){
    this.text = text;
    }
    public String getText() {
    return text;
    }
    public void setText(String text) {
    this.text = text;
    }
    }“西瓜”,“苹果”,“南瓜” 这种会变动的参数可以弄成可配置项,
    用一个专门的表,然后用外键来引用,
    表中可以加个配置项类别的识别字段,这样一个表可以存多种可配置参数
      

  2.   

    数据未知,前因与后果是一对多R,或是维护联系是支持联系,或是FD具有不确定性。总之:具有不确定的因素都可使用持久可配置方式。
      

  3.   

    枚举是JDK1.5开始的新特性,非常好用。当在数据明确而且多选一的情况下,使用枚举,程序性能非常好,容易开发和维护,建立枚举类型示例:public enum Vegetable { A{//可以用更近形式化的名称,但这里为了接省数据库空间
    public String getDesc(){
    return "东瓜";
    }
    },
    B{
    public String getDesc(){
    return "南瓜";
    }
    },
    C{
    public String getDesc(){
    return "西瓜";
    }
    },
    D{
    public String getDesc(){
    return "苹果";
    }
    },
    E{
    public String getDesc(){
    return "辣椒";
    }
    },
    F{
    public String getDesc(){
    return "西瓜";
    }
    };
    public abstract String getDesc();
    public String getName(){
    return this.name();
    }
    }
    在你的实体类中使用枚举:@Enumerated(EnumType.STRING)
    @Column(length=1,nullable=false)
    private Vegetable vegetable;
    //这样,枚举中的A,B,C...会被映射到数据库,而当从数据库取出,又会被还原成枚举类型。所以不需要外表。在Spring MVC框架下的html表单中用<select>下拉列表来装载枚举非常简单:
    <form:select path="vegetable" items="${<%=Vegetable.values()%>}" itemLabel="desc" itemValue="name">
    这和JSTL表达式是一样的,desc和name对应枚举类中两个get方法名。但当用户选择“A”,后台程序如何知道是“东瓜”这个枚举,则要用到Spring的属性编辑器来做转换。