1NF:属性单一,不可再分(仅一个值仅一种值)
很显然,在当前的任何RDBMS中,傻瓜也不可能做出不符合第一范式的数据库,因为RDBMS不允许你把数据库表的一列再分成二列或多列。实际上,还真有这样的垃圾设计,我在某个项目中遇到,将 first_name,middle_name,last_name放在一个字段的,最后想分都分不开,完全折服。
2NF:消除了部分依赖(部分依赖由复合主键导致,显然所有单主键的表都符合2NF)
<反例> 一个表
(学号, 课程名称)→(姓名, 年龄, 成绩, 学分)
<部分依赖>
(课程名称)→(学分)
(学号)→(姓名, 年龄)
<改正> 改为三个表
(学号)→(姓名, 年龄)
(课程名称)→(学分)
(学号,课程名称)→(成绩)
3NF:消除了传递依赖
<反例>
(学号)→(姓名, 年龄, 学院, 学院地点, 学院电话)
<传递依赖>
(学号)→(学院)→(学院地点, 学院电话)
<改正> 改为两个表
(学号)→(姓名,年龄,学院)
(学院)→(地点,电话)
posted @
2008-04-16 14:16 Jcat 阅读(416) |
评论 (0) |
编辑 收藏
-b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
比较字符写法:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
* = 两个字符相等
* != 两个字符不等
* -n 非空串
posted @
2008-04-13 15:34 Jcat 阅读(4692) |
评论 (0) |
编辑 收藏
存储容量:是该存储设备上可以存储数据的最大数量,通常使用千字节(kb kilobyte)、兆字节(MB megabyte)、吉字节(GB, gigabyte)、太字节(TB ,terabyte)和PB(Petabyte)、EB(Exabyte)等来衡量。
1KB=2(10)B=1024B; 括号中的数字为2的指数(即多少次方)
1MB=2(10)KB=1024KB=2(20)B;
1GB=2(10)MB=1024MB=2(30)B。
1TB=2(10) GB=1024GB=2(40)B
1PB=2(10) TB=1024TB=2(50)B
1EB=2(10) PB=1024PB=2(60)B
1Byte相當於一個英文字母。
Kilobyte(KB)=1024B相當於一則短篇故事的內容。
Megabyte(MB)=l024KB相當於一則短篇小說的文字內容。
Gigabyte(GB)=1024MB相當於貝多芬第五樂章交響曲的樂譜內容。
Terabyte(TB)=1024GB相當於一家大型醫院中所有的X光圖片資訊量。
Petabyte(PB)=l024TB相當於50%的全美學術研究圖書館藏書資訊內容。
Exabyte (EB)=1024PB;5EB相當於至今全世界人類所講過的話語。
Zettabyte(ZB)=1024EB如同全世界海灘上的沙子數量總和。
Yottabyte(YB)=1024ZB相當於7000位人類體內的微細胞總和。
厂商制造硬盘时, 1K=1000B,1M=1000K,1G=1000M
所有标80G的硬盘,拿到电脑里就变小了(除以3个1.024):74.5 = 80 ÷ 1.07374
-----------
1 Byte = 8 bit,8位2进制数,2的8次方,256
一般网络的速度是以“位每秒”(bps)来表示。注意,是小写b(位),而不是大写B(字节)。所以,
显示的网络速度是需要除8的。
比如我的230K的无线猫,也就是说它一秒钟可传输230K个bit,其实也就28K个字节,而且这28K还只是理想值,最快确实达到过20K,一般能有5K都笑了。
posted @
2008-04-07 11:41 Jcat 阅读(247) |
评论 (0) |
编辑 收藏
NPV - Net Present Value - 净现值: 通过对未来的现金流按照一定的利率进行贴现,并求总。

