数据抽取系统需求说明书文档格式.docx
《数据抽取系统需求说明书文档格式.docx》由会员分享,可在线阅读,更多相关《数据抽取系统需求说明书文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
数据库系统(databasesystems),是由数据库及其管理软件组成的系统。
它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。
它是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。
1.3范围
数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。
1.4术语定义
数据记录、属性、字段、列、行:
在关系数据库中,数据表是存储数据的基本单元,由行和列两部分组成的。
其中,行用来实体中的具体数据,在数据表中每一行中的数据被称为一条数据记录,也可以简称为记录;
字段是表中的一列,用来保存数据表中某一条记录中的特定信息。
字段在关系数据库中也可以成为列。
行是数据表中的一条记录。
INSERT和REPLACE:
他们都是向表中插入新的数据。
这两条语句的语法类似。
它
们的主要区别是如何处理重复的数据。
UPDATE:
它的功能是更新表中的数据。
这的语法和INSERT的第二种用法相似。
必须提供表名以及SET表达式,在后面可以加WHERE以限制更新的记录范围。
DELETE:
它可以通过WHERE对要删除的记录进行选择。
TRUNCATETABLE:
将删除表中的所有记录。
1.5运行环境
¯
软件环境
名称
语种
操作系统
WindowsServer
2003
简体中文
操作系统的附加功能
SP4
3
数据库平台
oracle
8.1
应用平台
tomcat
5.x
客户端软件
MSIE
6.0
硬件环境
服务器
最低配置
推荐配置
应用和数据库服务器
1CPU:
P42.0G
P42.8G
Mem:
512M
2G
HD:
40G
120G
邮件服务器
1G
80G
1.6预期的读者和阅读建议
列举了产品需求规格说明所针对的不同读者,例如开发人员、项目经理、营销人员、用户、测试人员或文档的编写人员。
描述了文档中剩余部分的内容及其组织结构,提供了最适合于每一类型读者阅读文档的建议。
2需求说明
2.1系统功能层次图
2.1.1数据库系统
2.1.1.1创建数据库
a)使用SHOW语句找出在服务器上当前存在什么数据库:
mysql>
SHOWDATABASES;
+----------+
|Database|
|mysql|
|test|
3rowsinset(0.00sec)
b)创建一个数据库abccs
CREATEDATABASEabccs;
注意不同操作系统对大小写的敏感。
c)选择你所创建的数据库
USEabccs
Databasechanged
此时你已经进入你刚才所建立的数据库abccs.
2.1.1.2删除数据库
a)删除一个已经确定存在的数据库
dropdatabasedrop_database;
QueryOK,0rowsaffected(0.00sec)
b)删除一个不确定存在的数据库
ERROR1008(HY000):
Can'
tdropdatabase'
drop_database'
;
databasedoesn'
texist
发生错误,不能删除'
数据库,该数据库不存在。
dropdatabaseifexistsdrop_database;
QueryOK,0rowsaffected,1warning(0.00sec)//产生一个警告说明此数据库不存在
createdatabasedrop_database;
QueryOK,1rowaffected(0.00sec)
//ifexists判断数据库是否存在,不存在也不产生错误
2.1.1.3操作数据库
2.1.1.3.1创建数据库表
首先看现在你的数据库中存在什么表:
SHOWTABLES;
Emptyset(0.00sec)
接着说明刚才建立的数据库中还没有数据库表。
下面来创建一个数据库表mytable:
例如:
建立一个公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。
CREATETABLEmytable(nameVARCHAR(20),sexCHAR
(1),
->
birthDATE,birthaddrVARCHAR(20));
注意:
由于name、birthadd的列值是变化的,因此选择VARCHAR,其长度不一定是20。
可以选择从1到255的任何长度,如果以后需要改变它的字长,可以使用ALTERTABLE语句。
);
性别只需一个字符就可以表示:
"
m"
或"
f"
,因此选用CHAR
(1);
birth列则使用DATE数据类型。
创建了一个表后,可以看看刚才做的结果,用SHOWTABLES显示数据库中有哪些表:
+---------------------+
|Tablesinmenagerie|
|mytables|
+---------------------+
创建表名为T_student的学生信息表。
CREATETABLET_student
(
stuIdvarchar(15)PRIMARYKEY,
stuNamevarchar(10)NOTNULL,
ageintNOTNULL,
sexvarchar
(2)NOTNULL,
birthdatetimeNOTNULL
)
2.1.1.3.1.1增加数据表信息
|关键字:
INSERT和REPLACE
INSERT和REPLACE语句的功能都是向表中插入新的数据。
它们的主要区别是如何处理重复的数据。
a)INSERT的一般用法
MySQL中的INSERT语句和标准的INSERT不太一样,在标准的SQL语句中,一次插入一条记录的INSERT语句只有一种形式。
INSERTINTOtablename(列名…)VALUES(列值);
而在MySQL中还有另外一种形式。
INSERTINTOtablenameSETcolumn_name1=value1,column_name2=value2,…;
第一种方法:
将列名和列值分开了,在使用时,列名必须和列值的数一致。
如下面的语句向users表中插入了一条记录:
INSERTINTOusers(id,name,age)VALUES(123,'
姚明'
25);
第二种方法:
允许列名和列值成对出现和使用,如下面的语句将产生中样的效果。
INSERTINTOusersSETid=123,name='
age=25;
如果使用了SET方式,必须至少为一列赋值。
如果某一个字段使用了省缺值(如默认或自增值),这两种方法都可以省略这些字段。
如id字段上使用了自增值,上面两条语句可以写成如下形式:
INSERTINTOusers(name,age)VALUES('
25);
INSERTINTOusesSETname='
MySQL在VALUES上也做了些变化。
如果VALUES中什么都不写,那MySQL将使用表中每一列的默认值来插入新记录。
INSERTINTOusers()VALUES();
如果表名后什么都不写,就表示向表中所有的字段赋值。
使用这种方式,不仅在VALUES中的值要和列数一致,而且顺序不能颠倒。
INSERTINTOusersVALUES(123,'
如果将INSERT语句写成如下形式MySQL将会报错。
INSERTINTOusersVALUES('
b)使用INSERT插入多条记录
INSERTINTOusers(name,age)
VALUES('
25),('
比尔.盖茨'
50),('
火星人'
600);
上面的INSERT语句向users表中连续插入了3条记录。
值得注意的是,上面的INSERT语句中的VALUES后必须每一条记录的值放到一对(…)中,中间使用"
"
分割。
假设有一个表table1
CREATETABLEtable1(nINT);
如果要向table1中插入5条记录,下面写法是错误的:
INSERTINTOtable1(i)VALUES(1,2,3,4,5);
MySQL将会抛出下面的错误
ERROR1136:
Columncountdoesn'
tmatchvaluecountatrow1
而正确的写法应该是这样:
INSERTINTOtable1(i)VALUES
(1),
(2),(3),(4),(5);
当然,这种写法也可以省略列名,这样每一对括号里的值的数目必须一致,而且这个数目必须和列数一致。
如:
INSERTINTOtable1VALUES
(1),
(2),(3),(4),(5);
2.1.1.3.1.2删除数据表信息
DELETE和TRUNCATETABLE
在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATETABLE语句。
DELETE语句可以通过WHERE对要删除的记录进行选择。
而使用TRUNCATETABLE将删除表中的所有记录。
因此,DELETE语句更灵活。
如果要清空表中的所有记录,可以使用下面的两种方法:
DELETEFROMtable1
TRUNCATETABLEtable1
其中第二条记录中的TABLE是可选的。
如果要删除表中的部分记录,只能使用DELETE语句。
DELETEFROMtable1WHERE...;
如果DELETE不加WHERE子句,那么它和TRUNCATETABLE是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATETABLE返回的是0。
如果一个表中有自增字段,使用TRUNCATETABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE1或WHEREtrue。
DELETEFROMtable1WHERE1;
上面的语句在执行时将扫描每一条记录。
但它并不比较,因为这个WHERE条件永远为true。
这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的DELETE大得多。
DELETE和TRUNCATETABLE的最大区别是DELETE可以通过WHERE语句选择要删除的记录。
但执行得速度不快。
而且还可以返回被删除的记录数。
而TRUNCATETABLE无法删除指定的记录,而且不能返回被删除的记录。
但它执行得非常快。
注:
和标准的SQL语句不同,DELETE支持ORDERBY和LIMIT子句,通过这两个子句,我们可以更好地控制要删除的记录。
如当我们只想删除WHERE子句过滤出来的记录的一部分,可以使用LIMIB,如果要删除后几条记录,可以通过ORDERBY和LIMIT配合使用。
假设我们要删除users表中name等于"
Mike"
的前6条记录。
可以使用如下的DELETE语句:
DELETEFROMusersWHEREname='
Mike'
LIMIT6;
一般MySQL并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用ORDERBY对记录进行排序。
ORDERBYidDESCLIMIT6;
2.1.1.3.1.3更新数据表信息
UPDATE
UPDATE的功能是更新表中的数据。
UPDATEtable_anemSETcolumn_name1=value1,column_name2=value2,...WHERE...;
如下面的语句将users表中id等于123的记录的age改为24
UPDATEusersSETage=24WHEREid=123;
同样,可以使用UPDATE更新多个字段的值UPDATEusersSETage=24,name='
WHEREid=123;
上面的UPDATE语句通过WHERE指定一个条件,否则,UPDATE将更新表中的所有记录的值。
在使用UPDATE更新记录时,如果被更新的字段的类型和所赋的值不匹配时,MySQL将这个值转换为相应类型的值。
如果这个字段是数值类型,而且所赋值超过了这个数据类型的最大范围,那么MySQL就将这个值转换为这个范围最大或最小值。
如果字符串太长,MySQL就将多余的字符串截去。
如果设置非空字段为空,那么将这个字段设置为它们的默认值,数字的默认值是0,字符串的默认值是空串(不是null,是"
)。
有两种情况UPDATE不会对影响表中的数据。
a)当WHERE中的条件在表中没有记录和它匹配时。
b)当我们将同样的值赋给某个字段时,如将字段abc赋为'
123'
,而abc的原值就是'
。
和INSERT、REPLACE一样,UPDATE也返回所更新的记录数。
但这些记录数并不包括满足WHERE条件的,但却未被更新的记录。
如下同的UPDATE语句就未更新任何记录。
UPDATEusersSETage=30WHEREid=12;
需要注意的时,如果一个字段的类型是TIMESTAMP,那么这个字段在其它字段更新时自动更新。
在有些时候我们需要得到UPDATE所选择的行数,而不是被更新的行数。
我们可以通过一些API来达到这个目的。
如MySQL提供的CAPI提供了一个选项可以得到你想要的记录数。
而MySQL的JDBC驱动得到的默认记录数也是匹配的记录数。
UPDATE和REPLACE基本类似,但是它们之间有两点不同。
a)UPDATE在没有匹配记录时什么都不做,而REPLACE在有重复记录时更新,在没有重复记录时插入。
b)UPDATE可以选择性地更新记录的一部分字段。
而REPLACE在发现有重复记录时就将这条记录彻底删除,再插入新的记录。
也就是说,将所有的字段都更新了。
2.1.1.3.1.4查询数据表信息
SELECT
SELECT最简单的形式是从一张表中检索每样东西:
SELECT*FROMpet;
其结果为:
+----------+--------+---------+------+------------+------------+
|name|owner|species|sex|birth|death|
|Fluffy|Harold|cat|f|1993-02-04|NULL|
|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|
|Chirpy|Gwen|bird|f|1998-09-11|NULL|
|Fang|Benny|dog|m|1990-08-27|NULL|
|Bowser|Diane|dog|m|1990-08-31|1995-07-29|
|Whistler|Gwen|bird|NULL|1997-12-09|NULL|
|Slim|Benny|snake|m|1996-04-29|NULL|
|Puffball|Diane|hamster|f|1999-03-30|NULL|
查询特定行:
你能从你的表中只选择特定的行。
例如,如果你想要验证你对Bowser的出生日期所做的改变,像这样精选Bowser的记录:
SELECT*FROMpetWHEREname="
Bowser"
+--------+-------+---------+------+------------+------------+
你可以对照前一个例子来验证。
查询特定列:
如果你不想要看到你的表的整个行,就命名你感兴趣的列,用逗号分开。
例如,如果你想要知道你的动物什么时候出生的,精选name和birth列:
SELECTname,birthFROMpetwhereowner="
Gwen"
+----------+------------+
|name|birth|
|Claws|1994-03-17|
|Chirpy|1998-09-11|
|Whistler|1997-12-09|
索引查询:
在实际应用中,为了加快访问速度,节省访问时间,一般都需要使用索引进行查询。
在使用一本书学习某一部分知识是时候,一般都需要书后提供的索引,一般书后的索引都会以字母顺序将相关的主题信息列出,通过这个索引的指引,读者可以很快查找到想要的信息,而不需要为了查询某一个知识点而将书中所有的内容都翻看一遍,节省了查阅的时间,也保证了学习效率。
数据库中的索引与书后提供的索引的功能相同,在数据库的应用中,往往一张数据表中会包含上千条甚至上万条记录,因此为了加快对数据表的访问,通常需要在数据表中建立适当的索引。
通过建立索引,在查询数据表中的数据时,数据库可以很快的将其找到,而不用扫描整个数据表。
附加:
主键:
为了保证在一张数据表中不会出现两个完全相同的数据记录,需要为每一张数据表都定义一个主键。
主键作为数据表中的唯一标示,保证了一条记录的唯一性。
通过主键可以区分数据表中的每一条记录。
在创建数据表时,需要保证被定义为主键的列的列值唯一,并且不能为空值(即NULL值)。
主键在关系模型中用来约实体完整性。
所谓实体完整性约束是指对数据表中行的完整性约束。
在实体完整中,需要有一个主键来唯一标示数据表中每主键数据表中的一行的数据记录,唯一且不能为空值。
外键:
外键是用来定义表与表之间的关系的。
在数据表中,外键是这样定义的:
如果属性列F是关系B中一个属性(并不是关系B的主键),并且属性列F是关系A中的主键,则F就是关系B的关键。
关系A中的表被称为主表,关系B中的标被称为主表的从表。
约束:
为了保证数据的完整性,需要使用数据库约束。
完整约束包括对表的约束和对列的约束。
表约束主要包括唯一约束、主键约束、外键约束和CHECK约束,列约束除了包括唯一约束、参照约束和CHECK约束之外,还有非空约束。
唯一约束(UNIQUE):
保证使用唯一约束的某一列或者一组列中没有相同的值,即保证列的值的唯一性。
但是唯一约束中可以允许在列中插入空值(NULL值)。
主键约束(PRIMARYKEY):
保证使用主键约束的列中只能有唯一的值,并且不能包含空值。
数据表中的每一列只能定义一个PRIMARYKEY。
外键约束(FOERINGKEY):
保证表的参照完整性确保对一个表的数据操作不会对与之关联的表造成不利的影响。
检查约束(CHECK):
限制列的取值范围或者取值条件。
可以为一个列定义多个CHECK约束。
非空约束(NOTNULL):
只用来约束列。
在向该列插入数据时不允许插入空值。
2.1.1.3.2删除数据表
如果在实际使用中某一个数据表已经不再需要时,可以使用DROPTABLE语句将其删除。
其语法格式如下:
DROPTABLEtable_name[CASCADEC