彩虹岛英雄王披风 9:分隔符在数据库设计和编程中的应用
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 10:10:00
数据库保存的就是列表和关系,对于一些功能单一、文字较短的列表内容,可以使用分隔符将它们隔开,保存在一个字段里,然后通过数组连调用,这样就不必单独开设数据表。这样的设计更科学,调用也更简单。
关于分隔符的使用有一些技巧,以下都是本人的经验总结,希望对初学者有用,也期待高手指正补充。本文所示范的是ASP代码。
一、 分隔符的基本用法
比如会员的好友,我们可以在会员表里设一个字段UserBuddy,将好友以逗号分隔开保存在这个字段里,如:小张,小李,小王 。调用方法:
Buddies = Split(rs("UserBuddy"),",") '通过split函授构造数组
For i=0 to Ubound(Buddies)
Response.write Buddies(i)
Next
如果小王后面还有一个逗号,则应该是 For i=0 to Ubound(Buddies)-1 ;如果小张前面也有一个逗号,则应该是For i=1 to Ubound(Buddies)-1 。
上面示范的只是基本用法,有时并不科学,后面详解。
二、 分隔符的选择
理论上可以使用任何字符作为分隔符,但实际较常用的是逗号、竖扛和空格。我不推荐使用空格,因为空格是看不见的,放在尾部看不出来有还是没有,而且有些内容本身有必要含有空格,会产生冲突。
在选择分隔符时,应充分考虑所分隔的内容是否有可能且有必要含有分隔符本身,同时我们在设计被分隔的内容字段时也要考虑到分隔符,比如注册会员名时就应该过滤掉空格、逗号、紧扛(实际要过滤掉很多特殊字段,最重要的是单引号,这不在本文讨论之列),再比如我们会在订单里用一个字段来保存产品名称列表,选择使用英文逗号作为分隔符,如 双节棍1,双节棍2,双节棍3 ,那么我们在保存产品名时就需要过滤过英文逗号。
有时我们还有必要使用这样的分隔符:|| ||| ,这样可有效防止冲突,即使被分隔的内容里含有 | 也没关系。但是这样会增加字节数,所以没必要不要用。
三、 分隔符的科学用法
好友例子里说 小张,小李,小王 这种用法不科学,为什么呢?假如小张要加我为好友,但他已经是我的好友了,当然不能让他再加,所以在加好友时都要进行一个验证。
ExistFlag = False
Buddies = Split(rs("UserBuddy"),",")
For i=0 to Ubound(Buddies)
If User=Buddies(i) Then 'User 是想要加我为好友的会员
ExistFlag=True
Exit For
End if
Next
If ExistFlag=True Then (提示已经是好友了,终止动作)
如果以这样形式来保存:|小张|小李|小王| ,那么验证就相当简单了,只需一句:
If Instr((rs("UserBuddy"),"|"& User &"|") >0 Then (提示已经是好友了,终止动作)
这样只用1行代码,1个函数就解决了;相比,前面的方法用了9行代码,3个变量、1个函数、1个循环、1个分支,不但代码繁多,执行效率也会低很多。
删除好友也是同样的道理,前面的要通过数组和循环来完成,需要用到一个临时变量,具体代码就不写了,而后面的还是只需要一行代码:
rs("UserBuddy") = replace(rs("UserBuddy"), "|"& User &"|","|")
这种方法普遍适用于内容简短单一的情况,比如论坛的版主、版主管理的版块。
当然,并非任何地方都一定用前导后导分隔符,比如我的订单数据库就是这样的:1,2,3, 因为任何一个操作都会牵涉到很多数据的更新,必须用For循环来解决,加个前导逗号没什么用,反而会增加程序代码。
另外,固定维数和位置的情形只需要在中间加分隔符就行了,比如我只想用一个字段IM来保存QQ,旺旺,MSN,只要这样的就行了: 123654751|jack|abc@hotmail.com 。因为这个是只能修改,不能添加删除的,加前导后导。如果只要调用QQ号:
四、 分隔符的高级用法
通过使用分隔符,我们还可以保存更复杂的数据,比如:1,2|3,4|5,6|7,8 ,这样在分隔的项目里面又有分隔,有时可能会用得到。
还有这种情形:1,2,3,4,5,6,7,8, 我们要用到1 3 5 7 和 2 4 6 8,在画坐标曲线图时可能用到。运行一下以下代码试试:
a="1,2,3,4,5,6,7,8," '项目个数必须是偶数
ag=split(a,",")
for i=0 to ubound(ag)/2-1
a1=a1&ag(i*2)
a2=a2&ag(i*2+1)
next
response.Write a1&"
"&a2