范式设计简单介绍(一)1+

15,149 views / 2009.09.08 / 1:01 下午

范式设计是关系数据库的一个延伸理论。目的是在关系数据库的基础上,减少重叠数据的冗余,并且在将列(属性) 逐渐拆分成表(关系) 的过程中,从理论上减少了异常数据产生的几率。增强了数据的关系性能,在一定程度上,增强了关系查询效率。

术语:通常在具体的 RDBMS 如 MySQL 的应用开发中,将一个关系叫做表,一条元组(tuple) 称为行,一个属性叫做列。 因为范式(NF) 设计主要是讲理论,所以在本文中,一律将表称为关系,将行称为tuple,将列称为属性。

如图:

范式设计

1.1] First Normal Form(1NF)

1NF(第一范式) 的目的是将数据拆分成原子状态。例如 一个大型文章发布系统的文章序列号的组成是 8 位用户名 + 该用户所属的文章号,如某用户的用户名是 ID_001 ,他发表的某一篇文章,在他的文章列表中的序列号是 15 ,这篇文章在该系统中唯一序列号是 ID_00115 。

将文章序列号存储到关系中去,通常的做法是这样的:

错误的方式

+———————-+—————–+—————+

some属性…… | 文章序列号 | other 列……

———————-+—————–+—————-

……| ID_00115 |

这么做是不符合 1NF 规范的。因为文章序列号是两部分组成的,如果存成一个属性那么就违反了 1NF 的原子性原则。

符合 1NF 的属性划分方法如下:

正确方式:

+———————-+————–+——–+—————+

some属性…… | 用户号 | 文章号 | other 列……

———————-+—————+——–+—————-

……| ID_001 | 15 |

+———————-+————-+——–+—————+

1.2] Second Normal Form(2NF)

2NF 划分关系的原则是:一个关系中的所有非 Key属性s 必须完全的依赖于 Key。如果是多主键的话,那么非主键属性s 必须完全依赖所有的主键.

1NF 的范围是同一关系的不同属性之间的划分。而 2NF(第二范式) 的范围是将一个大的,数据相互重叠与冗余的关系拆分成众多小的,关系 ,他们之间相互的联系就是 Key ,Key 是一个关系中唯一标示一个tuple 的标识。而且在 2NF 中,所有有效的单一的 Key 默认都是 Primary key。(多个 Key 唯一定位一个tuple ,那么这些Key 称为复合主键) 。

另外一点需要特别注意的是,范式是属性递增的,因此,只有在完成了 1NF 之后,才能进行 2NF 的划分。

例如某文章系统中,一个存储某一篇文章的关系,有如下字段

错误方式:

+————————–+————+———-+———–+———–+————–+—————-+———–+——————

..some属性s | 用户号 | 文章号 | 文章标题 | 文章内容 | 文章创建时间 | 用户发表文章数 | 用户登录数| other 列 …

+————————–+————+———-+———–+———–+————–+—————-+———–+——————

……| ID_001 | 15 | Article | Cnt … | 1223372589 | 4 | 20 | ……

其中,‘用户号’和‘文章号’对于 ‘文章标题’、‘文章内容’、‘文章创建时间’来说,可以算是复合主键,因为要查出这些属性,必须完全依赖 ‘文章号’和 ‘用户号’这两个属性,缺一不可。

而 ‘用户发表文章数’和 ‘用户登录数’这两个属性仅依靠 ‘用户号’就可以出来,所以 ‘用户号’是 ‘用户发表文章数’和 ‘用户登录数’的主键,而 ‘文章号’则和这两个属性没有关系。也可以说 ‘用户发表文章数’和 ‘用户登录数’没有完全依赖于复合主键,所以这个表不符合 2NF 标准(但是所有属性都是原子不可分状态,因此这个表符合 1NF 标准)。

如果要符合 2NF 标准,就需要将这个关系拆分成两个关系

正确方式:

+————————–+————+———-+———–+———–+————–+————————–

..some属性s | 用户号 | 文章号 | 文章标题 | 文章内容 | 文章创建时间 | other 列 …

+————————–+————+———-+———–+———–+————–+————————–

……| ID_001 | 15 | Article | Cnt … | 1223372589 | ……

+————————–+————+———-+———–+———–+————–+—————————

正确方式:

+————————–+————+—————–+———–+——————-

