博文

短信系统,以及多用户留言本数据库设计方案剖析(2006-02-18 19:36:00)

摘要: 短信系统,以及多用户留言本数据库设计方案剖析  
      众所周知,设计一个优秀站点或计算机应用系统,必须有强大,有效的数据库的支撑.     数据库的设计一般要符合三大范式,即 :第一范式(1NF):数据库表中的字段都是单一属性的,不可再分.第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y [见上面一篇]http://blog.programfan.com/article.asp?id=10192     分析:一个短信系统包含:用户信息,好友信息,和短信信息.     1.用户信息包含:用户ID,用户名称,用户其他信息....     2.好友信息包含:好友ID,好友名称,其他信息....     3.短信<留言信息>包含:短信ID,短信发送者,短信接收者,短信标题,短信内容,发送时间,是否已读.....
                         回复ID,发送者,接收者,标题,内容,回复时间,是否已读......
   二.尝试:只建立一个表.包含如上信息.数据表中信息无包含关系,符合第一范式[1NF].
    &nbs......

阅读全文(4595) | 评论:1 | 复制链接

数据库设计范式解析(2006-02-18 19:31:00)

摘要: 数据库设计范式解析
 
  引言

   数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

   设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不按照范式来设计数据库。

   实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程。

   范式说明

   第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

   例如,如下的数据库表是符合第一范式的:

字段1 字段2 字段3 字段4            
   而这样的数据库表是不符合第一范式的:

字段1 字段2 字段3 字段4       字段3.1 字段3.2   
   很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

   第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

   假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

   (学号, 课程名称) ......

阅读全文(2455) | 评论:0 | 复制链接

关系数据库(2006-01-08 07:58:00)

摘要:数据库这一概念提出后,先后出现了几种数据模型。其中基本的数据模型有三种:层次模型系统、网络模型系统、和关系模型系统。60 年代末期提出的关系模型具有数据结构简单灵活、易学易懂且具有雄厚的数学基础等特点,从70 年代开始流行,发展到现在已成为数据库的标准。目前广泛使用的数据库软件都是基于关系模型的关系数据库管理系统。

3.2.1 关系模型(RM 即Relational Model)
    关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。
    所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。
    所谓联系就是指实体之间的关系,即实体之间的对应关系。联系可以分为三种:
     ·一对一的联系。如:一个人只有一种性别,一个人→性别为一对一的联系;
     ·一对多的联系。如:相同性别的人有许多个,性别→人为一对多的联系;
     ·多对一的联系。如:很多人有同一个性别,人→性别为多对一的联系。
    通过联系就可以用一个实体的信息来查找另一个实体的信息。
    关系模型把所有的数据都组织到表中。表是由行和列组成的,行表示数据的记录,列表示记录中的域。表反映了现实世界中的事实和值。

3.2.2 关系数据库(RDB 即Relational Database)
    所谓关系数据库就是基于关系模型的数据库。
    1、关系数据库管理系统(RDBMS)
     ·关系数据库管理系统就是管理关系数据库的计算机软件。
......

阅读全文(3330) | 评论:2 | 复制链接

MDF文件在SQL Server数据库中恢复技术(2005-12-30 21:00:00)

摘要:先把要恢复的文件置于MSSQL里的DATA文件里
进入MSSQL主数据库服务器后
1.我们使用默认方式建立一个供恢复使用的数据库(如MHDYF2005)。可以在SQL Server里面建立。
2.停掉数据库服务器。
3.将刚才生成的数据库的日志文件MHDYF2005_log.ldf删除,用要恢复的数据库mdf(yu1.mdf)文件覆盖刚才生成的数据库数据文件MHDYF2005_data.mdf。
4.启动数据库服务器。(刷新之后)此时会看到数据库MHDYF2005的状态为“置疑”。这时候不要对此数据库进行任何操作。
5.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure ‘allow updates‘,1
go
reconfigure with override
go
6.设置MHDYF2005为紧急修复模式,语句如下:
update sysdatabases set status=-32768 where dbid=DB_ID(‘MHDYF2005‘)
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
7.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log(‘MHDYF2005‘,‘C:\Program Files\Microsoft SQL Server\MSSQL\Data\MHDYF2005_log.ldf‘)
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了MHDYF2005库的系统表,那么......

阅读全文(2978) | 评论:0 | 复制链接

SQL数据库恢复技术(2005-12-30 20:59:00)

摘要:sql数据库修复技术
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)
1、正常的备份、sql数据库修复方式
正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:Sp_detach_db 数据库名
连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′
使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:
数据库修复包括:sql数据库修复 sql数据库恢复sql server修复 文件修复 raid数据恢复 sql数据库修复 raid磁盘阵列 sql恢复 sql server恢复 假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。
卸下数据库:sp_detach_db 'test'
连接数据库:sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log......

阅读全文(4039) | 评论:0 | 复制链接

SQL注入天书之ASP注入漏洞全接触(2005-12-29 21:59:00)

