首页 新闻 会员 周边

数据库设计的一个常见问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-11 10:03

有一个主表,里面很多属性都是通过下拉列表来选择的,拿用户信息来举例:性别(男/女),学历(高中/本科...)等等。

下拉列表里面属性存在数据表里面比硬编码要好,可配置,更灵活了,这些属性可以存在一个表里面,例如:
[id, type, value...] 
[1, "sex", "男"...]
[2, "sex", "女"...]
[3, "degree", "高中"...]

问题是:在主表里面这些属性是直接存值(也就是 "男" "女" "高中")还是存外键比较好?
我认为前者在直接获取某条记录的信息时比较快;后者在根据属性查询时比较快。不知道大家在实际项目中是如何选择的?或者有更好的解决方法?

南京大乱炖的主页 南京大乱炖 | 菜鸟二级 | 园豆:212
提问于:2012-11-09 23:03
< >
分享
最佳答案
0

通过下拉列表里选择的,除了男、女这样固定不太可能变化的可以直接存值,其它的应该都存外键吧,不然下拉显示文字发生变化时,编辑的时候怎么显示原来选的值呢?

收获园豆:7
向往-SONG | 老鸟四级 |园豆:4853 | 2012-11-09 23:37

对哦,这点要比性能更重要呢

南京大乱炖 | 园豆:212 (菜鸟二级) | 2012-11-11 10:04

存数据库就直接存原内容,新建或编辑的时候可以动态生成一个下拉列表,根据读取的内容设定动态下拉列表的选择项为你数据库取到的值就行。

SOD_QWER | 园豆:207 (菜鸟二级) | 2012-11-22 11:20
其他回答(1)
0

弱弱的举个例子吧:

比如你的下拉选项,你数据库已经存了

[id, type, value...]
[1, "sex", "男"...]
[2, "sex", "女"...] 这些配置信息,那么你初始化的时候就把这些取出来绑定到控件上,然后当某条信息选择”男“了,你控件value取值1,然后存到主表中。当再次取主表数据做查询时,直接绑值1,性别“男“就出来了。如果你存男,那这个值跟你那个配置表就没有关联了。同时也不符合范式要求。

收获园豆:3
leroylei | 园豆:228 (菜鸟二级) | 2012-11-10 01:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册