文档库 最新最全的文档下载
当前位置:文档库 › 几个小型数据库的比较

几个小型数据库的比较

几个小型数据库的比较
几个小型数据库的比较

几个小型数据库的比较

Access,MSDE 2000,Embedded Firebird,SQLite等都是可以免费再分发(free redistributable)的数据库。

相比而言,MSDE 2000 显著缺点是需要安装,最大优点是和服务器端的SQL Server 编程模型一致,开发便利。

Access的显著缺点是功能较少,不支持事务等常用功能,最大优点是简单、多数开发者都很熟悉,部署也很方便。

SQLite支持事务,也是一款单文件数据库,比较不足的是 .NET Data Provider 还不是很成熟。

Firebird则同时具有:单文件、部署简单不需安装(只需XCOPY 两个文件)、支持事务、存储过程、触发器,.NET Data Provider比较稳定成熟等优点。

这个星球上的数据库实在不胜枚举,这里只列一些我接触过的常见的。

可以稍微夸张点说,有交互的应用,起码得用一下数据保存,即便是自定义结构的数据保存,还是最常见的INI、XML等,都可以算是“数据库”,真正点的,如DBase系列、FoxBase、FoxPro、MSAccess、InterBase、MS SQL Server、Oracle、DB2等,这些是商业化的数据库,前面几个只能算是数据库,后面几个是RMDBS(关系型数据库管理系统)。

对应商业化的,有开源的:SQLite、SimpleSQL、Berkely DB、Minosse、Firebird( 前身是是Borland公司的InterBase)、PostgreSQL、MySQL 等。

□SQLite:大家可以看我的SQLite系列随笔,C编写的,可以跨操作平台,支持大部分ANSI SQL 92,它是嵌入式的轻量级关系形数据库引擎,只需要一个DLL,体积为250k,数据库也只是一个文件,零配置,便可工作。既然开源,你甚至可以把它嵌入你的程序中。核心开发人员只有一个,最近加入了另外一个,也就是2个人而已,实在佩服,目前发展到3.1.0,相当高效稳定,有开源驱动在https://www.wendangku.net/doc/ca10010642.html,上有其https://www.wendangku.net/doc/ca10010642.html, Data Provider for SQLite :https://https://www.wendangku.net/doc/ca10010642.html,/projects/adodotnetsqlite/。

□SimpleSQL:相对SQLite要大几倍,但也是轻量级的,功能稍微强大一点,C++编写,有OLE、Java等版本。

□Berkely DB:C++编写的大型关系型数据库系统,还额外地支持XML(把XML当成数据库),号称2百万的安装量,MySQL也只不过号称5百万安装量而已,跨平台。

□Minosse:纯C#编写的大型关系型数据库系统,理想是超越MS SQL Server!最新版本:0.2.0,真难得,纯Java写的看得多了,纯C#的,不是移植别人的,还是第一个,佩服作者:包含C/S和嵌入式版本,并可跨越大部分平台,因为它不用Windows的东西,可以在Mono下编译。

□Firebird:这个东西太牛了,目前有1.5稳定版本已经拥有大量特性,完全支持ANSI SQL92、98等,一些超酷的特性让人疯狂(1.0特性、1.5特性,从这里开始研究),主要开发人员是一个俄罗斯人,目前开发队伍已经扩大到近100人,有3种模式,单机独立,典型C/S,超级服务器。2.0版本和3.0版本将在近期推出,看完其路线图(2.0、3.0)你就会疯掉。有.NET驱动,目前是1.7beta版。主要特性:

◆A.C.I.D;

◆MGA(任何版本的引擎都可以处理同一数据库记录);

◆PSQL(存储过程)超级强大,ms sql相对的太次,它啥都能在服务器端实现并推送到客户端成为强大的报表,存储过程;

◆触发器都可以在客户端获取监控追踪;

◆自动只读模式;

◆创新的事务保证绝对不会出错;

◆24*7运行中仍然可以随时备份数据库;

◆统一触发器:任何操作都可以让某表唯一的触发器来总控;

◆大部分语言都可以写plug-in,并直接在存储过程中调用函数;

◆c->c++,更加少的代码但更加快的速度;

◆3种运行模式,甚至可以嵌入式;

◆主流语言都可以调用它;

◆动态sql执行;

◆事务保存点;

□PostgreSQL:POSTGRES数据库的后开源版本,号称拥有任何其他数据库没有的大量新特性,似乎目标是要做超大型的OO关系型数据库系统,目前已经发展到8.0,有.NET驱动,中文官方网站有详细介绍。

□MySQL:这个,不用说了吧?号称全球最受欢迎的开源数据库,但让我奇怪的是,PostgreSQL都有简体中文的支持:包括内核、管理工具、QA 等等,在最新版本MySQL中,我却没有发现... ,有.NET驱动,其中MySQL Connector/Net就是原来在https://www.wendangku.net/doc/ca10010642.html,上的ByteFX.Data项目,作者已经加入了MySQL团队,参看《感慨20 之开源的前途/钱图?(1数据库)》。

======================================================

最近在学习Firebird Embeded Database。作为一款单文件型小型数据库,Firebird 具有很多吸引人的特征,比如支持事务、支持存储过程、触发器等,而且Embeded 版本的Firebird 在 .NET 开发中只需要拷贝两个文件:一个fbembed.dll (非托管但不需要注册的动态链接库)和一个https://www.wendangku.net/doc/ca10010642.html, Data Provider 的FirebirdSql.Data.Firebird.dll。这些特征都非常适合那些需要在客户端存储一些数据,但又不想安装数据库(比如MSDE)软件的情形。

据称,在国外,需要使用客户端数据库的情况中,有30%左右的开发者选择Access,有30%的开发者选择MSDE 2000,有30%的开发者选择Embedded Firebird,剩余10%选择其他小型数据库,如SQLite,MySQL 等。

上面所说的Access,MSDE 2000,Embedded Firebird,SQLite等都是可以免费再分发(free redistributable)的数据库。相比而言,MSDE 2000 显著缺点是需要安装,最大优点是和服务器端的SQL Server 编程模型一致,开发便利。Access的显著缺点是功能较少,不支持事务等常用功能,最大优点是简单、多数开发者都很熟悉,部署也很方便。SQLite支持事务,也是一款单文件数据库,比较不足的是 .NET Data Provider 还不是很成熟。Firebird则同时具有:单文件、部署简单不需安装(只需XCOPY 两个文件)、支持事务、存储过程、触发器,.NET Data Provider比较稳定成熟等优点。

Firebird 本身有SuperServer和Embedded版本之分,后者只能本机访问,不接受TCP连接。对于开发者而言,从Embedded数据库切换到SuperServer,只需更改数据库连接串中的ServerType值就行。

但是,在你正式决定使用?Firebird 之前,请你注意下面这个known issue(已知问题):Firebird 数据库文件不能放置在含有中文等字符的路径中。Firebird 的文件名不可以用中文字符,所在路径的任何部分如果含有中文字符,都将无法访问到数据库。举个例子,中文Windows桌面所在的目录一般是“C:\Documents and Settings\用户名\桌面”,如果数据库文件放置在桌面上,就无法访问到。当然,Firebird 内部是可以存储中文字符的,因为它支持GB2312 和UNICODE 等字符集。

我已向Firebird 开发者报告了这个BUG,希望能早日解决这个BUG。

需要注意一点,连接串中的Database 地址如果使用相对路径,请一定注意这个相对路径是相对于fbembed.dll 所在目录的。

小型数据库的选择(轻量级数据库)

一直使用Sql Server开发,没有用过Access之外其它的DB。最近正想做个小型工具,这种小东西当然不可能用Sql Server数据库啦,可又不想用Access,于是想起在Blog中看到关于小型数据库的文章,收集如下资料:

据称,在国外,需要使用客户端数据库的情况中,有30%左右的开发者选择Access,有30%的开发者选择MSDE 2000,有30%的开发者选择Embedded Firebird,剩余10%选择其他小型数据库,如SQLite,MySQL 等。

引用

Embedded Firebird DB 简介

最近在学习Firebird Embeded Database。作为一款单文件型小型数据库,Firebird 具有很多吸引人的特征,比如支持事务、支持存储过程、触发器等,而且Embeded 版本的Firebird 在.NET 开发中只需要拷贝两个文件:一个fbembed.dll (非托管但不需要注册的动态链接库)和一个https://www.wendangku.net/doc/ca10010642.html, Data Provider 的FirebirdSql.Data.Firebird.dll。这些特征都非常适合那些需要在客户端存储一些数据,但又不想安装数据库(比如MSDE)软件的情形。

