1、 关系数据库

    网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。关系数据模型提供了关系操作的特点和功能要求,无论是实体还是实体间的联系均由单一的结构类型--关系(表)来表示。一个关系数据库就是由若干个表组成。

2、  SQL Server 存储
(1)       盘区:区是管理空间的基本单位。一个区是八个物理上连续的页( 64K )。这意味着 SQL Server 数据库没 MB 16 个区。
(2)       页面:在 SQL Server 中,页的大小为 8 KB 。这意味着 SQL Server 数据库中每 MB 128 页。每页的开头是 96 字节的标头,用于存储有关页的系统信息。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元 ID
(3)       行:在数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目。每个条目记录对应行的第一个字节与页首的距离。行偏移表中的条目的顺序与页中行的顺序相反。
3、  数据库类型
master :控制用户数据库和 SQL Server 操作,存储用户账户、可配置的环境变量、系统错误消息等信息
model :新建用户数据库的模板原型
tempdb: 临时表以及其他临时的工作存储需要
msdb :调度信息和作业历史存储区域
4、  SQL 表的范式( NF
(1)       第一范式( 1NF ):是指数据库表的每一列都是不可分割的基本数据项,同一列中不能也有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。在第一范式中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
如图:
  

(2)       第二范式( 2NF ):建立在第一范式的基础上,要求数据库表中的每个实例或行可以被唯一的区分,为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识,这个唯一属性列被称为主关键字或主键、主码。第二范式要求实体的属性完全依赖于主关键字。
如图:
  

       
(3)       第三范式( 3NF ):建立在第二范式的基础上,要求一个数据库表不包含在其他表中已包含的非主关键字信息
      如图:
            

5、  SQL 命名规则
对象的名字必段以 Unicode2.0 规范定义的任意字母开头。包括大部分西文字母 A-Z a-z
正常对象的名字可多达 128 个字符,而临时对象的名字可多达 116 个字符
如果与 SQL 关键字冲突,或内部有空格的变量,必需使用(””)或方括号 ([])
6、  数据库用户账户和角色
(1)       登录名:在安全性 - 登录名,是用户登录 SQL Server 时所要输入的凭证,可以给登录名设置服务器角色,如果登录名设置成服务器角色,它是对所有数据库有相同权限。登录名是对于整个 SQL Server 而言的。
(2)       用户名:选择数据相应的数据库,安全性 用户,可以新建用户,新建用户时可以选择登录名。可以通过“安全对象”设置更为细致的用户权限。用户名是对于数据库而言的。
7、  创建数据库
(1)       每个数据库至少有两个文件(一个主文件和一个事务日志文件)和一个文件组。
SQL 语句:
create database MyDB
on
(
 name=mydb_dat,
 filename='f:\data\mydb_dat.mdf',
 size=5MB,
 maxsize=20mb,
 filegrowth=5%
)
log on
(
 name=mydb_log,
 filename='f:\data\mydb_log.ldf',
 size=5MB,
 maxsize=20mb,
 filegrowth=5%
)
 
(2)       使用文件组:可以创建同一个文件组,组名默认为 primary ,数据文件可以存放在不同磁盘上,数据库中的数组是分布在所有的次要文件中。
SQL 语句:
create database MyDB
on primary
(
 name=mydb_dat,
 filename='f:\data\mydb_dat.mdf',
 size=6MB,
 maxsize=20mb,
 filegrowth=5%
),
(
 name=dbfg_dat1,
 filename='d:\data\mydb_dat1.ndf',
 size=5mb,
 maxsize=20mb,
 filegrowth=5%
),
(
   name=dbfg_dat2,
 filename='e:\data\mydb_dat2.ndf',
 size=5mb,
 maxsize=20mb,
 filegrowth=1mb
)
log on
(
 name=mydb_log,
 filename='f:\data\mydb_log.ldf',
 size=5MB,
 maxsize=20mb,
 filegrowth=5%
(3)       使用主文件:如果主文件与次要文件,所分的组不同(主文件是 primary ,次要文件在 dbfg 中),在创建表时应该在最后跟上组名,否则系统默认创建在主文件组中,不同组中的表的数据增长不影响其他空间的大小。
SQL 语句:
create database MyDB
on primary
(
 name=mydb_dat,
 filename='f:\data\mydb_dat.mdf',
 size=6MB,
 maxsize=20mb,
 filegrowth=5%
),
filegroup dbfg
(
 name=dbfg_dat1,
 filename='d:\data\mydb_dat1.ndf',
 size=5mb,
 maxsize=20mb,
 filegrowth=5%
),
(
   name=dbfg_dat2,
 filename='e:\data\mydb_dat2.ndf',
 size=5mb,
 maxsize=20mb,
 filegrowth=1mb
)
log on
(
 name=mydb_log,
 filename='f:\data\mydb_log.ldf',
 size=5MB,
 maxsize=20mb,
 filegrowth=5%
)
注:当主要文件放不下时,数据放在次要文件中,等所有的次要文件都装满,只要文件的空间增加。
8、  数据库的增查删改
(1)       查看数据库
SQL 语句: sp_helpdb mydb
(2)       修改数据库名称:
a 、语句修改: alter database mydb modify name=youdb
b 、存储过程修改:
exec sp_dboption 'youdb','single',true
exec sp_renamedb 'youdb','mydb'
exec sp_dboption 'mydb','single',false
(3)       修改数据库文件大小
use master
alter database mydb
modify file
(
      name=mydb_dat,
        size=6MB,
        filegrowth=1%
)
(4)       增加数据库文件组
        use master
       alter database mydb
      add file
       (
        filename='f:\data\mydb_dat1.ndf',
        name=mydb_dat1,
        size=6MB,
       filegrowth=1%
      )
(5)       a 、从 SQL Server 中删除数据库,但仍然保存数据和日志文件
 exec sp_detach_db mydb
要求:数据库未被使用,数据库中没有未完成的事务,内存中没有该数据库的脏页
b、  附加数据库
exec sp_attach_db MyDB,'f:\data\mydb_dat.mdf'
要求:须指定主数据文件的名称和物理位置,可指定当前的文件名
(6)       数据库的备份
            backup database mydb to disk='f:\data\database_bak.dat' with name='backup'
还原数据库:
restore database mydb from disk ='f:\data\database_bak.dat' with replace
9、  数据库快照:是指数据库某一时刻的照片,数据库快照是只读静态的,保存的磁盘必须是 NTFS 格式
创建数据快照:
create database mydb1
on
(
name='mydb_dat',
filename='f:\data\mydb1.mdf'
)
as snapshot of mydb
恢复数据快照:
restore database mydb from database_snapshot='mydb1'
10、  导出数据库:右键数据库 -- 任务 生成脚本