第一篇:数据库问题小结
学习小结 1.前言:
前段时间的学习一直都没有融入实际的操作,因此这个阶段的学习我想结合着数据库来对配置数据进行一个定位。为了达到这个目的我就决定再我自己机子上安装oracle数据库,并安装omm网管服务器软件,虽然这个过程自己自认为已经相当娴熟了,(呵呵)可是实际的操作中由于数据库,网管软件安装的先后顺序不同出现了很多的问题。在这里我就想把我所遇到的问题以及解决办法告诉大家。
2.安装数据库
首先声明下我是在window下安装我的数据库软件的,因此配置过程不像linux上面安装时需要做诸多修改。虽然自己以前也装过,但是为了提高准确性还是从网管部人那里要了一个安装文档,一切按部就班按着文档走也没出现什么问题。直到配置监听程序时候出现了点问题:这里需要解释下我的数据库实例名为:tomc,IP为:10.62.88.71。
2.1 监听问题
在配置完监听程序之后我按照文档在listener.ora文件中加入了
(SID_DESC =(SID_NAME = tomc(ORACLE_HOME = D:oracleproduct10.2.0db_1)(global_dbname = tomc)也就是加了一个tomc的数据库监听实例,本来这个文件里面是有一个默认的监听实例,想想也是有道理的我就没多想,继续进行本地net服务名配置,在即将结束的时候输入网络服务名,一般默认输入数据库实例名(记住这点和listener.ora文件里的监听实例是必须对应的)。可是文档中输入的是:
开始我也没细想,就按照文档完成了输入,结果进行连接测试的时候老测试不成功。出现这样的提示:
我就对前面的配置进行了检查最后发现应该是刚才那个网络服务名出现了错误。如果设置成tomc_10.61.88.71的话在tnsnames.ora文件中会相应的生成
TOMC_10.61.88.71 =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = 10.61.88.718)(PORT = 1521))(CONNECT_DATA =(SID = TOMC)))而我们前面的监听程序里面却是tomc,因此导致连接不成功。意识到这一点之后我决定不按照文档了(反正这一段自己以明白),在配置监听程序的时候listener.ora文件我不做修改采用默认,本地Net服务名配置时网络名我设置成tomc_10.62.88.71,其余按照规定的填写。可是奇怪的事情又发生了,当我测试连接的时候:
然后貌似卡住了,什么都不显示了。。
2.2 注册表问题
我百思不得其解,颇为郁闷,自信心受到严重的打击,哈。不过既然问题出来了,就要想办法解决,首先我对前面的配置数据默默的回想了一遍确定没什么问题,然后考虑到是否是上一次配置失败对这次的连接有了影响从而导致局部死机的情况出现。
1.我想到了关闭进程,在任务管理器中我讲自己怀疑有可能的进程都一一关掉,结果丝毫没有发生任何变化。。。。。。失败。2.最后打开注册表编辑器(运行regedit),我搜索 oracle 字段,鼠标直到:
具体的东西也看不明白,不过看到OracleOraDb10g_home1TNSListener这个子树。我就意识到或许是由于它在作祟,第一次错误配置时已经在注册表中生成了相应的信息,后面的配置可能无法对他进行覆盖。虽然原因不是很明白但是大概可以定位到这里了,我就将这个表项删除,然后重启机器。(不知道linux服务器遇到是否会遇到这个问题)机器起来后按照刚才的监听配置完成之后测试:
成功!
3.导入数据库备份数据
这里先做个说明:早先我从网管服务器上导出了一份数据,此时我想讲这份数据导入到我自己数据库中,这样我自己也可以随时查看并做修改。文件存放的目录为:D:网管版本包
3.1缺少指定导入用户参数
懒得用工具了,我就随手打开命令端口输入:
结果导入失败 生成相应的日志文件,内容如下:
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0Production With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入.正在将 SYSTEM 的对象导入到 SYSTEM.正在将 UEP 的对象导入到 UEP IMP-00003: 遇到 ORACLE 错误 1435 ORA-01435: 用户不存在
成功终止导入, 但出现警告。
这个时候我真郁闷,开始我怀疑命令错误了,可是这个命令自己早已经乱熟于心了。不过我还是进入D:NetNumenums-svrtoolsoraEIPT打开了网管软件里面提供的工具,我用UltraEdit-32 软件打开run.bat,先讲这个工具里代码的调用关系理清然后找到导入文件那一段代码:
通过代码也坚定了我的命令内容,格式的正确性。(如果有兴趣的兄弟可以把那些工具都打开然后仔细地看看里面的内容,其实还蛮有意思)
3.3 真相大白
排除了命令的原因之后,实在想不到还有什么问题。无奈之下给黄建军总共发了一封邮件,说了一下情况,还是人家黄总猛啊,我问题一说黄总马上就答复我了:
黄总一说我也顿时明白了,我刚装的数据库里面还没有和网管匹配的表结构,这样导入数据时数据就不知道在数据口中如何的分布。在这里黄总还提到了一点数据库版本有对上号,oracle 10g的数据和oracle 9i的数据就不能兼容。此外还要考虑到网关版本的问题,不同的网管版本其表结构也不一样,因此在数据导入的时候一定要注意到这点。
余下的安装omm服务器就没什么好说的了,然后再次导入之后果然成功了。
4.查看数据库
安装完数据库之后,我自然没有忘记我的初衷(根据网管配置数据再查看相应的数据库表)。在这里向大家介绍一款工具,PLSQL Developer,这款工具是数据库开发者的最爱,里面有图形化的操作界面,可以图形化进行创建,插入,删除等操作,十分方便。由于大学中我经常用这个工具因此一切轻车熟路。
进去之后,直接点开索引寻找库里的表:
然而貌似没有我在参数字典上看到的那些熟悉的表名,问了研发部的一个哥们,才知道自己犯了多么愚蠢的一个错误。在网管软件中我们所有的配置数据都在数据库中的uep用户下保存(此时我才真正明白了uep的含义,同时也明白了为什么导出数据的时候都是导出uep用户的),而所有告警信息都存放在trns_pm 用户下。明白了这点,我马上在网管的相关属性文件里找到了这两个用户的密码:
trns_pmtrnspm uepu_tywg_2008
后面的事情就没什么好说的了。呵呵
4.经验总结
上面遇到的这些问题如果大家都用脚本运行的话,估计都不会出什么错误,但是我认为作为一个高级技术支持人员还是要对一些东西理解的清晰一点,通过发现问题----思索问题---定位问题----解决问题 这个过程我增强了自己对系统的理解,并提高了自己的动手以及解决问题的能力。
第二篇:数据库小结
数据库总结
1、数据库开课6天,到今天已全部结束
2、学习内容
一、数据库的安装与删除:已独立上机操作实现。
二、数据利器sql 1)用sql进行单表查询:
查询语句: select 所查内容 from 表 where 条件
排序: select 所查内容 from 表 where 条件order by排序的依据
分组:select 所查内容 from 表 where 条件 group by 分组依据 其他要显示的内容(having 条件)
字段运算查询:select 运算 from表
变换查询:select 原名 新名 from 表
2)多表查询:
无条件多表查询 select 所差内容 from 多个表
等值多表查询
select 所差内容 from 多个表 where 一个
表内容=另一个表内容
非等值多表查询select 所差内容 from 多个表 where 一个
条件 and(or)其他条件
3)嵌套查询
带in、any(some)、all、exist的嵌套查询:
select 所查内容 from 表 where 内容 in(select 所查
内容 from 表 where 条件)
注意:any(some)包括等于条件、all不包括
并(union)、交(intersect)、差操作(minus): 4)常用的函数查询
Ceil(n)取大于等于n的最小整数
Floor(n)取小于等于n的最大整数
Mod(m,n)取m整除n后的余数
Pow(m,n)取m的n次方
Round(m,n)取四舍五入,保留小数点后n位
Sign(n)n》0取1;n=0取0;n《0取-1
Avg(字段名)求平均值
Count(字段名)或者count(*)统计总数
Min(字段名)计算数值型字段最小数
Max(字段名)计算数值型字段最大数
Sum(字段名)计算总数 5)录入数据
单行录入:Insert into 数据表(字段1,2。。)values
(字段1的值,2的值。。)
多行录入:insert into 数据表(字段1,2。)(select
(字段1或运算,2或运算。。)from
数据表 where 条件)表间数据复制:create table 表名 as(select 字段from原
有的表where 条件)
6)删除记录
删除记录:Delete from 数据表 where 条件
整表数据删除:truncate table 数据表 7)更新数据
直接赋值更新:update 数据表 set 字段名1=新的赋值,字段名2=新的赋值。where条件
嵌套更新:update 数据表 set 字段名1=(select 字段列
表 from 数据表 where 条件),字段名(select字段列表 from 数据表 where条件)。。
三、编程进阶Pl/sql 1)程序结构
Delacre
定义语句段
Begin
执行语句段
Exception
异常处理语句段 End 2)基本语法
定义变量%type:获得字段的数据类型
定义变量%rowtype:获得整个记录的数据类型f 定义记录类型变量 :type 记录类型 is record()
定义一维表类型变量:type 表类型 is table of 类型 index by
binary_integer, 表变量名 表类型
定义多维表类型变量
3)表达式
数值表达式:加+,减-,乘*,除/,乘方**
字符表达式:连接符号||
关系表达式(9种): 4)事务处理
提交:Committee
回滚:rollback
保存点:savepoint 5)游标
定义、打开、提取、关闭 6)过程
创建、查询、修改、执行
·
第三篇:操作数据库小结
一.查询操作
对数据进行查询操作时,有两种情况:一是查询单个值,二是 查询若干条记录。
1、查询单个值
需要使用Command对象的ExecuteScalar()方法:步骤如下:(1)、创建Connection对象(数据库连接对象)。(2)、创建查询用的SQL语句。(3)、利用SQL语句和Connection对象创建Command对象。(4)、打开数据库连接,调用Connection对象的Open()方法。(5)、调用Command对象的ExecuteScalar()方法,返回一个标量值。(6)、操作完成后关闭数据库连接,调用Connection对象的Close()方法。
2、查询若干条记录
需要使用Command对象的ExecuteReader()方法:步骤如下:(1)、创建Connection对象(数据库连接对象)。(2)、创建查询用的SQL语句。(3)、利用SQL语句和Connection对象创建Command对象。(4)、打开数据库连接,调用Connection对象的Open()方法。(5)、调用Command对象的ExecuteReader()方法,返回一个DataReader对象。(6)、调用DataReader对象的Read()方法逐行读取记录,如果读到记录返回Ture,否则返回False.(7)、使用(type)dataReader[列名或索引]的方式读取这一行中某一列的值。(8)、关闭DataReader对象(9)、操作完成后关闭数据路连接,调用Connection对象的Close()方法。
二、非查询操作
对数据库执行非查询操作时,包括增加,修改,删除数据,都使用Command对象的ExecuteNonQuery()方法,步骤如下:
(1)、创建Connection对象(数据库连接对象)(2)、创建增删改用的SQL语句。(3)、利用SQL语句和Connection对象创建Command对象。(4)、打开数据库连接,调用Connection对象的Open()方法。(5)、调用Command对象的ExecuteNonQuery()方法执行命令,返回受影响的行数。(6)、操作完成后关闭数据库连接,调用Connection对象的Close()方法。
本章总结
1、使用DataReader查询数据记录,通过Command对象的ExecuteReader()方法返回一个DataReader对象。
2、使用DataReader读取数据室每次调用Read()方法读取一行数据。
3、DataReader使用完后要调用它的Close()方法关闭。
4、使用Command对象的ExecuteNonQuery()方法对数据进行增删改的操作。
5、ExecuteNonQuery()方法返回受影响的行数。
6、ListView(列表视图)控件有5种视图模式,重点是Details 列表视图的Items属性表示包含在空间中的所有项的结合,每一个项都是一个ListViewItem,使用Items.Add()方法向列表视图中添加一项 调用列表视图项的SubItems.AddRange()方法添加它的子项
ListViewItem lviStudent = new ListViewItem(loginID);创建一个ListView项 lviStudent.Tag=(int)dataReader[“StudentId”];lvStudent.Items.Add(lviStudent);//向ListView中添加一个新项 lviStudent.SubItems.AddRange(new string[] {studentName,studentNo,userState});//向当前项中添加子项
7、ContextMenuStrip(快捷菜单)控件可以与其他控件结合使用,通过设置控件的ContextMenuStrip属性来指定它的快捷菜单。
想鼠标右键单击文本框时出现快捷菜单,就选中文本框在属性窗口中找到它的ContextMenuStrip属性,选择已有的右键菜单控件 txtLoginId.Focus():
下拉列表:
创建Command对象调用Command对象的ExecuteReader()方法创建DataReader对象(sqlDataReader dataReader=command.ExecuteReader())使用DataReader的Reader()方法逐行读取数据(放回bool类型)读取当前行的某列的数据(cboGrade.Items.Add(dataReader[“列名”]))关闭DataReader对象,Close()方法
向数据库中添加数据:
创建Connection对象定义要执行的SQL语句创建Command对象执行ExecuteNonQuery()方法根据返回的结果进行后续的处理
双击显示出ID:
MessageBox.show(dataGridView1.SelectedRows[0].cells[“ColID”].value.ToString());
刷新:
1,BindStudentByLoginID(txtBox.Text)2,listView.Items.RemoveAt(Listview1.SelectedIndices[0])//只能删除选中的行(选中第几个)
第四篇:Visual Basic数据库操作方法小结
Visual Basic数据库操作方法小结
笔者和同事们在使用VB对数据库操作应用时,总结了如下的几种方法,供初学者参考,希望能对大家有所启发。
1、数据库打开/关闭方法的选择
在通常情况下,数据库的打开操作是在程序代码中使用OpenDatabase方法实现,其格式如下:Set database=workspace.OpenDatabase(dbname,options,readonly,connect)
可以通过指定数据库名字、打开方式、连接信息等参数打开一个现已存在的数据库,使用Close方法即可关闭该数据库。由于涉及VB代码的编写,其软件编制工作比较复杂。另一方面,VB的数据控件(Data Control)也可以执行数据库的打用关闭操作。我们可以在数据控件的属性窗口中预先填好数据库打开的相关参数,一旦该数据控件启动,数据库便会自动以指定的方式打开,而当该数据控件终止时,对应的数据库也将自动关闭。对于按这二种方式打开的数据库,其后的数据库访问操作没有什么本质的区别。
以上两种数据库打用关闭的方法各有千秋:使用OpenDatabase方法可以在程序运行中动态地设置数据库打开参数,并且可以多次以不同的方式打开和关闭同一个数据库,具有相当大的灵活性。而如果使用数据控件,则不需要另外编写VB代码,只要在程序编制时预先设置数据库的相关参数,程序开始运行后便会自动地以我们指定的方式打开数据库,并在程序终止时自动关闭该数据库,因此显得相当方便。在实际应用中,可以视情况的不同而采用不同的处理方法:如果要求数据库在程序运行中始终处于打开状态并且其打开方式保持不变(如一直处于只读状态),那么,可以采用数据控件方法打开数据库;如果要求数据库在程序运行中时而打开时而关闭,或者经常在只读和读写方式间来回切换,则只能采用OpenDatabase方法编写程序代码。
2、通过相对路径指定数据库文件
在很多情况下,不管采用上述哪一种方法打开数据库,都必须在程序设计时就指定需要打开的数据库文件。但是,我们通常不能保证该软件完成后一定会被安装在每台机器的同一目录下。因此该数据库文件的绝对路径一般在设计时还难以完全确定,只能采用相对路径的办法来解决这个问题。
在VB中,App对象是一个全局对象,用来提供当前应用程序的相关信息,其Path属性反映的是当前应用程序的可执行文件(。exe)所在的绝对路径,并且只在程序运行时才有效。通过使用App对象的Path属性,可以方便地获得当前程序所在的目录路径。因此,如果把数据库文件存放在与程序路径相关的目录下,便可以在程序设计时就指定数据库文件的相对路径,当程序运行时,通过App对象的Path属性动态地获取其绝对路径。
下面的一段代码,用来在程序开始运行时获取程序的路径,并赋值给变量AppPath,然后在数据控件Data1的Database Name属性中与数据库文件的相对路径“DatabaseSample.Mdb”结合,组成数据库文件的绝对路径。这段代码通常出现在Form-Load中: Dim AppPath As String ' 设置路径变量 AppPath=App.Path ' 获取程序路径 If Right(AppPath,1)<>“"Then AppPath=AppPath+”“ ' 若路径尾部没有”“,则添加之
Data1.Database Name=AppPath+”DatabaseSample.mdb“ ' 与相对路径结合,组成绝对路径
3、用SQL语句完成数据库操作
SQL也就是结构化查询语言,是用于数据库查询的一种通用标准语言,在现今的大多数数据库软件系统中均得到支持。1句SQL语句通常可以完成以前由许多条语句才能完成的复杂的数据库查询操作,具有较高的工作效率。
在VB中,SQL语句往往作为某些特定方法的参数而得以执行(没有FoxPro等数据库软件那样直截了当),比如可以把SQL语句作为Execute方法的1个字符串参数而执行,其格式如下: object.Execute SQL-statement,options 在其中的SQL-statement字符串中,可以使用标准的SQL语句,如:SELECT、INSERT、DELETE及UPDATE等。下面的例子是在数据库对象DB中执行SQL语句,从当前数据库的EMployees数据表中,选择字段LastName='King'的所有记录,并将这些记录的LastName和FirstName这2个字段的内容,保存到同一数据库的Backup数据表中:
DB.Execute(”SELECT LastName,FirstName INTO Backup FORM Employees WHERE LastName='King';“)
4、For语句在数据库中的应用
For语句是几乎所有高级语言都有的语句,通常用来完成指定次数的循环,在循环中可以完成一些指定的工作。而在VB中,For语句还可以用来对某个集合中的每1个元素循环执行若干操作,而不必预先设定循环次数,其格式如下: For Each element In group [statements] Next[element] For语句的这一特点可用于按照指定条件搜索整个数据库。以下的代码便可以对数据库对象DB所指的数据库中的所有数据表进行搜索,并完成指定的操作:
For Each Td In DB.Table Defs ' 循环搜索数据库中的所有数据表…… …… ' 对数据表执行指定的操作Next
5、复制数据库的结构定义
在数据库应用中,经常需要在程序运行时动态地把一个数据库的结构定义完整地复制到另一个数据库中。由于新型的数据库可以同时包含若干个数据表,而每个数据表的结构定义又不近相同,因此,如果通过逐个定义数据表中所有字段的类型、长度的方法复制数据库结构,则该程序将变得相当冗长和复杂,日后的维护也比较困难。但是,通过综合运用上述的几种应用方法,用相当短的VB语句完成同样的工作,实且程序也易于理解和维护。程序清单如下:
Sub CopyDBStrnc(src As String,dst As String)' 定义子程序Copy DBStrnc,用于复制数据库结构
' 调用参数: ' src--源数据库的文件名
' dst--目的数据库的文件名
Dim DB As Database,Td As TableDef,SQLstr As String ' 定义变量:
' DB--数据库对象
' Td--数据表定义对象
' SQLstr--SQL语句变量
Set DB=Create Database(dst,dbLangGeneral)' 创建目的数据库dst ' 关闭目的数据库dst DB.Close Set db=OpenDatabase(src,False,True)' 以共享、只读方式打开源数据库src For Each Td In DB.TableDefs
' 循环搜索源数据库DB中的所有数据表定义
If(Td.Attributes And dbSyste mObect)=0 Then
' 忽略系统数据表,只针对用户定义的数据表进行搜写
SQLstr=”SELECT * INTO“+Td.Name+”IN“+dst+”'FROM“+
Td.Name+”'IN“+src+”'WHERE False'
' 对SQL语句变量赋值,完成以下功能:
' 从源数据库src的数据表中选择所有字段
' 存入目的数据库dst的同名数据表中
' 选择数据表的字段定义,不包括任何记录
DB.Execute(SQLstr)' 执行SQL语句
End If Next ' 结束循环搜索
DB.Close ' 关闭源数据库 Exit Sub ' 结束子程序定义
第五篇:浅析电子数据库的法律保护问题(范文)
1994年北京阳光数据公司(以下简称阳光公司),与国内的15家商品交易所、两家证券交易所谈判,分别签定了实时信息数据使用、编辑、转播许可合同。阳光公司将这些数据重新整理编辑加密后,使其成为标准化的数据流,通过国家卫星数据广播系统发送出去,供全国各地的用户使用。这个数据系统被称为“SIC实时金融”系统。由于该数据信息能够给使用者带来
可观的经济效益,故阳光公司与每一个客户签订的合同中约定:他们为终端客户,无权向任何人再转发该系统数据。”“1995年11月阳光公司无意中发现,上海霸才数据信息公司(以下简称霸才公司)正在使用并转播阳光公司的‘SIC实时金融’系统,而霸才公司未向阳光公司购买‘SIC实时金融’系统使用权,是通过接收发送给签约客户上海易利实业有限公司的信息获取的。阳光公司遂起诉霸才公司,要求停止侵权行为,公开登报、消除影响并赔礼道歉,赔偿损失500万元。[1]在本案审理过程中,原告阳光公司诉称“SIC实时金融”系统是按一定编排体例进行编排,具有独创性,属编辑作品。但是,无论是一审的北京市第一中级人民法院,还是二审的北京市高级人民法院,都认为“SIC实时金融”系统,不是著作权法意义上的作品。1998年北京市高级人民法院作出了终审判决,其称:“SIC实时金融系统”信息作为一种新型的电子信息产品应属电子信息库,在本质上是特定金融数据的汇编。这种汇编在数据编排和选择上并无著作权法所要求的独创性,不构成著作权法意义上的作品,不能受到著作权法的保护。”在本案中,法院认为阳光公司的“SIC实时金融”数据库不构成著作权法上的作品,而仅仅以“不正当竞争”为依据判令被告赔偿阳光公司408400元,并当面道歉。但是,本案所涉及的法律问题是一个较为复杂的法律问题,世界各国对数据库的保护问题的态度是不尽相同的,但在我国对于这方面的司法保护是相对落后的。因此,有必要借鉴世界各国经验,完善我国法律法规,以建立有我国特色的数据库保护制度,规范市场竞争。
二、“数据库”的概念及法律保护的难点
(一)“数据库”的概念及法律性质上述案件诉争的焦点是阳光公司对其编辑的数据流能否享有权利,以及享有什么样的权利。要回答这个问题,必须首先明确电子数据库的概念以及其法律性质。严格意义上的电子数据库是指为了满足某一个部门中多个用户应有的需要,按照一定的数据模型在计算机系统中组织、储存和使用的相互联系的数据集合。所以说,数据库应当称之为信息集合体(collectionofinformation)。数据库的普遍出现和运用是计算机的普及和技术成熟的结果,数据库技术是计算机软件技术的一个组成部分,是对信息进行收集、整理、储存与高速传递处理的一门技术。数据库具有集合性、有序性、可访问性以及信息容量的庞大性等特征。从世界大多数国家的一般规定来看,受版权保护的数据库从作品属性看应属于编辑作品,并且汇编的内容既可以是享有著作权的作品,也可以是不享有著作权的其它数据、材料。但是,这些汇编的数据库内容是不受数据库法律制度所保护的。另外,如果某种数据库没有达到版权保护标准,那么法律给其以特殊保护。
(二)数据库法律保护的问题症结所在—对“原创性”标准的理解根据著作权法的原理,资料和数据库是两个不同的权利客体,两者都必须具备原创性,数据库的著作权并不及于数据库中的资料,这些资料可能有独立的著作权,也可以没有著作权。具有著作权的资料,其著作权并不涵盖数据库;没有著作权的资料,人人可以使用,可能组成不同著作权的数据库。对于不具有原创性的资料和数据库是否应予保护,长久以来争论不休;甚至对于具备著作权要件的资料和数据库,也有人主张不应给予保护。数据库在著作权法上被视为是一种编辑,即将现有的资料加以搜集、整理。当初认为编辑著作应受保护是基于编辑人的劳力和投资,这种说法,即所谓“血汗论”。任何人可以因为这些“血汗”而节省了自己的劳动。20世纪以后,这种观念渐渐改变,原创性和创造力成为著作权保护的标准。美国最高法院在1991年的Feisty一案中,明确指出白页电话薄资料虽然丰富,也使许多人得到方便,但不具有任何创意,因而不受著作权法保护。因此,对“原创性”标准的不同理解就成为数据库是否享有著作权的关键。将数据库纳入著作权法(版权法)的保护范围已被国际条约和大多数国家著作权法(版权法)所采纳。虽然有些国家仍然强调“原则性”标准,但此种标准已经大为宽松,如美国著作权法第101条指出数据库系指以搜集并整合既有素材或资料为形式之著作,该类素材和资料必须经由选取、整理、编排,且就整体而言具有原创性标准。欧盟的数据库法律保护指令第三条第一项也指出:“一数据库欲得著作权之保护,仍然必须在资料的选择与编排上表现出精神创作性始可”,并在第七条提出“对于需要为重大投资,然而在资料之选择及编排上不具有精神创作性之数据库,提供特别立法保护。