据称,在国外,需要使用客户端数据库的情况中,有30%左右的开发者选择Access,有30%的开发者选择MSDE 2000,有30%的开发者选择Embedded Firebird,剩余10%选择其他小型数据库,如SQLite,MySQL 等。

上面所说的Access,MSDE 2000,Embedded Firebird,SQLite等都是可以免费再分发(free redistributable)的数据库。相比而言,MSDE 2000 显著缺点是需要安装,最大优点是和服务器端的SQL Server 编程模型一致,开发便利。Access的显著缺点是功能较少,不支持事务等常用功能,最大优点是简单、多数开发者都很熟悉,部署也很方便。SQLite支持事务,也是一款单文件数据库,比较不足的是.NET Data Provider 还不是很成熟。Firebird则同时具有:单文件、部署简单不需安装(只需XCOPY 两个文件)、支持事务、存储过程、触发器,.NET Data Provider比较稳定成熟等优点。

Firebird 本身有SuperServer和Embedded版本之分,后者只能本机访问,不接受TCP连接。对于开发者而言,从Embedded数据库切换到SuperServer,只需更改数据库连接串中的ServerType值就行。

但是,在你正式决定使用?Firebird 之前,请你注意下面这个known issue(已知问题):Firebird 数据库文件不能放置在含有中文等字符的路径中。Firebird 的文件名不可以用中文字符,所在路径的任何部分如果含有中文字符,都将无法访问到数据库。举个例子,中文Windows桌面所在的目录一般是“C:Documents and Settings用户名桌面”,如果数据库文件放置在桌面上,就无法访问到。当然,Firebird 内部是可以存储中文字符的,因为它支持GB2312 和UNICODE 等字符集。

我已向Firebird 开发者报告了这个BUG,希望能早日解决这个BUG。

需要注意一点,连接串中的Database 地址如果使用相对路径,请一定注意这个相对路径是相对于fbembed.dll 所在目录的。

-------------------------

Sqlite中文资料

介绍

这是嵌入式SQL数据库引擎SQLite(SQLite Embeddable SQL Database Engine)的一个扩展。SQLite是一个实现嵌入式SQL数据库引擎的C语言库(C library)。用SQLite连接的程序可以使用SQL数据库,但不需要运行一个单独的关系型数据库管理系统进程(separate RDBMS process)。SQLite不是一个用于连接到大型数据库服务器(big database server)的客户端库(client library)。SQLite是一个服务器。SQLite直接读写(reads and writes directly)在硬盘上的数据库文件。

