关于SQL Server数据库设计的感悟
转载自:http://www.cnblogs.com/leonbao/archive/2008/03/07/1094821.html
关于SQL Server数据库设计的感悟,请指教
有问题的时候,我经常回来博客园寻找答案,久而久之,总结了一些东西。
妄自菲薄,请大家多指出错误,并给出意见
数据库设计三范式基本原则
第一范式:数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
也就是说,绝对不要出现下面的情况
学生信息
一年一班,97001,张三
这个很容易做到吧,呵呵。
第二范式:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
也就是说,绝对不要出现下面的情况
学号
姓名
年龄
课程名称
成绩
学分
97001
张三
13
化学
88
2
其中学号和课程名称是联合主键
因为:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
第三范式:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:
关键字段 → 非关键字段x → 非关键字段y
也就是说,绝对不要出现下面的情况
学号
姓名
年龄
所在学院
学院地点
学院电话
97001
张三
13
清华
中关村
8888888
因为:(学号) → (所在学院) → (学院地点, 学院电话)
特别注意:有时为了提高效率,第三范式可以被打破!多见于外键特别多而且数据量巨大的表。为了提高查询的效率,可以牺牲增删改的效率。
关于表、视图、存储过程:
表就是用来存储数据的,要尽量满足三个范式,不要出现冗余的东西。
视图是用来查询数据的,对于没有外键的基础表,可以直接用来查询。对于外键比较多的业务表,查询操作全部要通过视图。
存储过程和触发器我基本不用,我倾向于在数据库层面不要体现太多的业务(甚至不体现),我把业务全部集中在代码层面。其实还有另外一个原因,我不太精通这方面的技术,见谅见谅。
关于索引:
有朋友举过很好的一个例子,聚合索引就像拼音检索,非聚合索引就像部首索引。
拼音索引在整个字典中都是排好序的,就像查英文单词,你只要按照每页角上的英文索引就可以向
相关文档:
--语 句 功 能
--数据操作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER ......
For SQL Server2008:
http://www.microsoft.com/downloads/details.aspx?FamilyID=0e6168b0-2d0c-4076-96c2-60bd25294a8e&displaylang=en
For SQL Server2005:
http://www.microsoft.com/downloads/details.aspx?familyid=C6F14640-DA22-4604-AAAA-A45DE4A0CD4A&displaylang=en ......
Microsoft SQL Server
2008和Microsoft数据平台为开发人员提供了一个综合的编程架构,用于创建针对移动设备、桌面电脑、Web服务器,和企业服务器的基于数据的解
决方案。这个数据编程环境将数据访问和管理集成到一个应用程序的业务逻辑中,从而提高了开发人员的生产力。它提供了一个用于对异构数据源的数据访问和管理
的 ......
SQL Server里的 ISNULL 与 Oracle 中的 NULLIF不同:
SQL Server 中有两个参数,语法:
ISNULL(check_expression, replacement_value)
check_expression 与 replacement_value 数据类型必须一致
如果 check_expression 为 NULL,则返回 replacement_v ......