首页 新闻 会员 周边 捐助

下拉列表的新text 和 value的讨论

0
[已解决问题] 解决于 2007-12-21 15:34
<P><SPAN id=span_1360>name id<BR>网络&nbsp; 1<BR>汽车&nbsp; 2<BR>动物&nbsp; 3<BR>摄影&nbsp; 4<BR>影视&nbsp; 5<BR>数据库中存储的是id,页面显示的时候需要显示name。大家是在程序逻辑里面处理的还是在数据库中查询处理。<BR></SPAN><SPAN>如果是多选列表的情况又怎么处理比较方便呢。是在数据库中存储为1,2,3呢还是存成外键关联的三行数据呢。这时候显示需要是 网络,汽车,动物。<BR>很久以前就在为这个问题困扰了。一直没发现比较优美的解决方案。看了些开源的。有很多都是 text 和 value一样的。</SPAN><SPAN><BR>大家平时都是怎么做的呢。<BR></P></SPAN>
问题补充: 从数据库范式的角度来考虑也应该是绑定id。建立关联表。 不过也存在问题。 一 存储id的缺点 如果你需要一次查询多处这类下拉列表的数据的时候就需要关联很多字典表。而且小表多了在存储的时候会占用很多页造成对数据库空间的浪费和频繁翻页造成性能损失。这个也有一个解决思路 把字典都存到一张表中加类别列。缺点是增加了设计的复杂度。 二 中间表的问题。 缺点查询的时候比较复杂,可能需要提供额外的函数才能够查询出 网络,汽车,动物这样的数据。性能可能并不是很高。感觉上也觉得不够优雅。存储的时候也需要把1,2,3之类的数据进行拆分,如果在存储过程中做的话很容易造成死锁。 补充中见表的有点还有一个方便查询和统计。 我目前是存储id 中间表存储多选数据来处理的。中见表这部分都是在数据库中处理的。也就是说提交到数据库的数据是1,2,3。查询出来的是网络,动物,汽车。
暗香浮动的主页 暗香浮动 | 菜鸟二级 | 园豆:361
提问于:2007-12-19 14:44
< >
分享
最佳答案
0
除非可以非常确定这个列表不会改变,否则都应该写到数据库里去,作为一个字典表存在。 多选的话,我觉得还是生成外键比较好,一般都是一个产品属于多个分类时才用得到,这时候在产品和分类之间有个map表 具体情况具体分析了,也有一些是写到.xml配置中的,但不能写在web.config中,否则累死人
丁学 | 专家六级 |园豆:18730 | 2007-12-19 15:15
其他回答(4)
0
绑定的时候text和value分开绑,写入的时候存value,就是ID,我一般是这么处理。不过item少的话直接存文字就可以了吧
niugm | 园豆:1685 (小虾三级) | 2007-12-19 14:59
0
我是这样做的:分类字典一张表,关系存储一张表->存ID,关联查询
lu xu | 园豆:410 (菜鸟二级) | 2007-12-19 16:41
0
楼主,如你所说: A表(类型参数表) name id 网络 1 汽车 2 动物 3 摄影 4 影视 5 B表(使用A表的数据表) id Aid Name 1 2 凯迪拉克 2 2 皇冠 3 1 博客园 4 1 微软官方网站 5 3 狼和羊的故事 6 3 猫和老鼠的事 7 5 新片介绍 8 5 老片回顾 9 4 风景照 10 4 全家福 为何在此存入A表的id而不是A表的Name呢?使用表之间的约束,能够减少表之间的冗余数据,保证数据完整性,如果你使用A表的Name,那么会产生数据冗余,并且在A表发生更新时去修改B表中A表的Name(除非你觉得没必要修改),这样就产生了很多复杂的过程! 至于下拉选择框中的Text和Value,你可以将Text绑定到A表的Name列,而Value绑定到A表的id,这样在更新或查询B表时,只需要用下拉选择框的Value作为值或查询条件,就能很好的完成! 附:上面就是我使用此方法后在数据库B表的数据存储形式!
刚刚 | 园豆:3151 (老鸟四级) | 2007-12-19 18:12
0
多对多的情况使用中间表比较好 这比在数据库存储1,2,3要好 另一方面使用id要比name好 举个简单的例子,如果name修改了呢?此时就会出现数据的不一致.
Anders Cui | 园豆:1570 (小虾三级) | 2007-12-20 10:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册