注:更多关于SQLite的资料请查看SQLite的网站([url]https://www.wendangku.net/doc/ca10010642.html,/[/url])。

安装

请阅读在安装包里的INSTALL 文件。或者使用PEAR installer with "pear install sqlite"。SQLite已经内置了,你不需要安装任何附加的软件(additional software)。

Windows users可以下载SQLite扩展DLL(php_sqlite.dl)。

需求

为了可以使用那些函数,你必须编译带上SQLite支持PHP(compile PHP with SQLite support),或者在你的php.ini加载SQLite扩展。

资源类型

有两个在SQLite界面(the SQLite Interface)可用的资源。第一个是数据库连接(the database connection),第二是计算结果设置(the result set)。

预定义常量

函数sqlite_fetch_array()和sqlite_current()使用一个常量表示不同的返回类型。下面的常量(表格 1.)已经被定义:

表格 1. SQLite 常量

常量名意义

SQLITE_ASSOC Columns are returned into the array having the fieldname as the array index.

SQLITE_BOTH Columns are returned into the array having both a numerical index and the fieldname as the array index.

SQLITE_NUM Columns are returned into the array having a numerical index to the fields. This index starts with 0, the first field in the result.

运行时配置

这些函数的行为受到全局配置文件php.ini 的影响。

表格 2. SQLite Configuration Options

Name Default Changeable

sqlite.assoc_case 0 PHP_INI_ALL

For further details and definition of the PHP_INI_* constants see ini_set().

以下是该配置选项的简要解释。

sqlite.assoc_case int

Whether to use mixed case (0), upper case (1) or lower case (2) hash indexes.

This option is primarily useful when you need compatibility with other database systems, where the names of the columns are always returned as uppercase or lowercase, regardless of the case of the actual field names in the database schema.

The SQLite library returns the column names in their natural case (that matches the case you used in your schema). When sqlite.assoc_case is set to 0 the natural case will be preserved. When it is set to 1 or 2, PHP will apply case folding on the hash keys to upper- or lower-case the keys, respectively.

Use of this option incurs a slight performance penalty, but is MUCH faster than performing the case folding yourself using PHP script.

目录

sqlite_array_query ——发送一条SQL 查询,并返回一个数组。

sqlite_busy_timeout ——设置超时时间(busy timeout duration),或者频繁的用户失去权限(disable busy handlers)。

sqlite_changes ——返回被最新的SQL 查询(changed by the most recent SQL statement)改变的行数。

sqlite_close ——关闭一个打开的SQLite数据库。

sqlite_column ——在当前的行中取得一列(a column from the current row of a result set)。

sqlite_create_aggregate ——Register an aggregating UDF for use in SQL statements。

sqlite_create_function ——Registers a "regular" User Defined Function for use in SQL statements。

sqlite_current ——在返回的数组中取得当前的行(the current row from a result set as an array)。

sqlite_error_string ——返回错误代码的原始描述(the textual description of an error code)。

sqlite_escape_string ——释放一个用于查询的字符串(Escapes a string for use as a query parameter)。

sqlite_fetch_array ——取得下一行并设置成一个数组(the next row from a result set as an array)。

sqlite_fetch_single ——取得第一列并设置成一个字符串(Fetches the first column of a result set as a string)。

sqlite_fetch_string ——sqlite_fetch_single()的别名。

sqlite_field_name ——取得结果中指定字段的字段名。

sqlite_has_more ——返回是否有更多可用的行(whether or not more rows are available)。

sqlite_last_error ——返回数据库的最新的错误代码(the error code of the last error for a database)。

sqlite_last_insert_rowid ——返回最新插入的行的行号(the most recently inserted row)。

sqlite_libencoding ——返回SQLite库(SQLite library)的编码(encoding)。

sqlite_libversion ——返回SQLite库(SQLite library)的版本。

sqlite_next ——返回下一行的行号。

sqlite_num_fields ——取得结果集中字段的数目。

sqlite_num_rows ——取得结果集中行的数目。

sqlite_open ——打开一个SQLite数据库。如果文件不存在则尝试创建之。

sqlite_popen ——用永久连接的方式打开一个SQLite数据库。如果文件不存在则尝试创建之。

sqlite_query ——发送一条SQL 查询,并返回一个结果句柄(a result handle)。

sqlite_rewind ——倒回第一行(Seek to the first row number)。

sqlite_seek ——在缓存结果中查找特定的行号(Seek to a particular row number of a buffered result set)。

sqlite_udf_decode_binary ——Decode binary data passed as parameters to an UDF。

sqlite_udf_encode_binary ——Encode binary data before returning it from an UDF。

sqlite_unbuffered_query ——发送一条SQL 查询,并不获取和缓存结果的行。

关于Sqlite的问答

为什么选择SQLite 来捆绑而不用其它数据库?恐怕PHP 想把ASP 赶下台了。

对于PHP 所开发的留言本,整站等程序,为什么使用率比ASP 低呢?很大原因是数据库的安装,对于一般用户,安装一个MySQL 数据库相对比较难的,而Access 则只需要修改数据库路径即可,数据库和站点文件放在一起,非常方便。现在好了,PHP5 将SQLite 捆绑了,相信以后会出很多相关的应用程序,而这些应用程序的数据库安装相信可以和ASP 媲美,速度又比MySQL 快上1-2 倍(官方的数据),存储量又不是问题(最大可超过2TB-2000GB,官方数据)。只是对于并发访问我比较担心,还没有测试过不知道如何。呵呵,但是相信这是PHP 的明智选择,即使服务器不支持SQLite ,也可以通过加载php_sqlite.dll 来实现SQLite 的支持。恩,为什么没有早点想到使用它呢?恐怕是有以下几点原因:

1.当初还不健壮--即使现在也不知道是不是健壮,代码就那么几百K,呵呵,和MySQL 对比起来……

2.感觉好像有点文件系统的味道,就一个数据库文件包含了所有数据……

3.不支持表的无损修改,也就是说不支持ALTER TABLE ,这恐怕带来了不少麻烦。改变数据表结构就要重建表,不过有其他方法解决。

4.只支持left join ,不过差不多够用了,对小型程序来说。

5.优化数据表恐怕比较麻烦。

优点还是很多的,我看了下:

1.安装方便

2.支持大量数据

3.支持大部分SQL

4.弱数据类型

5.速度快(没有测试,官方说法)

6.体积小

7.具备Command 窗口,下载一个SQLite.exe 文件即可对数据库进行命令行操作,和MySQL 差不多的样子,不过显然不如MySQL 友好和强大。

8.完全公开的源代码和版权

其他想到再说,感觉SQLite 很不错的,PEAR 已经提供扩展类支持了。有兴趣下载了看看。

翻译了一部分FAQ,英语水平差,可能不准确,翻译得很累,有兴趣的帮忙翻译几段。

常见问答(FAQ)

(最后更新:2004/03/20 15:34:56)

[url]https://www.wendangku.net/doc/ca10010642.html,/faq.html[/url]

(1) 如何创建自增字段?

(2) SQLite 支持哪些数据类型?

(3) 为什么能向SQLite 数据库的整型字段中插入字符串?

(4) 为什么SQLite 认为表达式'0'=='00' 为真?

(5) 为什么SQLite 不允许在同一张表里使用'0' 和'0.0' 作为两个不同的行的主键?

(6) 为什么不能在Linux box 中读取在SparcStation 中创建的SQLite 数据库?

(7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗?

(8) Is SQLite threadsafe?

(9) 如何列出一个SQLite 数据库中的所有的表/索引?

(10) 有对SQLite 数据库的任何已知的大小的限制吗?

(11) 在SQLite 中V ARCHAR 的最大长度是多少?

(12) SQLite 是否支持BLOB 类型?

(13) 如何从一个已存在的SQLite 数据表中添加/删除字段?

(14) 我删除了很多数据但是数据库文件并没有减小,是不是Bug?

(15) 是否能将SQLite 用于商业用途而不用交版税?

--------------------------------------------------------------------------------

(1) 如何创建自增字段?

简单的回答:一个声明为INTEGER PRIMARY KEY 的字段将自动增加。

这里是详细的答案:从SQLite 的 2.3.4 版本开始,如果你将一个表中的一个字段声明为INTEGER PRIMARY KEY,那么无论你何时向该表的该字段插入一个NULL 值,这个NULL 值将自动被更换为比表中该字段所有行的最大值大 1 的整数;如果表为空,那么将被更换为1。比如,假设你有这样的一张数据表:

CREATE TABLE t1(

a INTEGER PRIMARY KEY,

b INTEGER

);

在这张数据表里,声明

INSERT INTO t1 valueS(NULL,123);

在逻辑意义上等价于:

INSERT INTO t1 valueS((SELECT max(a) FROM t1)+1,123);

至于SQLite 的 2.2.0 到 2.3.3 版本,如果你向一个INTEGER PRIMARY KEY 字段插入NULL 值, 它将被替换为一个唯一的整数,但它是个半随机的整数。通过这种方式产生的唯一键将不是连续的。而SQLite 的 2.3.4 及其以后版本,唯一键将是连续的直到其最大值超过2147483647。这是32 位整型的最大值因而不能继续增加。因此在SQLite 的 2.3.3 及其早期版本,并发的插入尝试将返回一个半随机的键生成算法。

从 2.2.3 版本开始,一个新的名为sqlite_last_insert_rowid() 的API 函数将为最近的插入操作返回一个整型键。详细资料请查看API 手册

--------------------------------------------------------------------------------

(2) SQLite 支持哪些数据类型?

SQLite 是弱类型的。所有数据以无终止的字符串存储。在CREA TE TABLE 中,字段名后面的数据类型信息将被忽略(大部分),你可以往任何字段插入你想要的数据类型,而不用管那个字段被声明为什么类型。

这个规则的一个例外是字段为INTEGER PRIMARY KEY 类型。这样的字段强制一个整型。往INTEGER PRIMARY KEY 字段插入任何非整型数据将产生一个错误。

这是一个在SQLite 的数据类型中更深入解释这一概念的页面。

--------------------------------------------------------------------------------

(3) 为什么能向SQLite 数据库的整型字段中插入字符串?

这是一个特点,不是错误。SQLite 是弱类型的。任何数据都能够插入任何字段中。你可以往整型字段中插入任意长度的字符串,或者往布尔字段中插入浮点数,或者往字符字段中插入日期。在CREA TE TABLE 命令中你指定给这个字段的数据类型不会限制插入这个字段的数据。所有的字段可以插入任意长度的字符串。(有一个例外:以INTEGER PRIMARY KEY 为类型的字段只允许整数。如果你尝试往一个INTEGER PRIMARY KEY 字段插入非整型数据,将产生一个错误。)

然而数据类型是影响值的比较的。因为在一个数字类型(比如"integer")字段中,任何字符串在进行比较和排序时是被看成处理成数值的数字。考虑这两个命令序列:

CREATE TABLE t1(a INTEGER UNIQUE); CREATE TABLE t2(b TEXT UNIQUE);

INSERT INTO t1 valueS('0'); INSERT INTO t2 valueS(0);

INSERT INTO t1 valueS('0.0'); INSERT INTO t2 valueS(0.0);

在左边的序列中,第二条插入语句将失败。这种情况下,当字符串'0' 和'0.0' 插入一个数字类型字段中时将被处理成数字而0==0.0 违反了唯一性约束。但是右边序列中的第二条插入语句正常执行。这种情况下,常量0 和0.0 被处理成字符串意味着它们是截然不同的。

这是一个在SQLite 的数据类型中更深入解释这一概念的页面。

--------------------------------------------------------------------------------

(4) 为什么SQLite 认为表达式'0'=='00' 为真?

在 2.7.0 之后,表达式不成立。

但是如果两个值之一在一个数字类型字段中比较,另一个将被转化为数字而不是字符串,而且结果成立。例如:

CREATE TABLE t3(a INTEGER, b TEXT);

INSERT INTO t3 valueS(0,0);

SELECT count(*) FROM t3 WHERE a=='00';

上面序列中的SELECT 语句返回1。字段"a" 是数字类型所以在WHERE 子句中字符串'00' 被转换成一个数字作为和'a' 的比较。0==00 所以这个测试返回TRUE。现在考虑一个不同的SELECT 语句:

SELECT count(*) FROM t3 WHERE b=='00';

在这种情况下答案是0。'b' 是一个text 字段,文本不匹配'00'。'0'!='00' 因此WHERE 子句返回FALSE 而返回行数为0。

这是一个在SQLite 的数据类型中更深入解释这一概念的页面。

--------------------------------------------------------------------------------

(5) 为什么SQLite 不允许在同一张表里使用'0' 和'0.0' 作为两个不同的行的主键?

你的主键必定是数字类型。将数据类型改成TEXT 后即可正常运行。

每一行必须有一个唯一的主键。作为一个数字类型的字段,SQLite 认为'0' 和'0.0' 的值是相同的,因为他们在数字上的比较是相等的(看前面的问题)因此值不是唯一的。

--------------------------------------------------------------------------------

(6) 为什么不能在Linux box 中读取在SparcStation 中创建的SQLite 数据库?

你需要升级你的SQLite 库到 2.6.3 或更新版本。

你的linux box 上的x86 处理器是little-endian (意味着整数中的最低位的字节排在前面),但是Sparc 是big-endian (最高位的字节排在前面)。在SQLite 低于 2.6.3 版本的时候,创建于little-endian 体系中的SQLite 数据库不能运行于big-endian 的机器上。从 2.6.3 版本开始,SQLite 应该能够读写数据库文件而不管创建数据库的机器的字节顺序如何。

--------------------------------------------------------------------------------

(7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗?

多个程序能够在同一时间打开同一个数据库,能够同时执行SELECT 命令。但是一次只能有一个进程改变数据库。

Win95/98/ME 操作系统缺乏读/写锁定支持。在2.7.0 版本之前,这意味着在Windows 下你一次只能对数据库做单一的读处理。这个问题在2.7.0 版本中已经通过一个Windows 下的用户空间读写概率统计策略(implementing a user-space probabilistic reader/writer locking strategy)Windows 现在和UNIX 一样允许多重的读操作。

The locking mechanism used to control simultaneous access might not work correctly if the database file is kept on an NFS filesystem. This is because file locking is broken on some NFS implementations. You should avoid putting SQLite database files on NFS if multiple processes might try to access the file at the same time. On Windows, Microsoft's documentation says that locking may not work under FA T filesystems if you are not running the Share.exe daemon. People who have a lot of experience with Windows tell me that file locking of network files is very buggy and is not dependable. If what they say is true, sharing an SQLite ourse-grained. SQLite locks the entire database. Big database servers (PostgreSQL, Oracle, etc.) generally have finer grained locking, such as locking on a single table or a single row within a table. If you have a massively parallel database application, you should consider using a big database server instead of SQLite.

database between two or more Windows machines might cause unexpected problems.

Locking in SQLite is very c

When SQLite tries to access a file that is locked by another process, the default behavior is to return SQLITE_BUSY. You can adjust this behavior from C code using the sqlite_busy_handler() or sqlite_busy_timeout() API functions. See the API documentation for details.

If two or more processes have the same database open and one process creates a new table or index, the other processes might not be able to see the new table right away. You might have to get the other processes to close and reopen their connection to the database before they will be able to see the new table.

--------------------------------------------------------------------------------

(8) Is SQLite threadsafe?

Yes. Sometimes. In order to be thread-safe, SQLite must be compiled with the THREADSAFE preprocessor macro set to 1. In the default distribution, the windows binaries are compiled to be threadsafe but the linux binaries are not. If you want to change this, you'll have to recompile.

"Threadsafe" in the previous paragraph means that two or more threads can run SQLite at the same time on different "sqlite" structures returned from separate calls to sqlite_open(). It is never safe to use the same sqlite structure pointer simultaneously in two or more threads.

Note that if two or more threads have the same database open and one thread creates a new table or index, the other threads might not be able to see the new table right away. You might have to get the other threads to close and reopen their connection to the database before they will be able to see the new table. Under UNIX, you should not carry an open SQLite database across a fork() system call into the child process. Problems will result if you do.

--------------------------------------------------------------------------------

(9) 如何列出一个SQLite 数据库中的所有的表/索引?

If you are running the sqlite command-line access program you can type ".tables" to get a list of all tables. Or you can type ".schema" to see the complete database schema including all tables and indices. Either of these commands can be followed by a LIKE pattern that will restrict the tables that are displayed. From within a C/C++ program (or a script using Tcl/Ruby/Perl/Python bindings) you can get access to table and index names by doing a SELECT on a special table named "SQLITE_MASTER". Every SQLite database has an SQLITE_MASTER table that defines the schema for the database. The SQLITE_MASTER table looks like this:

CREATE TABLE sqlite_master (

type TEXT,

name TEXT,

tbl_name TEXT,

rootpage INTEGER,

sql TEXT

);

For tables, the type field will always be 'table' and the name field will be the name of the table. So to get a list of all tables in the database, use the following SELECT command:

SELECT name FROM sqlite_master

WHERE type='table'

ORDER BY name;

For indices, type is equal to 'index', name is the name of the index and tbl_name is the name of the table to which the index belongs. For both tables and indices, the sql field is the text of the original CREA TE TABLE or CREA TE INDEX statement that created the table or index. For automatically created indices (used to implement the PRIMARY KEY or UNIQUE constraints) the sql field is NULL.

The SQLITE_MASTER table is read-only. You cannot change this table using UPDATE, INSERT, or DELETE. The table is automatically updated by CREATE TABLE, CREA TE INDEX, DROP TABLE, and DROP INDEX commands.

Temporary tables do not appear in the SQLITE_MASTER table. Temporary tables and their indices and triggers occur in another special table named SQLITE_TEMP_MASTER. SQLITE_TEMP_MASTER works just like SQLITE_MASTER except that it is only visible to the application that created the temporary tables. To get a list of all tables, both permanent and temporary, one can use a command similar to the following:

SELECT name FROM

(SELECT * FROM sqlite_master UNION ALL

SELECT * FROM sqlite_temp_master)

WHERE type='table'

ORDER BY name

--------------------------------------------------------------------------------

(10) 有对SQLite 数据库的任何已知的大小的限制吗?

As of version 2.7.4, SQLite can handle databases up to 2^41 bytes (2 terabytes) in size on both Windows and Unix. Older version of SQLite were limited to databases of 2^31 bytes (2 gigabytes).

SQLite arbitrarily limits the amount of data in one row to 1 megabyte. There is a single #define in the source code that can be changed to raise this limit as high as 16 megabytes if desired.

There is a theoretical limit of about 2^32 (4 billion) rows in a single table, but this limit has never been tested.

There is also a theoretical limit of about 2^32 tables and indices.

The name and "CREA TE TABLE" statement for a table must fit entirely within a 1-megabyte row of the SQLITE_MASTER table. Other than this, there are no constraints on the length of the name of a table, or on the number of columns, etc. Indices are similarly unconstrained.

The names of tables, indices, view, triggers, and columns can be as long as desired. However, the names of SQL functions (as created by the sqlite_create_function() API) may not exceed 255 characters in length.

--------------------------------------------------------------------------------

(11) 在SQLite 中V ARCHAR 的最大长度是多少?

Remember, SQLite is typeless. A VARCHAR column can hold as much data as any other column. The total amount of data in a single row of the database is limited to 1 megabyte. You can increase this limit to 16 megabytes, if you need to, by adjusting a single #define in the source tree and recompiling.

For maximum speed and space efficiency, you should try to keep the amount of data in a single row below about 230 bytes.

--------------------------------------------------------------------------------

(12) SQLite 是否支持BLOB 类型?

You can declare a table column to be of type "BLOB" but it will still only store null-terminated strings. This is because the only way to insert information into an SQLite database is using an INSERT SQL statement, and you can not include binary data in the middle of the ASCII text string of an INSERT statement. SQLite is 8-bit clean with regard to the data it stores as long as the data does not contain any '\000' characters. If you want to store binary data, consider encoding your data in such a way that it contains no NUL characters and inserting it that way. You might use URL-style encoding: encode NUL as "%00" and "%" as "%25". Or, you might consider encoding your binary data using base-64. There is a source file named "src/encode.c" in the SQLite distribution that contains implementations of functions named "sqlite_encode_binary() and sqlite_decode_binary() that can be used for converting binary data to ASCII and back again, if you like.

--------------------------------------------------------------------------------

(13) 如何从一个已存在的SQLite 数据表中添加/删除字段?

SQLite does not support the "ALTER TABLE" SQL command. If you what to change the structure of a table, you have to recreate the table. You can save existing data to a temporary table, drop the old table, create the new table, then copy the data back in from the temporary table.

For example, suppose you have a table named "t1" with columns names "a", "b", and "c" and that you want to delete column "c" from this table. The following steps illustrate how this could be done:

BEGIN TRANSACTION;

CREATE TEMPORARY TABLE t1_backup(a,B);

INSERT INTO t1_backup SELECT a,b FROM t1;

DROP TABLE t1;

CREATE TABLE t1(a,B);

INSERT INTO t1 SELECT a,b FROM t1_backup;

DROP TABLE t1_backup;

COMMIT;

--------------------------------------------------------------------------------

(14) 我删除了很多数据但是数据库文件并没有减小,是不是Bug?

不是的。当你从SQLite 删除数据之后,未使用的磁盘空间被添加到一个内在的“空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失,但是也不向操作系统返回磁盘空间。

如果你删除了大量的数据且想要减小数据库文件,执行VACUUM 命令(2.8.1 或更新版本)。VACUUM 命令将重建数据库will reconstruct the database from scratch. This will leave the database with an empty free-list and a file that is minimal in size. Note, however, that the V ACUUM can take some time to run (around a half second per megabyte on the Linux box where SQLite is developed) and it can use up to twice as much temporary disk space as the original file while it is running.

--------------------------------------------------------------------------------

(15) 是否能将SQLite 用于商业用途而不用交版税?

可以。SQLite 是公开的。代码的任何部分都没有声明所有权。你可以用它来做你想要的任何事情

三大主流数据库对比 哪个更有优势

三大主流数据库对比哪个更有优势 Oracle Oracle 能在所有主流平台上运行(包括Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持,Oracle并行服务器通过使一组结点共享同一簇中的工作来扩展Windows NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows NT不能满足需要,用户可以把数据库移到UNIX中。Oracle 的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。Oracle获得最高认证级别的ISO标准认证.Oracle性能最高,保持开放平台下的TPC-D和TPC-C的世界记录Oracle多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。 Oracle 在兼容性、可移植性、可联结性、高生产率上、开放性也存在优点。Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。与IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。能与多种通讯网络相连,支持各种协议(TCP/IP、DECnet、LU6.2等)。提供了多种开发工具,能极大的方便用户进行进一步的开发。Oracle良好的兼容性、可移植性、可连接性和高生产率是Oracle RDBMS具有良好的开放性。 Oracle价格是比较昂贵的。据说一套正版的Oracle软件早在2006年年底的时候在市场上的价格已经达到了6位数。所以如果你的项目不是那种超级大的项目,还是放弃Oracle 吧。 SQL Server SQL Server 是Microsoft推出一套产品,它具有使用方便、可伸缩性好、与相关软件集成程度高等优点,逐渐成为Windows平台下进行数据库应用开发较为理想的选择之一。SQLServer是目前流行的数据库之一,它已广泛应用于金融、保险、电力、行政管理等与

常用数据库对比

常用数据库对比 目前,常用于OLAP分析的数据库软件有Oracle、DB2、Teradata、Greenplum、Netezza、Exdata 几种。 1、Oracle 提起数据库,第一个想到的公司,一般都会是Oracle(甲骨文)。该公司成立于1977年,最初是一家专门开发数据库的公司。Oracle在数据库领域一直处于领先地位。1984年,首先将关系数据库转到了桌面计算机上。然后,Oracle5率先推出了分布式数据库、客户/服务器结构等崭新的概念。Oracle 6首创行锁定模式以及对称多处理计算机的支持……最新的Oracle 8主要增加了对象技术,成为关系—对象数据库系统。目前,Oracle产品覆盖了大、中、小型机等几十种机型,Oracle数据库成为世界上使用最广泛的关系数据系统之一。

2、DB2 DB2是IBM公司的产品,起源于System R和System R*。他支持从PC到UNIX,从中小型机到大型机;从IBM到非IBM(HP及SUN UNIX系统等)各种操作平台。他既可以在主机上以主/从方式独立运行,也可以在客户/服务器环境中运行。其中服务平台可以是OS/400,AIX,OS/2,HP-UNIX,SUN-Solaris等操作系统,客户机平台可以是OS/2或Windows, Dos, AIX, HP-UX, SUN Solaris等操作系统。

3、Greenplum Greenplum的架构采用了MPP(大规模并行处理),公司专注于OLAP系统数据引擎开发,有世界级的研发团队进行高性能计算和数据库系统的前沿开发工作,宗旨是向客户提供高性能的超级数据引擎,并将强大的并行计算能力融入到大规模数据仓库分析领域中。公司具有发展趋势超前的视野和洞察力,为全球很多最大规模的数据仓库提供推动力;公司最先将SQL 和Map Reduce的功能整合到统一的数据处理框架中。

数据库课程设计完整版

数据库课程设计完 整版

HUNAN CITY UNIVERSITY 数据库系统课程设计 设计题目:宿舍管理信息系统姓名: 学号: 专业:信息与计算科学指导教师:

20年 12月1日 目录 引言3 一、人员分配 4 二、课程设计目的和要求 4 三、课程设计过程 1.需求分析阶段 1.1应用背景 5 1.2需求分析目标5 1.3系统设计概要5 1.4软件处理对象 6 1.5系统可行性分析6 1.6系统设计目标及意义7 1.7系统业务流程及具体功能 7

1.8.1数据流程图8 2.系统的数据字典11 3.概念结构设计阶段 13 4.逻辑结构设计阶段 15 5.物理结构设计阶段 18 6.数据库实施 18 7.数据库的运行和维护 18 7.1 解决问题方法 19 7.2 系统维护 19 7.3 数据库性能评价 19 四、课程设计心得. 20参考文献 20 引言

学生宿舍管理系统对于一个学校来说是必不可少的组成部分。当前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强能够接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条一条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生宿舍管理系统。学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。本系统具有运行速度快、安全性高、稳定性好的优点,而且具备修改功能,能够快速的查询学校所需的住宿信息。 面对当前学校发展的实际状况,我们经过实地调研之后,对宿舍管理系统的设计开发做了一个详细的概述。

三大数据库的区别

1.ORACLE oracle能在所有主流平台上运行(包括 windows)。 Oracle 一般只有一个数据库,可以通过不同 不同用户(模式)的数据库对象名可以相同 2. SQLSERVER SQL Server 是Microsoft推出一套产品,它具有使用方便、可伸缩性好、与相关软件集成程度高等优点,逐渐成为Windows平台下进行数据库应用开发较为理想的选择之一。SQLServer 是目前流行的数据库之一,它已广泛应用于金融,保险,电力,行政管理等与数据库有关的行业.而且,由于其易操作性及友好的界面,赢得了广大用户的青睐,尤其是SQLServer与其它数据库,如Access,FoxPro,Excel等有良好的ODBC接口,可以把上述数据库转成SQLServer的数据库,因此目前越来越多的读者正在使用SQLServer. 3. MYSQL MySQL是开源的,不支持事务处理,没有视图,没有存储过程和触发器,没有数据库端的用户自定义函数,不能完全使用标准的SQL语法。 从数据库行家听说的第一件事就是MySQL缺乏transactions,rollbacks,和subselects的功能。如果你计划使用MySQL写一个关于银行、会计的应用程序,或者计划维护一些随时需要线性递增的不同类的计数器,你将缺乏transactions功能。在现有的发布版本的MySQL 下,请不要有任何的这些想法。(请注意,MySQL的测试版 3.23.x系列现在已经支持transactions了)。 在非常必要的情况下,MySQL的局限性可以通过一部分开发者的努力得到克服。在MySQL中你失去的主要功能是subselect语句,而这正是其它的所有数据库都具有的。换而言之,这个失去的功能是一个痛苦。 MySQL没法处理复杂的关联性数据库功能,例如,子查询(subqueries),虽然大多数的子查询都可以改写成join 另一个MySQL没有提供支持的功能是事务处理(transaction)以及事务的提交(commit)/撤销(rollback)。一个事务指的是被当作一个单位来共同执行的一群或一套命令。如果一个事务没法完成,那么整个事务里面没有一个指令是真正执行下去的。对于必须处理线上订单的商业网站来说,MySQL没有支持这项功能,的确让人觉得很失望。但是可以用MaxSQL,一个分开的服务器,它能通过外挂的表格来支持事务功能。 外键(foreignkey)以及参考完整性限制(referentialintegrity)可以让你制定表格中资料间的约束,然后将约束(constraint)加到你所规定的资料里面。这些MYSQL没有的功能表示一个有赖复杂的资料关系的应用程序并不适合使用MySQL。当我们说MySQL不支持外键时,我们指的就是数据库的参考完整性限制--MySQL并没有支持外键的规则,当然更没有支持连锁删除(cascadingdelete)的功能。简短的说,如果你的工作需要使用复杂的资料关联,那你还是用原来的Access吧。 你在MySQL中也不会找到存储进程(storedprocedure)以及触发器(trigger)。(针对这些功能,在Access提供了相对的事件进程(eventprocedure)。)

常见数据库及其特点

常见数据库及其特点 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。 (免费,体积小,速度快,成本低,开源,适用于中小型网站) MySQL是最受欢迎的开源SQL数据库管理系统,它是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用。MySQL具有以下优势: (1)MySQL是一个关系数据库管理系统。(2)MySQL是开源的。 (3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。 (4)MySQL服务器工作在客户/服务器或嵌入系统中。 Server(流行于Web) SQL Server是由微软开发的数据库管理系统,是Web上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业。SQL Server 提供了众多的Web和电子商务功能,如对XML和Internet标准的丰富支持,通过Web对数据进行轻松安全的访问,具有强大的、灵活的、基于Web的和安全的应用程序管理等。而且,由于其易操作性及其友好的操作界面,深受广大用户的喜爱。(功能齐全,大型,专业,企业级,其开发工具全部用JAVA来写的) 目前,Oracle产品覆盖了大、中、小型机等多种机型,Oracle成为世界上使用最广泛的关系数据系统之一。 (1)可联结性:Oracle能与多种通讯网络相连,支持客户机/服务器方式和各种协议(TCP/IP、DECnet、等)。 (2)开放性:Oracle良好的兼容性、可移植性、可连接性和高生产率使Oracle RDBMS具有良好的开放性。 (3)名符其实的大型数据库:ORACLE建立的数据库,最大数据量可达几百GB; (4)共享SQL和多线索服务器体系结构:这两个特性的结合,减少ORACLE的资源占用,增强处理能力,能支持成百甚至上千个用户。 (5)跨平台能力:ORACLE数据库管理系统可以运行在100多个硬件和软件平台上,这一点为其它PC平台上的数据库产品所不及。 (6)分布式数据库:可以使物理分布不同的多个数据库上的数据,被看成是一个完整的逻辑数据库。

数据库课程设计完整版

HUNAN CITY UNIVERSITY 数据库系统课程设计设计题目:宿舍管理信息系统 姓名: 学号: 专业:信息与计算科学 指导教师: 20年 12月1日 目录 引言 3 一、人员分配 4 二、课程设计目的和要求 4 三、课程设计过程 1.需求分析阶段 1.1应用背景 5 1.2需求分析目标5 1.3系统设计概要 5 1.4软件处理对象 6 1.5系统可行性分析 6 1.6系统设计目标及意义7

1.7系统业务流程及具体功能 7 8 2.系统的数据字典11 3.概念结构设计阶段 13 4.逻辑结构设计阶段 15 5.物理结构设计阶段 18 6.数据库实施 18 7.数据库的运行和维护 18 7.1 解决问题方法 19 7.2 系统维护 19 7.3 数据库性能评价 19 四、课程设计心得. 20 参考文献 20 引言 学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条一条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生宿舍管理系统。学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了

几种常用数据库的比较

几种常用数据库的比较 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。国际国内的主导关系型数据库管理系统有Oracle、Sybase、Informix和INGRES。这些产品都支持多平台,如UNIX、VMS、Windows,但支持的程度不一样。IBM的DB2也是成熟的关系型数据库。但是,DB2是内嵌于IBM的AS/400系列机中,只支持OS /400操作系统。 1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL 开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB 的注册商标。 MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass- deployed)的软件中去。

与其他数据库管理系统相比,MySQL具有以下优势: (1)MySQL是一个关系数据库管理系统。 (2)MySQL是开源的。 (3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。 (4)MySQL服务器工作在客户/服务器或嵌入系统中。 (5)有大量的MySQL软件可以使用。 2.SQL Server SQL Server是由微软开发的数据库管理系统,是Web上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业。 目前最新版本是SQL Server 2005,它只能在Windows上运行,操作系统的系统稳定性对数据库十分重要。并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 SQL Server 提供了众多的Web和电子商务功能,如对XML 和Internet标准的丰富支持,通过Web对数据进行轻松安全的访问,具有强大的、灵活的、基于Web的和安全的应用程序管理等。而且,由于其易操作性及其友好的操作界面,深受广大用户的喜爱。

多种数据库性能比较

多种数据库性能比较 Orcale 数据库美国Orcale 公司研制的一种关系型数据库管理系统,是一个协调服务器和用于支持任务决定型应用程序的开放型RDBMS。它可以支持多种不同的硬件和操作系统平台,从台式机到大型和超级计算机,为各种硬件结构提供高度的可伸缩性,支持对称多处理器、群集多处理器、大规模处理器等,并提供广泛的国际语言支持。 Orcale 是一个多用户系统,能自动从批处理或在线环境的系统故障中恢复运行。系统提供了一个完整的软件开发工具 Developer2000,包括交互式应用程序生成器、报表打印软件、字处理软件以及集中式数据字典,用户可以利用这些工具生成自己的应用程序。Orcale 以二维表的形式表示数据,并提供了SQL(结构式查询语言),可完成数据查询、操作、定义和控制等基本数据库管理功能。 Orcale 具有很好的可移植性,通过它的通信功能,微型计算机上的程序可以同小型乃至大型计算机上的Orcale,并且能相互传递数据。另外Orcale 还具有与C 语言的接电子表格、图形处理等软件。 Orcale 属于大型数据库系统,主要适用于大、中小型应用系统,或作为客户机/服务器系统中服务器端的数据库系统。 DB2 数据库 IBM 公司研制的一种关系型数据库系统。DB2 主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于OS/2、Windows 等平台下。 DB2 提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL 命令。DB2 采用了数据分级技术,能够使大型机数据很方便地下载到 LAN 数据库服务器,使得客户机/服务器用户和基于 LAN 的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。它以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 DB2 具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。 SQL Server 数据库美国Microsoft 公司推出的一种关系型数据库系统。SQLServer 是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT 的有机结合,提供了基于事务的企业级信息管理系统方案。其主要特点如下: (1)高性能设计,可充分利用WindowsNT 的优势。 (2)系统管理先进,支持Windows 图形化管理工具,支持本地和远程的系统管理和配置。 (3)强壮的事务处理功能,采用各种方法保证数据的完整性。 (4)支持对称多处理器结构、存储过程、ODBC,并具有自主的 SQL 语言。 SQLServer 以其内置的数据复制功能、强大的管理工具、与Internet 的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。 Sybase 数据库美国Sybase 公司研制的一种关系型数据库系统,是一种典型的UNIX 或WindowsNT 平台上客户机/服务器环境下的大型数据库系统。 Sybase 提供了一套应用程序编程接口和库,可以与非Sybase 数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。Sybase 通常与SybaseSQLAnywhere 用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的 PowerBuilder 为开发工具,在我国大中型系统中具有广泛的应用。美国Sybase 公司研制的一种关系型数据库系统,是一种典型的 UNIX 或 WindowsNT 平台上客户机/服务器环境下的大型数据库系统。Sybase 提供了一套应用程序编程接口和库,可以与非Sybase 数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触

几种轻量级的数据库对比

Access、SQLite、HSQLDB、Sybase、MySQL、DB4O 一、Access 数据类型有些另类,而且密码太容易被攻破,性能不高,只能用在Windows 程序上。 一般说来,单个表不超过10万少条记录为好,整个数据库不超过100M为好。ACCESS对数据库容量限制为2G,但超过100M后性能便 会有很大折扣。 二、HSQLDB 支持csv,配置分发容易,大数据量情况下性能不佳,这和sql执行效率无关,性能瓶颈在硬盘文件上,毕竟由于hsqldb没有在数 据文件存储上花时间,只是挂个csv。只能用于Java程序中。 三、firebird 数据文件是单一,部署、分发相对简单;用embedded方式,只需要把 icudt30.dll、icuin30.dll、icuuc30.dll、 jaybird21.dll、fbembed.dll五个文件和目录intl(里面有两个文件,是处理字符集的)放在程序启动目录就行了;中文支持的不错 ,但是要在建库的时候使用GB_2312字符集。有.NET、C++、Java多个Binding。 四、Sybase asa 数据能加密,性能不错,需要付费。 五、derby 性能和易用性都不错,但embedded版本完全没有数据认证,导致谁都可以打开数据库执行sql语句,而且数据库是以一个目录存 储的。只能用于Java程序中。 六、sqllite 官方发行版本不支持数据加密,另外,对中文,尤其是用中文order by的时候时常错误;还有就是完全没有用户认证;不过执行 效率不错。几乎稍微流行点的编程语言都有相应的Binding。 七、mysql 虽然mysql也可以不通过安装,直接拷贝就能使用,但是距离embedded还差一块。 八、DB4O 面向对象的数据库,使用DB4O无需ORM工具就可以直接进行对象存储。支持Java和.Net平台。可以自定义数据加密算法,性能优 良,单文件。虽然也支持Server模式,但最适合用于Embedded。

数据库课程设计小型超市管理系统

数据库课程设计 题目:超市管理系统 组员:邓胜龙,陈夏华 班级:计本(0901)

目录1、项目计划 系统开发目的 背景说明 项目确立 应用范围 定义 参考资料 2、逻辑分析与详细分析 系统功能 数据流图 用户类型与职能 系统开发步骤 系统环境需求 系统安全问题 3、基于UML的建模 语义规则 UML模型 系统实现图 4、概要设计文档 5、逻辑设计文档 6、物理设计文档

7、小结 1、项目计划 系统开发目的 (1)大大提高超市的运作效率; (2)通过全面的信息采集和处理,辅助提高超市的决策水平; (3)使用本系统,可以迅速提升超市的管理水平,为降低经营成本,提高效益,增强超市扩张力,提供有效的技术保障。 背景说明 21世纪,超市的竞争也进入到了一个全新的领域,竞争已不再是规模的竞争,而是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是超市业的竞争核心。零售领域目前呈多元发展趋势,多种业态:超市、仓储店、便利店、特许加盟店、专卖店、货仓等相互并存。如何在激烈的竞争中扩大销售额、降低经营成本、扩大经营规模,成为超市营业者努力追求的目标。 项目确立 针对超市的特点,为了帮助超市解决现在面临的问题,提高小型超市的竞争力,我们将开发以下系统:前台POS销售系统、后台管理系统,其中这两个子系统又包含其它一些子功能。 应用范围 本系统适应于各种小型的超市。 定义 (1)商品条形码:每种商品具有唯一的条形码,对于某些价格一样的商品,可以使用自定义条形码。 (2)交易清单:包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号。 (3)商品积压:在一定时期内,远无法完成销售计划的商品会造成积压。 (4)促销:在一定时期内,某些商品会按低于原价的促销价格销售。 库存告警提示:当商品的库存数量低于库存报警数量时发出提示。 (5)盘点:计算出库存、销售额、盈利等经营指标。 参考资料 《数据库原理及设计》陶宏才编清华大学出版社 《SQL Server 2000 实用教程》范立南编清华大学出版社 《SQL Server 2000 编程员指南》李香敏编北京希望电子出版社 《轻松搞定 SQL Server 2000 程序设计》Rebecca 编 《软件工程规范》Watts 编清华大学出版社

完整word版,数据库课程设计总结,推荐文档

数据库课程设计总结 数据库课程设计个人总结 姓名:邢王秀学号:201624101215 班级:09计本班 一个月的时间非常快就过去了,这一个月我不敢说自 己有多大的进步,获得了多少知识,但起码是了解了项目开 发的部分过程。虽说上过数据库相关的课程,但是没有亲身 经历过相关的设计工作细节。这次课程设计给我提供了一个 很好的机会。 通过这次课程设计发现这其中需要的很多知识我们没 有接触过,上网查找资料的时候发现我们以前所学到的仅仅 是皮毛,还有很多需要我们掌握的东西我们根本不知道。同 时也发现有很多已经学过的东西我们没有理解到位,不能灵 活运用于实际,不能很好的用来解决问题,这就需要自己不 断的大量的实践,通过不断的自学,不断地发现问题,思考 问题,进而解决问题。在这个过程中我们将深刻理解所学知 识,同时也可以学到不少很实用的东西。 这次的数据库课程设计,我们组负责的企业信息文档 管理系统的设计。这课题是自拟的。我们组实行的分工合作。我主要是负责数据库功能模块设计这部分。 从各种文档的阅读到需求分析、概要设计、数据库总 体设计、代码编写与调试,我们都准备了好长时间。组内分

工合作的整个过程,我亲身体验了一回系统的设计开发过 程,分工合作的好处。很多东西书上写的很清楚,貌似看着 也很简单,思路非常清晰。但真正需要自己想办法去设计一 个系统的时候才发现其中的难度。经常做到后面突 然就发现自己一开始的设计有问题,然后又回去翻工, 在各种反复中不断完善自己的想法。 我想有这样的问题不止我一个,事后想想是一开始着 手做的时候下手过于轻快,或者说是根本不了解自己要做的 这个系统是给谁用的。因为没有事先做过仔细的用户调查, 不知道整个业务的流程,也不知道用户需要什么功能就忙着 开发,这是作为设计开发人员需要特别警惕避免的,不然会 给后来的工作带来很大的麻烦,甚至可能会需要全盘推倒重 来。所以以后的课程设计要特别注意这一块的设计。 经过组内讨论,我们确定的课题是企业信息文档管理 系统。说实话,我对这个系统不是很了解。通过上网查找资 料、相关文献的阅读,我对该系统有了大体的了解。 在需求分析过程中,我们通过上网查资料,去图书馆 查阅相关资料,结合我们的生活经验,根据可行性研究的结 果和用户的需要,分析现有情况及问题。在一个月的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间 遇到很多问题,经过组内讨论。最终把它解决了。通过这次 课程设计,我对数据库的设计更加熟练了。

几种数据库常用函数比较

一、DB2、ACCESS、ORACLE的常用函数比较:

ORACLE中的应为:SUBSTR(字符串1,LENGTH(字符串1) -位数1 + 1,位数1) 或:SUBSTR(字符串1,-位数1,位数1) 二、SQL语句的差异: 1、Select:(三种数据库基本相同) 基本相同语句: Select * from 表名where 条件 特殊语句:(三种数据库都可执行) Select * from (Select 字段1,字段2,字段3 from YH_User) 2、Insert: (三种数据库基本相同) 基本相同语句: Insert into 表名(字段列表)V alues(表达式1,…表达式n) | select 字段列表from 表名Where 条件

DB2:存在特殊语句: INSERT INTO ND2000.XS_PARAM(PARAM_ID,SHOWIF,PARAM_NAME,PARAM_V ALUE,COMMENT1) (V ALUES(5,0,'销帐最大零头','1','单位为元。'),(6,0,'滞纳月','1','本参数和滞纳日期同时使用。说明见滞纳日期。'),(7,0,'滞纳日','1','电费计算后的第N个月的M号时,如果用户电费仍未缴清,则开始计算滞纳金。其中N为滞纳期限,M为滞纳日期。')); 3、Delete: (三种数据库基本相同) 基本相同语句: Delete from 表名Where 条件 4、Update: 基本相同语句: update 表名set 字段1=表达式,字段2=表达式.. 字段n=表达式where 条件 DB2、Oracle类似,Access不一样 Access: Update bb_temp,bb_param set bb_temp.c1=bb_param.c1, bb_temp.c2=bb_param.c2 where bb_temp.c0=bb_param.c0; DB2: Update bb_temp set (c1,c2)= (select C1,c2 from bb_param where C0=bb_temp.c0) Oracle: update xs_param1 set (param_name,param_value)= (select param_name,param_value from xs_param where xs_param.param_id=xs_param1.param_id ) 特别说明:

知网、万方、维普三种主流数据库比较

知网、万方和维普三种主流数据库比较 中国知网(CNKI) 简介:中国知识资源总库(CNKI)《中国知识资源总库》是由清华大学主办、 中国学术期刊(光盘版)电子杂志社出版、清华同方知网(北京)技术有限公司发行、数百位科学家、院士、学者参与建设,精心打造的大型知识服务平台和数字化学习系统。目前,《总库》囊括了自然科学、人文社会科学及工程技术各领域知识,拥有期刊、报纸、博硕士培养单位的博士和优秀硕士学位论文、全国重要会议论文、中小学多媒体教辅以及1000多个加盟数据库。全文采用CAJ和PDF 格式,必须下载专门的CAJ和PDF浏览器才可阅读。 数据库:《中国期刊全文数据库(CJFD)》截至2007年3月共收录了国内8127 种期刊,全文文献总量已达2272万多篇,收录起始时间一般为1994年,个别追溯到1979年或创刊年,按学科分126个专题,内容每日累增。产品形式有网络形式、光盘形式、《中国期刊专题全文数据库光盘版》。《中国优秀博硕士学位论文全文数据库(CDMD)》收录2000年至今300多个博硕士培养单位的学位论文,内容每日累增。《中国重要报纸全文数据库(CCND)》收录2000年至今1000多种重要报纸,内容每日累增。《中国重要会议论文集全文数据库》(CPCD)收录2000年至今400家学术团体的会议论文,内容每日累增。

搜索界面: 收费方式:

使用步骤: 数据库特点:最全面的中文数据库,内容丰富,更新速度快,收费灵活,价格较万方和维普适中。

万方数据库 简介:集纳了涉及各个学科的期刊、学位、会议、外文期刊、外文会议等类型 的学术论文,法律法规,科技成果,专利、标准和地方志。期刊论文:全文资源。收录自1998年以来国内出版的各类期刊6千余种,其中核心期刊2500余种,论文总数量达1千余万篇,每年约增加200万篇,每周两次更新。 搜索界面: 收费方式:

常见主流数据库的分类与详细比较

常见主流数据库分类 1、IBM 的DB2 DB2是IBM著名的关系型数据库产品,DB2系统在企业级的应用中十分广泛。截止2003年,全球财富500强(Fortune 500)中有415家使用DB2,全球财富100强(Fortune100)中有96家使用DB2,用户遍布各个行业。2004年IBM的DB2就获得相关专利239项,而Oracle 仅为99项。DB2目前支持从PC到UNIX,从中小型机到大型机,从IBM到非IBM(HP及SUN UNIX 系统等)的各种操作平台。 IBM绝对是数据库行业的巨人。1968年IBM在IBM 360计算机上研制成功了IMS这个业界第一个层次型数据库管理系统,也是层次型数据库中最为著名和最为典型的。1970年,IBM E.F.Codd发表了业界第一篇关于关系数据库理论的论文“A Relational Model of Data for Large Shared DataBanks”,首次提出了关系模型的概念。1974年,IBM Don Chamberlin和Ray Boyce通过System R项目的实践,发表了论文“SEQUEL:A Structured English Query Language”,我们现在熟知SQL就是基于它发展起来的。IBM 在1983年发布了DATABASE 2(DB2)for MVS(内部代号为“Eagle”),这就是著名的DB2数据库。2001年IBM以10亿美金收购了Informix的数据库业务,这次收购扩大了IBM分布式数据库业务。2006 DB2 9作为第三代数据库的革命性产品正式在全球发布。 作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器——System/38,随后是SQL/DSforVSE 和VM,其初始版本与SystemR研究原型密切相关。 DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。 2、Oracle Oracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。 Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。IDC(Internet Data Center)2007统计数据显示数据库市场总量份额如下:Oracle 44.1% IBM 21.3%Microsoft 18.3% Teradata 3.4% Sybase 3.4%。不过从使用情况看,BZ Research的2007年度数据库与数据存取的综合研究报告表明76.4%的公司使用了Microsoft

小型超市管理系统数据库课程设计

小型超市管理系统数据库 课程设计 Newly compiled on November 23, 2020

山西大学 计算机与信息技术学院 《数据库系统》课程设计论文 题目:小型超市管理系统数据库设计组长王建亮 专业软件工程 班级大二 授课教师 2013/6/19 小型超市管理系统 目录

第一章系统概述1.1系统开发背景

21世纪,超市的竞争也进入到了一个全新的领域,竞争已不再是规模的竞争,而 是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是超市业的竞争 核心。零售领域目前呈多元发展趋势,多种业态:超市、仓储店、便利店、特许加盟 店、专卖店、货仓等相互并存。如何在激烈的竞争中扩大销售额、降低经营成本、扩 大经营规模,成为超市营业者努力追求的目标。因此,我们很有必要制定一套合理、 有效,规范和实用的超市管理系统,对超市的日常业务进行集中统一的管理。另一方 面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息 管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。 针对超市的特点,为了帮助超市解决现在面临的问题,提高小型超市的竞争力, 我们将开发以下系统:前台POS销售系统、后台管理系统,其中这两个子系统又包含其 它一些子功能。 1.2系统开发意义 超市管理作为计算机应用的一个分支,有着手工管理无法比拟的优点。该系统的三大益处有:(1)大大提高超市的运作效率; (2)通过全面的信息采集和处理,辅助提高超市的决策水平; (3)使用本系统,可以迅速提升超市的管理水平,为降低经营成本,提高效益, 增强超市扩张力,提供有效的技术保障。 因此,开发一套能够为消费者及超市工作人员提提供方便的超市管理系统,将是 非常必要的,也是十分及时的。

MPP数据库对比分析

1 概述 随着海量数据问题的出现,海量管理能力,多类型,变化快,高可用性,低成本,高端可扩展性等需求给企业数据战略带来了巨大的挑战。企业数据仓库、数据中心的技术选型变得尤其重要!所以在选型之前,有必要对目前市场上各种大数据量的解决方案进行分析。 2 主流分布式并行处理数据库产品介绍 2.1 Greenplum 2.1.1 基础架构 Greenplum 是基于Hadoop 的一款分布式数据库产品,在处理海量数据方面相比传统数据库有着较大的优势。 Greenplum 整体架构如下图: 数据库由Master Severs 和Segment Severs 通过Interconnect 互联组成。 Master 主机负责:建立与客户端的连接和管理;SQL 的解析并形成执行计划;执行计划向Segment 的分发收集Segment 的执行结果;Master 不存储业务数据,只存储数据字典。 Segment 主机负责:业务数据的存储和存取;用户查询SQL 的执行。 2.1.2 主要特性 Greenplum 整体有如下技术特点: Shared-nothing 架构 Network Interconnect ... Master Severs 查询解析、优化、分发 Segment Severs 查询处理、数据存储 External Sources 数据加载

海量数据库采用最易于扩展的Shared-nothing架构,每个节点都有自己的操作系统、数据库、硬件资源,节点之间通过网络来通信。 ◆基于gNet Software Interconnect 数据库的内部通信通过基于超级计算的“软件Switch”内部连接层,基于通用的gNet (GigE,10GigE) NICs/switches在节点间传递消息和数据,采用高扩展协议,支持扩展到1000个以上节点。 ◆并行加载技术 利用并行数据流引擎,数据加载完全并行,加载数据可达到4。5T/小时(理想配置)。并且可以直接通过SQL语句对外部表进行操作 ◆支持行、列压缩存储技术 海量数据库支持ZLIB和QUICKLZ方式的压缩,压缩比可到10:1。压缩数据不一定会带来性能的下降,压缩表通过利用空闲的CPU资源,而减少I/O资源占用。 海量数据库除支持主流的行存储模式外,还支持列存储模式。如果常用的查询只取表中少量字段,则列模式效率更高,如查询需要取表中的大量字段,行模式效率更高。 海量数据库的多种压缩存储技术在提高数据存储能力的同时,也可根据不同应用需求提高查询的效率 2.1.3主要局限 ●列存储模式的使用有限制,不支持delete/update操作。 ●用户不可灵活控制事务的提交,用户提交的处理将被自动视作整体事务,整体提交, 整体回滚。 ●数据库需要额外的空间清理维护(vacuum),给数据库维护带来额外的工作量。 ●用户不能灵活分配或控制服务器资源。 ●对磁盘IO有比较高的要求。 ●备份机制还不完善,没有增量备份。 2.2Vertica 2.2.1基础架构 与以往常见的行式关系型数据库不同,Vertica 是一种基于列存储(Column-Oriented)的数据库体系结构,这种存储机构更适合在数据仓库存储和商业智能方面发挥特长。 常见的RDBMS 都是面向行(Row-Oriented Database)存储的,在对某一列汇总计算的时候几乎不可避免的要进行额外的I/O 寻址扫描,而面向列存储的数据库能够连续进行I/O 操作,减少了I/O 开销,从而达到数量级上的性能提升。 同时,Vertica 支持海量并行存储(MPP)架构,实现了完全无共享,因此扩展容易,

常见主流数据库的分类与详细比较

1、IBM 的DB2 DB2是IBM著名的关系型数据库产品,DB2系统在企业级的应用中十分广泛。截止2003年,全球财富500强(Fortune 500)中有415家使用DB2,全球财富100强(Fortune100)中有96家使用DB2,用户遍布各个行业。2004年IBM的DB2就获得相关专利239项,而Oracle 仅为99项。DB2目前支持从PC到UNIX,从中小型机到大型机,从IBM到非IBM(HP及SUN UNIX 系统等)的各种操作平台。 IBM绝对是数据库行业的巨人。1968年IBM在IBM 360计算机上研制成功了IMS这个业界第一个层次型数据库管理系统,也是层次型数据库中最为著名和最为典型的。1970年,IBM 发表了业界第一篇关于关系数据库理论的论文“A Relational Model of Data for Large Shared DataBanks”,首次提出了关系模型的概念。1974年,IBM Don Chamberlin和Ray Boyce通过System R项目的实践,发表了论文“SEQUEL:A Structured English Query Language”,我们现在熟知SQL就是基于它发展起来的。IBM 在1983年发布了DATABASE 2(DB2)for MVS (内部代号为“Eagle”),这就是著名的DB2数据库。2001年IBM以10亿美金收购了Informix 的数据库业务,这次收购扩大了IBM分布式数据库业务。2006 DB2 9作为第三代数据库的革命性产品正式在全球发布。 作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器——System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。 DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。 2、 Oracle Oracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。 Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。IDC(Internet Data Center)2007统计数据显示数据库市场总量份额如下:Oracle % IBM %Microsoft % Teradata % Sybase %。不过从使用情况看,BZ Research的2007年度数据库与数据存取的综合研究报告表明%的公司使用了Microsoft SQL Server,不过在高端领域仍然以Oracle,IBM,Teradata为主。

相关文档