注:IRR就是NPV=0时的r
e.g. 我做过的一个金融项目中, I0=financed amount(放出去的贷款),I1=I2=...=In=installment(还回来的月供,因为采用的等额还款法,自然是相同的咯),n=term(贷了多少期,也就是月)
注意,I1+I2+...+In > I0,废话,不然怎么赚钱呢。IRR - Internal Return Rate - 内部收益率:使净现值等于零时的折现率。
1)计算过程是不断迭代的。推测一个初始r值,然后不断逼近,直至方程等于或接近零。(试误法、插值法)
2)优点是可以从动态的角度直接反映投资项目的实际收益水平,又不受行业基准收益率高低的影响,比较客观。
3)缺点是计算过程复杂,尤其当经营期大量追加投资时,又有可能导致多个IRR出现,或偏高或偏低,缺乏实际意义。
4)只有内部收益率大于或等于行业基准收益率的投资项目才具有财务可行性。
5)是一种用来表示年度企业综合收益率的指标。
6)Average IRR:The arithmetic mean of the internal rate of return.
ROI - Return On Investment - 投资回报率:是指达产期正常年度利润或年均利润占投资总额的百分比。
1)公式:ROI = 年利润或年均利润/投资总额 × 100%
2)优点是计算简单
3)缺点是没有考虑资金时间价值因素,不能正确反映建设期长短及投资方式不同和回收额的有无等条件对项目的影响
4)只有投资利润率指标大于或等于无风险投资利润率的投资项目才具有财务可行性。
5)往往具有时效性,回报通常是基于某些特定年份。
<补充>
内部收益率(IRR)和投资回报率(ROI)均是技术经济学的概念。我们在投资建设中为了达到某种预期的目标,可制订多种不同的技术方案进行决策,而不同的技术方案所要的各种资源投入和由此带来的经济效果是不同的。技术经济分析主要解决两个问题,一个是判断投资方案的经济效益是否可以满足某一绝对检验标准的要求,即解决方案的“筛选”问题,二是对于多种备选方案,选择经济效益最好的方案,即解决方案的“择优”问题。
对项目投资效果进行经济评价的方法,概括起来分为两大类,即静态分析方法和动态方法,静态分析法不考虑资金的时间价值,比较简易实用,对若干方案进行粗略评价或对短期投资项目经济分析时,可用这种方法。
动态分析法考虑资金的时间价值,主要特点是用货币的时间价值原理将项目方案在不同时间发生的费用和效益,换算为同一时间的费用和效益,这不仅使技术方案本身的经济性分析有了科学的依据,而且使不同方案之间有了可比性。
IRR是动态分析法之一,其他还有净现值法、年值法、投资回收期法(动态)等。ROI属于静态分析法,其他还有投资回收期法(静态)、最小费用法、追加投资效果评价法等。
posted @
2008-04-01 22:45 Jcat 阅读(2001) |
评论 (0) |
编辑 收藏
Declaring and Initialization
Option
Explicit
Sub
arrayInVBA()
Dim
a1(
5
)
As
String
Debug.Assert
LBound
(a1)
=
0
Debug.Assert
UBound
(a1)
=
5
Debug.Assert
TypeName
(a1)
=
"
String()
"
Dim
a2(
2
To
5
)
As
Integer
Debug.Assert
LBound
(a2)
=
2
Debug.Assert
UBound
(a2)
=
5
Debug.Assert
TypeName
(a2)
=
"
Integer()
"
Dim
arrayFunction: arrayFunction
=
Array(
"
aa
"
,
"
bb
"
,
"
cc
"
,
"
dd
"
,
"
ee
"
,
"
ff
"
)
Debug.Assert
LBound
(arrayFunction)
=
0
Debug.Assert
UBound
(arrayFunction)
=
5
Debug.Assert
TypeName
(arrayFunction)
=
"
Variant()
"
'
initialize by Array() function
Dim
i
As
Integer
For
i
=
0
To
5
a1(i)
=
arrayFunction(i)
Next
i
For
i
=
0
To
5
Debug.Print a1(i)
Next
i
End Sub
posted @
2008-03-28 18:11 Jcat 阅读(355) |
评论 (0) |
编辑 收藏
Note If you need to determine whether an optional argument was passed to a function, you
MUST declare the optional argument as a
Variant data type. Then you can use the
IsMissing function within the procedure.
Option Explicit
Function explicitType(Optional s As Integer)
Debug.Assert IsNull(s) = False
Debug.Assert IsMissing(s) = False
Debug.Assert s = 0
explicitType = s
End Function
Function variantType(Optional s)
Debug.Assert IsNull(s) = False
Debug.Assert IsMissing(s) = True
'Debug.Print s 'Error 448
variantType = s
End Function
Sub test()
Debug.Print explicitType()
Debug.Print variantType()
End Sub
posted @
2008-03-28 16:23 Jcat 阅读(264) |
评论 (0) |
编辑 收藏
<引言>
随着社会的发展,在现代信息系统的开发中,需要存储的已不仅仅是简单的文字信息,同时还包括一些图片和音像资料或者是超长的文本。比如开发一套旅游信息系统,每一个景点都有丰富的图片、音像资料和大量的文字介绍。这就要求后台数据库要有存储这些数据的能力。
ORACLE自Oracle8i起通过提供LOB字段实现了该功能。
<LOB分类>
LOB,即Large Objects(大对象),是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据)。它又分为两种类型:内部LOB和外部LOB。
1.内部LOB将数据以字节流的形式存储在数据库的内部。因而,内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作。Oracle支持三种类型的内部LOB:
1)BLOB(二进制数据)
2)CLOB(单字节字符数据)
3)NCLOB(多字节国家字符数据)。
其中CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、音频等。
2.目前只支持一种外部LOB类型,即BFILE类型。在数据库内,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于操作系统的文件系统中。因而,该类型所表示的数据是只读的,不参与事务。
该类型可帮助用户管理大量的由外部程序访问的文件。
<LOB存储方式>
LOB由两部分组成:数据(值)和指向数据的指针(定位器)。尽管值与表自身一起存储,但是一个LOB列并不包含值,仅有它的定位指针。更进一步,为了使用大对象,程序必须声明定位器类型的本地变量。
当内部LOB被创建时,定位器被存放在列中,值被存放在LOB段中,LOB段是在数据库内部表的一部分。
当BFILE被创建时,定位器如同平常一样存储在列中,但是它的值被存储在数据库之外的操作系统文件中。
posted @
2008-03-27 11:12 Jcat 阅读(273) |
评论 (0) |
编辑 收藏
Controlling Function Recalculation
'
the same as Round excel-function
Function
nonStaticRand()
Application.Volatile
True
nonStaticRand
=
Rnd
()
'
Rnd is a vba-function
End Function
'
Calculate only once, so rand number won't be changed afterwards
Function
staticRand()
Application.Volatile
False
'
you can ignore this line, default is False
staticRand
=
Rnd
()
End Function
posted @
2008-03-26 16:26 Jcat 阅读(209) |
评论 (0) |
编辑 收藏
'
'Logical Structures
Dim
flag
As
Integer
'
1)
If
True
Then
flag
=
1
Else
flag
=
0
Debug.Assert flag
=
1
'
2)
If
False
Then
flag
=
1
Else
flag
=
0
End
If
Debug.Assert flag
=
0
'
3)
flag
=
IIf
(
True
,
1
,
0
)
Debug.Assert flag
=
1
'
'Logical Operators
Debug.Assert (
1
=
1
)
=
True
Debug.Assert
Not
(
1
=
1
)
=
False
Debug.Assert (
True
And
False
)
=
False
Debug.Assert (
True
Or
False
)
=
True
'
'Loop Structure
For
i
=
1
To
5