摘要:小竹
2005-5-3 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。
    引言     随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注入。     SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。     但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。     根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。了解ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗?Let’s Go...     入门篇     如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。     第一节、SQL注入原理     以下我们从一个网站www.mytest.com开始(注:本文发表前已征得该站站长......

阅读全文(2715) | 评论:1 | 复制链接

第 12 章 – 数据访问安全性(2005-12-29 19:26:00)

摘要:第 12 章 – 数据访问安全性 更新日期: 2004-4-20 0:00:00 本页内容 本章内容 目标 适用范围 如何使用本章内容 数据访问安全性简介 身份验证 授权 安全通信 用最少权限连接 创建一个权限最少的数据库帐户 安全存储数据库连接字符串 为数据库验证用户身份 SQL 注入式攻击 审核 SQL Server 的进程标识 总结 本章内容 数据存储(如 Microsoft SQL Server 2000)在大多数分布式 Web 应用程序中均扮演着重要的角色。这种数据存储可以包含所有类型的数据,包括用户应用程序首选项、机密的人事记录与医疗记录、审核日志与安全日志,甚至还包括用户访问应用程序时所需的凭据。显而易见,在存储这类数据以及对其执行读/写操作时都需要保证它们的安全,以确保只有具备相应授权权限的用户才能对其进行访问。 本章将介绍与访问数据存储相关的重要安全问题的解决方案,并提供从分布式 Web 应用程序访问数据的一些建议。本章主要侧重于 SQL Server 2000,但其中的许多主题也同样适用于其他数据存储。 返回页首 目标 本章的目标是: • 生成安全数据访问组件。 • 使用 Windows 身份验证或 SQL Server 身份验证从 ASP.NET 连接到 SQL Server。 • 选择一种适于您的应用程序的 SQL Server 2000 授权机制。 • 使用 SSL 或 IPSec 来确保客户端应用程序与数据源之间数据传输的安全性。 • 创建一个权限最少的数据库帐户,以供 SQL Server 2000 使用。 • 安全存储数据库连接字符串和凭据。 • 使用密码哈希值和 Salt 值在用于身份验证的数据库中安全存储用户凭据。 • 保护 SQL 数据库,以防 SQL 注入式攻击。 • 在 SQL Server 2000 上启用审核。 返......

阅读全文(5518) | 评论:1 | 复制链接

SQL中代替Like语句的另一种写法(2005-12-18 13:36:00)

摘要:比如查找用户名包含有"c"的所有用户, 可以用

use mydatabase
select * from table1 where username like'%c%"


下面是完成上面功能的另一种写法:
use mydatabase
select * from table1 where charindex('c',username)>0
这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字
符串及其它的运算上, 所以运用charindex函数也没什么大不了. 用这种方法也有好处, 那就是对%,|等在不能直接用like
查找到的字符中可以直接在这charindex中运用, 如下:
use mydatabase
select * from table1 where charindex('%',username)>0
也可以写成:
use mydatabase
select * from table1 where charindex(char(37),username)>0
ASCII的字符即为% 
......

阅读全文(3019) | 评论:0 | 复制链接

SQL Server 连接基础知识(2005-12-18 13:35:00)

摘要:型数据库设计原则   
作者:思索 整理:南海
  一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。一般来讲,在一个MIS系统分析、设计、测试和试运行阶段,因为数据量较小,设计人员和测试人员往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。笔者依据多年来设计和使用数据库的经验,提出以下一些设计准则,供同仁们参考。


命名的规范  

  

  不同的数据库产品对对象的命名有不同的要求,因此,数据库中的各种对象的命名、后台程序的代码编写应采用大小写敏感的形式,各种对象命名长度不要超过30个字符,这样便于应用系统适应不同的数据库。


游标(Cursor)的慎用   

  

  游标提供了对特定集合中逐行扫描的手段,一般使用游标逐行遍历数据,根据取出的数据不同条件进行不同的操作。尤其对多表和大表定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等特甚至死机,笔者在某市《住房公积金管理系统》进行日终帐户滚积数计息处理时,对一个10万个帐户的游标处理导致程序进入了一个无限期的等特(后经测算需48个小时才能完成)(硬件环境:Alpha/4000 128Mram ,Sco Unix,Sybase 11.0),后根据不同的条件改成用不同的UPDATE语句得以在二十分钟之内完成。


示例如下:   

  

Declare Mycursor cursor for select count_no from COUNT


Open Mycursor

Fetch Mycursor into @vcount_no

While (@@sqlstatus=0)

  Begin

       If @vcount_no=’’ 条件1

          操作1 <......

阅读全文(3117) | 评论:0 | 复制链接

精通数据库系列之入门-基础篇(2005-12-18 13:33:00)

摘要:什么是数据库系统?

  是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言,实用程序以及数据库管理系统。数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这些数据为多个应用服务,独立于具体的应用程序。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据库管理系统是一种系统软件,它的主要功能是维护数据库并有效地访问数据库中任意部分数据。对数据库的维护包括保持数据的完整性、一致性和安全性。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。

  数据库系统的个体含义是指一个具体的数据库管理系统软件和用它建立起来的数据库;它的学科含义是指研究、开发、建立、维护和应用数据库系统所涉及的理论、方法、技术所构成的学科。在这一含义下,数据库系统是软件研究领域的一个重要分支,常称为数据库领域。

  数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程碑,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使的计算机走出科研机构进入各行各业、进入家庭。
数据库系统的产生和发展

  众......

阅读全文(4061) | 评论:0 | 复制链接