..some属性s | 用户号 | 用户发表文章数 | 用户登录数| other 列 …

+————————–+————+—————–+———–+——————-

……| ID_001 | 4 | 20 | ……

+————————–+————+—————–+———–+——————-

这样,Right way one . 中剔出了不符合完全依赖的两个属性s ,所有的属性s 都完全依赖 composite primary key ,可以认为 Right way one. 符合 2NF 标准。

另外,将 Wrong way. 中剔出的两个属性s 划分到了 Right way two. 里面,primary key 是 ‘用户号’。因此 Right way two. 仅就一个 primary key ,并且所有内容都依赖于 primary key 查询,所以可以说 Right way two. 符合 2NF 的要求。

1.2.1] 关系模式

经过 2NF 的拆分,现在关系的数量在增加,但是属性之间的关系趋向于更加的简单明了。

关系之间根据对应联系的不同,有三种不同的关系模式:

· 一对一

· 一对多

· 多对多

·一对一 , 既一个属性仅可以对应一个其他的属性

例如:一个用户号和用户之间就是一对一的关系,一个用户只能有一个用户号,一个用户号只能指定某一个用户。

·一对多 , 既一个属性可以对应多个其他的属性

例如: 一个用户号可以对应多个文章号,因为用户可以发表多篇的文章.

·多对多 , 既多个属性可以对应多个其他的属性

完全多对多就是 Cartesian product(笛卡尔积或直积)。

例如: 一个用户可以发相同标题的不同文章。而拥有相同标题的文章,可以由不同的用户发。

Categories: 分享 Tags: ,

JS数据压缩算法3+

19,020 views / 2009.09.04 / 12:12 下午

研究Google chart API的时候发现它提供的数据压缩算法不错,可以把纯数字的数组压缩成很短的一个字符串,分享如下:

var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 
function simpleEncode(values,maxValue) {
 
var chartData = ['s:'];
for (var i = 0; i < values.length; i++) { var currentValue = values[i]; if (!isNaN(currentValue) && currentValue >= 0) {
chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
} else {
chartData.push('_');
}
}
return chartData.join('');
}

测试例子:

var valueArray = new Array(20,100,40,50,60,81,74);
var maxValue = 100;
document.write(simpleEncode(valueArray,maxValue));
Categories: 分享 Tags: , , ,

我也收集了一些常用的正则表达式0+

13,714 views / 2009.09.01 / 5:05 下午

兄弟姊妹们,这可是极品文章,强烈建议大家收藏,以后不用每次都费劲脑汁编正则表达式了!
匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址:

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序:

function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi

我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.71j.cn/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文:

onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

用正则表达式限制只能输入全角字符:

 onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

用正则表达式限制只能输入数字:

onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

用正则表达式限制只能输入数字和英文:

onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

判断是否为数字

function isNumber(oNum)
{
if(!oNum) return false;
var strP=/^\d+(\.\d+)?$/;
if(!strP.test(oNum)) return false;
try{
if(parseFloat(oNum)!=oNum) return false;
}
catch(ex)
{
return false;
}
return true;
}
Categories: 分享 Tags: , ,

不容易找到的一张表 Content-Type大全0+