If
Then
Exit
For
'
相当于Break
End
If
Next
i
posted @
2008-03-25 18:05 Jcat 阅读(213) |
评论 (0) |
编辑 收藏
<概述>
LINUX文件权限针对的对象分三类(互斥的关系):
1. user(文件的拥有者)
2. group(文件拥有者所在的组,但不包括user)
3. other(其它用户,即user和group以外的)
LINUX用一个3位二进制数对应着文件的3种权限(1表示有该权限,0表示无):
第1位 读 r 100 4
第2位 写 w 010 2
第3位 执行 x 001 1
<CMD>查看权限#ls -l第一列,一共10位(drwxrwxrwx),就代表了文件的权限:
1)第一个d代表是一个目录,如果显示“-”,则说明不是一个目录
2)2-4代表user的权限
3)5-7代表group的权限
4)8-10代表other的权限
对于后9位:
r 代表可读(read),其值是4
w 代表可写(write),其值是2
x 代表可执行(execute),其值是1
- 代表没有相应权限,其值是0修改文件权限# chmod [ugoa][+-=][rwx] 文件名1)用户
u 代表user
g 代表group
o 代表other
a 代表全部的人,也就是包括u,g和o
2)行动
+ 表示添加权限
- 表示删除权限
= 表示使之成为唯一的权限
3)权限
rwx也可以用数字表示法,不过很麻烦要自己算,比如 rw=6<常见权限>
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限,最大权限
<trick>
如果只拥有一个文件的r权限,也是可以执行它的,只需在最前面加个点加个空格,e.g.:
#. /etc/bashrc
通过 # man . 可以找到官方的解释:
. filename [arguments]
Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.
其实这也合理:我可以r,就可以把内容copy出来,就可以自己造一个文件来实现同样的功能。
<解读 ls -l 命令>
drwxr-xr-x 2 root oinstall 4096 Jun 6 19:02 oracle
drwxrwxr-x 20 root sinstall 4096 Apr 22 14:03 sybase
一个文件(夹),有两个owner
1. user
2. group
创建一个文件时,它默认属于创建它的user,以及这个user所在的group。
但这两个owner其实是相互独立的(它们的权限也是相互独立的):一个文件可以属于user a,并指定它属于非a所在的组B。自然的,组B的成员b也就享有了这个文件。
(安装oracle时的用户设置就是很好的例子)
# chown user_a file_test
# chown :group_B file_test
posted @
2008-03-25 17:25 Jcat 阅读(375) |
评论 (0) |
编辑 收藏