MyException - 我的异常网
当前位置:我的异常网» Sql Server » 求问,从数据库的视角来说,下面三种方法哪种更好一

求问,从数据库的视角来说,下面三种方法哪种更好一点

www.MyException.Cn  网友分享于:2013-09-10  浏览:3次
求问,从数据库的角度来说,下面三种方法哪种更好一点
本帖最后由 kuangtuxue 于 2013-09-05 19:35:03 编辑
要存储长度大概为十几万的字符串(比如是用户信息),一个用户信息对应一个用户,然后一个用户信息里有一千多个用户信息类别(比如兴趣或者职业什么的),一个用户信息类别里的字符串最大不超过两千。

方法1:用一个nvarchar(4000)类型的列,然后以“性别,男,|兴趣,足球,篮球|......|”这种格式的字符串在后台进行判断,拆分成多个字符串用多个行来存放,大概四五十行能存完一个用户信息。

方法2:用一个nvarchar(50)类型的列存放用户信息类别(比如“兴趣”),再用一个nvarchar(2000)类型的列存放这个用户类别下的信息(比如“足球,篮球,”)。这样的话,一个用户信息得用一千多行才能存完(一个用户信息类别一行)。

方法3:直接用nvarchar(max)类型的列,然后以“性别,男,|兴趣,足球,篮球|......|”这种格式的字符串存放,不用拆分,一行就能存下。


用户信息的内容上的变更比较频繁,也就是update比较多,用户变更信息的时候,后台会对这个用户的用户信息进行判断,判断用户信息是否已经包含了某个用户信息分类,然后再根据这个进行变更。

方法1:后台的逻辑判断最复杂,首先得判断要更新的这个用户信息分类是否已经存在,然后得分割两次字符串(用“|”分隔符和“,”分割符),接着还要判断数据变更后的长度会不会超出4000,超出了的话又得判断这个用户还有没有其他行有足够的长度来容纳更新数据,假如没有就得插入新行。

方法2:后台的逻辑判断最简单,只用分割一次字符串(用分割符“,”),不用判断会不会超出长度,对于用户信息类别是否已经存在,也非常容易,还不用判断字符串长度是否会超过上限。

方法3:后台逻辑判断复杂度在方法1和方法2之间,和方法1一样,也得分割两次字符串,也得判断用户信息列别是不是存在,但是不用判断会不会字符串长度是否会超过上限。

假如单纯从后台处理方便与否的角度来选,我肯定选方法2,比方法1和3容易多了。但是我对数据库不怎么了解,比如方法2,一个用户就得用一千多行是不是太多了点?还有方法3,用nvarchar(max),数据量假如很大的情况下,会不会更新和查找的效率会变得很低?

所以,我想问下,从数据库执行效率和所占空间的角度来说,哪种方法好一点?

------解决方案--------------------
方法1:用一个nvarchar(4000)类型的列,然后以“性别,男,
------解决方案--------------------
兴趣,足球,篮球
------解决方案--------------------
......
------解决方案--------------------
”这种格式的字符串在后台进行判断,拆分成多个字符串用多个行来存放,大概四五十行能存完一个用户信息。

这个数据库是你设计的吗?为何象性别、兴趣这样都放到一直字符串里?为什么不单独一列出来,如果有很长的文本内容,可以考虑用ntext类型,而不是用nvarchar(4000),就算是用nvarchar类型,也要这样nvarchar(max)

数据库设计问题,好好考虑。
------解决方案--------------------
个人觉得采用方法二比较合适,你在考虑保存方便和节省空间的同时,更重要的是考虑可扩展性。方法二非常适合后续扩展。做数据库设计最重要的是要把实体及实体间的关系划分好。
------解决方案--------------------
2005以上,用XML类型来存储比较好
------解决方案--------------------
方法二吧,难道性别也是经常更新的么,从这个角度来来看,你可以分析一下要记录的用户信息分类,
可考虑把用户的自然属性信息(如性别、出生日期、民族...),这类信息是人人都有,并且有且仅有一条,这类信息固定存在一个表中;其它较易变动的,可能多条,另建表存储,如果信息量太大,可以考虑再次分类...
------解决方案--------------------
粗略看了,方法2是优选,在RDBMS里,也是正道
------解决方案--------------------

文章评论

要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
鲜为人知的编程真相
鲜为人知的编程真相
Java程序员必看电影
Java程序员必看电影
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
 程序员的样子
程序员的样子
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
编程语言是女人
编程语言是女人
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
我的丈夫是个程序员
我的丈夫是个程序员
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
每天工作4小时的程序员
每天工作4小时的程序员
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
如何成为一名黑客
如何成为一名黑客
我是如何打败拖延症的
我是如何打败拖延症的
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
老程序员的下场
老程序员的下场
10个调试和排错的小建议
10个调试和排错的小建议
中美印日四国程序员比较
中美印日四国程序员比较
程序员的鄙视链
程序员的鄙视链
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
旅行,写作,编程
旅行,写作,编程
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
漫画:程序员的工作
漫画:程序员的工作
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
那些争议最大的编程观点
那些争议最大的编程观点
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有