36,479 views / 2009.09.01 / 1:01 下午
描述 文件扩展名 MIME 类型
Text and Text-Related Types ? ? ?
HTML text data (RFC 1866) html htm ? text/html
Plain text: documents; program listings txt c c++ pl cc h ? text/plain
Richtext (obsolete – replaced by text/enriched) ? ? text/richtext
Structure enhanced text (etx?) ? text/x-setext
Enriched text markup (RFC 1896) ? ? text/enriched
Tab-separated values (tabular) (tsv?) ? text/tab-separated-values
SGML documents (RFC 1874) ? ? text/sgml
Speech synthesis data (MVP Solutions) talk ? text/x-speech
? ? ? ?
Document Stylesheet Types ? ? ?
Cascading Stylesheets css ? text/css
DSSSL-online stylesheets ? ? application/dsssl (proposed)
? ? ? ?
Image Types ? ? ?
GIF gif ? image/gif
X-Windows bitmap (b/w) xbm ? image/x-xbitmap
X-Windows pixelmap (8-bit color) xpm ? image/x-xpixmap
Portable Network Graphics png ? image/x-png
Image Exchange Format (RFC 1314) ief ? image/ief
JPEG jpeg jpg jpe ? image/jpeg
TIFF tiff tif ? image/tiff
RGB rgb ? image/rgb
? ? ? image/x-rgb
Group III Fax (RFC 1494) g3f ? image/g3fax
X Windowdump format xwd ? image/x-xwindowdump
Macintosh PICT format pict ? image/x-pict
PPM (UNIX PPM package) ppm ? image/x-portable-pixmap
PGM (UNIX PPM package) pgm ? image/x-portable-graymap
PBM (UNIX PPM package) pbm ? image/x-portable-bitmap
PNM (UNIX PPM package) pnm ? image/x-portable-anymap
Microsoft Windows bitmap bmp ? image/x-ms-bmp
CMU raster ras ? image/x-cmu-raster
Kodak Photo-CD pcd ? image/x-photo-cd
Computer Graphics Metafile cgm ? image/cgm
North Am. Presentation Layer Protocol ? ? image/naplps
CALS Type 1 or 2 mil cal ? image/x-cals
Fractal Image Format (Iterated Systems) fif ? image/fif
QuickSilver active image (Micrografx) dsf ? image/x-mgx-dsf
CMX vector image (Corel) cmx ? image/x-cmx
Wavelet-compressed (Summus) wi ? image/wavelet
AutoCad Drawing (SoftSource) dwg ? image/vnd.dwg
? ? ? image/x-dwg
AutoCad DXF file (SoftSource) dxf ? image/vnd.dxf
? ? ? image/x-dxf
Simple Vector Format (SoftSource) svf ? image/vnd.svf
? ? ? also vector/x-svf
? ? ? ?
Audio/Voice/Music Related Types ? ? ?
“basic”audio – 8-bit u-law PCM au snd ? audio/basic
Macintosh audio format (AIpple) aif aiff aifc ? audio/x-aiff
Microsoft audio wav ? audio/x-wav
MPEG audio mpa abs mpega ? audio/x-mpeg
MPEG-2 audio mp2a mpa2 ? audio/x-mpeg-2
compressed speech (Echo Speech Corp.) es ? audio/echospeech
Toolvox speech audio (Voxware) vox ? audio/voxware
RapidTransit compressed audio (Fast Man) lcc ? application/fastman
Realaudio (Progressive Networks) ra ram ? application/x-pn-realaudio
NIFF music notation data format ? ? application/vnd.music-niff
MIDI music data mmid ? x-music/x-midi
Koan music data (SSeyo) skp ? application/vnd.koan
? ? ? application/x-koan
Speech synthesis data (MVP Solutions) talk ? text/x-speech
? ? ? ?
Video Types ? ? ?
MPEG video mpeg mpg mpe ? video/mpeg
MPEG-2 video mpv2 mp2v ? video/mpeg-2
Macintosh Quicktime qt mov ? video/quicktime
Microsoft video avi ? video/x-msvideo
SGI Movie format movie ? video/x-sgi-movie
VDOlive streaming video (VDOnet) vdo ? video/vdo
Vivo streaming video (Vivo software) viv ? video/vnd.vivo
? ? ? video/vivo
Special HTTP/Web Application Types ? ? ?
Proxy autoconfiguration (Netscape browsers) pac ? application/x-ns-proxy-autoconfig
See Chapter 6 ? ? application/x-www-form-urlencoded
See Chapter 9 ? ? application/x-www-local-exec
See Chapter 9 (Netscape extension) ? ? multipart/x-mixed-replace
See Chapter 9 and Appendix B ? ? multipart/form-data
Netscape Cooltalk chat data (Netscape) ice ? x-conference/x-cooltalk
Interactive chat (Ichat) ? ? application/x-chat
? ? ? ?
Application Types ? ? ?
? ? ? ?
Text-Related ? ? ?
PostScript ai eps ps ? application/postscript
Microsoft Rich Text Format rtf ? application/rtf
Adobe Acrobat PDF pdf ? application/pdf
? ? ? application/x-pdf
Maker Interchange Format (FrameMaker) mif ? application/vnd.mif
? ? ? application/x-mif
Troff document t tr roff ? application/x-troff
Troff document with MAN macros man ? application/x-troff-man
Troff document with ME macros me ? application/x-troff-me
Troff document with MS macros ms ? application/x-troff-ms
LaTeX document latex ? application/x-latex
Tex/LateX document tex ? application/x-tex
GNU TexInfo document texinfo texi ? application/x-texinfo
TeX dvi format dvi ? application/x-dvi
MacWrite document ?? ? application/macwriteii
MS word document ?? ? application/msword
WordPerfect 5.1 document ?? ? application/wordperfect5.1
SGML application (RFC 1874) ? ? application/sgml
Office Document Architecture oda ? application/oda
Envoy Document evy ? application/envoy
Wang Info. Tranfer Format (Wang) ? ? application/wita
DEC Document Transfer Format (DEC) ? ? application/dec-dx
IBM Document Content Architecture (IBM) ? ? application/dca-rft
? ? ? ?
CommonGround Digital Paper (No Hands Software) ? ? application/commonground
FrameMaker Documents (Frame) doc fm frm frame ? application/vnd.framemaker
? ? ? application/x-framemaker
Remote printing at arbitrary printers (RFC 1486) ? ? application/remote-printing
? ? ? ?
Archive/Compressed Archives ? ? ?
Gnu tar format gtar ? application/x-gtar
4.3BSD tar format tar ? application/x-tar
POSIX tar format ustar ? application/x-ustar
Old CPIO format bcpio ? application/x-bcpio
POSIX CPIO format cpio ? application/x-cpio
UNIX sh shell archive shar ? application/x-shar
DOS/PC – Pkzipped archive zip ? application/zip
Macintosh Binhexed archive hqx ? application/mac-binhex40
Macintosh Stuffit Archive sit sea ? application/x-stuffit
Fractal Image Format fif ? application/fractals
Binary, UUencoded bin uu ? application/octet-stream
PC executable exe ? application/octet-stream
WAIS “sources” src wsrc ? application/x-wais-source
NCSA HDF data format hdf ? application/hdf
? ? ? ?
Downloadable Program/Scripts ? ? ?
Javascript program js ls mocha ? text/javascript
? ? ? application/x-javascript
VBScript program ? ? text/vbscript
UNIX bourne shell program sh ? application/x-sh
UNIX c-shell program csh ? application/x-csh
Perl program pl ? application/x-perl
Tcl (Tool Control Language) program tcl ? application/x-tcl
Atomicmail program scripts (obsolete) ? ? application/atomicmail
Slate documents – executable enclosures (BBN) ? ? application/slate
Undefined binary data (often executable progs) ? ? application/octet-stream
RISC OS Executable programs (ANT Limited) ? ? application/riscos
? ? ? ?
Animation/Multimedia ? ? ?
Andrew Toolkit inset ? ? application/andrew-inset
FutureSplash vector animation (FutureWave) spl ? application/futuresplash
mBED multimedia data (mBED) mbd ? application/mbedlet
Macromedia Shockwave (Macromedia) ? ? application/x-director
Sizzler real-time video/animation ? ? application/x-sprite
PowerMedia multimedia (RadMedia) rad ? application/x-rad-powermedia
? ? ? ?
Presentation ? ? ?
PowerPoint presentation (Microsoft) ppz ? application/mspowerpoint
PointPlus presentation data (Net Scene) css ? application/x-pointplus
ASAP WordPower (Software Publishing Corp.) asp ? application/x-asap
Astound Web Player multimedia data (GoldDisk) asn ? application/astound
Special Embedded Object ? ? ?
OLE script e.g. Visual Basic (Ncompass) axs ? application/x-olescript
OLE Object (Microsoft/NCompass) ods ? application/x-oleobject
OpenScape OLE/OCX objects (Business@Web) opp ? x-form/x-openscape
Visual Basic objects (Amara) wba ? application/x-webbasic
Specialized data entry forms (Alpha Software) frm ? application/x-alpha-form
client-server objects (Wayfarer Communications) wfx ? x-script/x-wfxclient
General Applications ? ? ?
Undefined binary data (often executable progs) ? ? application/octet-stream
CALS (U.S. D.O.D data format – RFC 1895) ? ? application/cals-1840
Pointcast news data (Pointcast) pcn ? application/x-pcn
Excel spreadsheet (Microsoft) ? ? application/vnd.ms-excel
? ? ? application/x-msexcel
? ? ? application/ms-excel
PowerPoint (Microsoft) ppt ? application/vnd.ms-powerpoint
? ? ? application/ms-powerpoint
Microsoft Project (Microsoft) ? ? application/vnd.ms-project
Works data (Microsoft) ? ? application/vnd.ms-works
MAPI data (Microsoft) ? ? application/vnd.ms-tnef
Artgallery data (Microsoft) ? ? application/vnd.artgalry
SourceView document (Dataware Electronics) svd ? application/vnd.svd
Truedoc (Bitstream) ? ? application/vnd.truedoc
Net Install – software install (20/20 Software) ins ? application/x-net-install
Carbon Copy – remote control/access (Microcom) ccv ? application/ccv
Spreadsheets (Visual Components) vts ? workbook/formulaone
Cybercash digital money (Cybercash) ? ? application/cybercash
Format for sending generic Macintosh files ? ? application/applefile
Active message — connect to active mail app. ? ? application/activemessage
X.400 mail message body part (RFC 1494) ? ? application/x400-bp
USENET news message id (RFC 1036) ? ? application/news-message-id
USENET news message (RFC 1036) ? ? application/news-transmission
? ? ? ?
Multipart Types (mostly email) ? ? ?
Messages with multiple parts ? ? multipart/mixed
Messages with multiple, alternative parts ? ? multipart/alternative
Message with multiple, related parts ? ? multipart/related
Multiple parts are digests ? ? multipart/digest
For reporting of email status (admin.) ? ? multipart/report
Order of parts does not matter ? ? multipart/parallel
Macintosh file data ? ? multipart/appledouble
Aggregate messages; descriptor as header ? ? multipart/header-set
Container for voice-mail ? ? multipart/voice-message
HTML FORM data (see Ch. 9 and App. B) ? ? multipart/form-data
Infinite multiparts – See Chapter 9 (Netscape) ? ? multipart/x-mixed-replace
? ? ? ?
Message Types (mostly email) ? ? ?
MIME message ? ? message/rfc822
Partial message ? ? message/partial
Message containing external references ? ? message/external-body
Message containing USENET news ? ? message/news
HTTP message ? ? message/http
? ? ? ?
2D/3D Data/Virtual Reality Types ? ? ?
VRML data file wrl vrml ? x-world/x-vrml(changing to model/vrml)
WIRL – VRML data (VREAM) vrw ? x-world/x-vream
Play3D 3d scene data (Play3D) p3d ? application/x-p3d
Viscape Interactive 3d world data (Superscape) svr ? x-world/x-svr
WebActive 3d data (Plastic Thought) wvr ? x-world/x-wvr
QuickDraw3D scene data (Apple) 3dmf ? x-world/x-3dmf
? ? ? ?
Scientific/Math/CAD Types ? ? ?
Chemical types — to communicate information about chemical models ? ? chemical/* (several subtypes)
Mathematica notebook ma ? application/mathematica
Computational meshes for numerical simulations msh ? x-model/x-mesh(evolving to model/mesh)
Vis5D 5-dimensional data v5d ? application/vis5d
IGES models — CAD/CAM (CGM) data igs ? application/iges(evolving to model/iges?)
Autocad WHIP vector drawings dwf ? drawing/x-dwf
? ? ? ?
Largely Platform-Specific Types ? ? ?
Silicon Graphics Specific Types ? ? ?
Showcase Presentations showcase slides sc sho show ? application/x-showcase
Insight Manual pages ins insight ? application/x-insight
Iris Annotator data ano ? application/x-annotator
Directory Viewer dir ? application/x-dirview
Software License lic ? application/x-enterlicense
Fax manager file faxmgr ? application/x-fax-manager
Fax job data file faxmgrjob ? application/x-fax-manager-job
IconBook data icnbk ? application/x-iconbook
? wb ? application/x-inpview
Installable software in ‘inst’ format inst ? application/x-install
Mail folder mail ? application/x-mailfolder
? pp ppages ? application/x-ppages
Data for printer (via lpr) sgi-lpr ? application/x-sgi-lpr
Software in ‘tardist’ format tardist ? application/x-tardist
Software in compressed ‘tardist’ format ztardist ? application/x-ztardist
WingZ spreadsheet wkz ? application/x-wingz
Open Inventor 3-D scenes iv ? graphics/x-inventor
? ? ? ?

来源:http://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html

Categories: 分享 Tags: