问题描述
比如:people实体有性别(男女)、国际(汉族、回族、满族、藏族...)、学历(小学、中学、高中、本科...)等等属性,这些属性都有相似处,前台展现时都以下拉框实现,如何将这些数据作为数据字典设计,而不是写死的呢?如果用数据字典directionary表存取这些值 那么需要和实体类即people表关联吗?也就说people表的sex存取的是directionary表的Id吗? 问题补充:AngelAndAngel 写道
解决方案
真正的项目字典不只是用来存储那些常量,而是为整个系统提供全方面的字典服务,易用好查性能高是一个准则。而且字典肯定需要缓存的,你试想,当你在表单中生成了下拉列表,存入数据库,都是存的字典的数据,那你读取的时候,肯定得判断显示的数据,这个时候你不用缓存,性能极度浪费(这可不是一般的浪费)。实现下拉列表和一些常用的radio是字典功能必须衍生出来的重要功能,不然够你麻烦的。至于缓存策略,我现在是这样的:字典肯定有维护功能,假如最初存在内存里面,假如你后期要维护,岂不是得重新启动。所以我在在添加和修改的时候,会有一个标志,凭借这个标志重新读取数据库。没有更新的时候就一直在内存,有更新的时候,就重新读取。 还有,一个表确实是够用,但是麻烦程度不是你可以想象的。
解决方案二:
欢迎采纳 哈哈
解决方案三:
可以站内发短信啊兄弟你这句话 map是静态的,变更后重新读取数据库更新map 是真理 呵呵 就是用数据库的值来更新它。你用字典 不用缓存 真的还不如不用。举个例子,你现在有一个用户列表,每行都有性别,籍贯,学历这些字典数据,假如你需要列出100行,每行3个,你得查询300次数据库。 太浪费性能了。
解决方案四:
还有 假如你不想维护数据那种字典,也可以做成js的数据字典,这方面我也有一些实现。至于生成下拉列表框等 表单元素 很好解决的,用jquery,假如你不太明白,可以及时站内我。
解决方案五:
数据字典其实不用这么麻烦用多张表的,用一张表就够了。directionary表只是加一个parent_id字段,增加其内连接关系。通过这个id就可以找到它属于哪一个类别了前台的话用Map结构取值。Map<String,Map<String,Object>>比如存放学历Map<'103',<'001','小学'>Map<'103',<'002','中学'>Map<'103',<'003','高中'>Map<'103',<'004','本科'>很方便的
解决方案六:
你自己已经给出了答案了嘛,我们也叫这些字典数据为元数据,在BI工具中经常使用的。
解决方案七:
对这个方面 你用一个表来做 可以实现 但是在项目中运用的时候 不太好,特别是复杂的表单。还有数据字典其实面临的最大问题是查询匹配问题,并且得非常灵活,比如你页面不光是要读取,还得判断,还得当作条件来查询其他数据库,还得转化等等,这些都是非常重要的。 我现在是用的两个表 ConstType和Const,目前已经实现了自动生成下拉表,缓存读取,和方便灵活的查询策略,算是比较完善的数据字典了。假如你需要 我们可以聊聊。