数据库与架构

来源:互联网 发布:c 字符串数组拷贝 编辑:程序博客网 时间:2024/05/18 00:19

学习数据库之前,我们应该想到为什么要创建数据库?数据库存在的价值和意义是什么?其实数据库是一个存储表、索引,以及表之间逻辑运算关系的容器。它可以使用触发器这样的工具保持表之间数据的一致性,同时可以提高执行的效率,把在服务器端可以完成的逻辑计算分离出来,单独交给服务器来执行,就不用把所有要处理的数据都下载到客户端去执行,显著提高效率。
(1)

  • 数据库实例

    在企业内部部署的SQL Server中可以安装多个实例,每个实例独立于其他实例。可以将多个实例中的一个作为默认实例,其他实例都是命名实例。

  • 架构与对象
    可以把架构看作是表、视图、存储过程等对象的容器,其独立于创建他们的数据库用户而存在。删除用户不会删除架构中的对象。将架构和用户分离极大地简化了删除数据库用户的操作。用户可以通过获取创建架构的权限在数据库中创建和更改架构。 架构作为一个命名空间,被用作对象名称的前缀,例如:假设在一个名为Person的架构中有一个名为Person的表,架构限定式对象名称就是Person.Person。 因此在引用对象时要使用两部分式对象名称,即加上架构名称

  • 数据库文件与文件组
        SQL Server将数据库映射为一组操作系统文件,数据和日志信息绝不混合在同一文件中。 每个数据库必须至少有一个数据文件和一个日志文件(SQL Server默认),数据文件存储对象数据,日志文件存储SQL Server需要维护事务的信息。数据文件包括主文件、次要文件,主文件包含着数据库的启动信息及用于数据存储,每个数据库都有一个主文件,文件拓展名为.mdf,次要文件的拓展名为.ndf,事务日志的拓展名为.ldf,事务日志文件不属于任何文件组。
        数据文件被组织在称为“文件组”的逻辑组中。每个数据库至少要有一个PRIMARY文件组,包含主文件和为放入其他文件组的所有次要文件。文件组队组内的所有文件都是用按比例填充策略,文件组中的所有文件都满时,将自动扩展多一个文件。使用文件和文件组可以跨多个磁盘、多个磁盘控制器创建数据库,可同时访问数据,加快数据库操作的速度。此外,文件和文件组还允许数据布局。
    (2)创建数据库

创建数据库之前必须确定数据库的名称、所有者、大小以及存储该数据库的文件和文件组。

--创建未指定文件的数据库CREATE DATABASE mydata--创建指定数据和事务日志文件的数据库(没有使用PRIMARY指定主文件)CREATE DATABASE SalesON (NAME = Sales_dat, FILENAME = 'e:\SQL server\SQLfiles\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )LOG ON(  NAME = Sales_log,  FILENAME = 'E:\SQL server\SQLfiles\saledat.ldf',  SIZE = 5,  MAXSIZE = 25,  FILEGROWTH = 5);--通过指定多个数据和事务日志文件创建数据库,主文件是列表中的第一个文件(指定了PRIMARY)CREATE DATABASE ArchiveONPRIMARY   (NAME = Arch1,   FILENAME = 'E:\SQL server\SQLfiles\Arch1.mdf',   SIZE =   5,   MAXSIZE = 25,   FILEGROWTH = 5 ),     (NAME = Arch2,   FILENAME = 'E:\SQL server\SQLfiles\Arch2.mdf',   SIZE =5,   MAXSIZE = 25,   FILEGROWTH = 5 ),     (NAME = Arch3,   FILENAME = 'E:\SQL server\SQLfiles\Arch3.mdf',   SIZE =   5,   MAXSIZE = 25,   FILEGROWTH = 5 )LOG ON    (NAME = Archlog1,    FILENAME = 'E:\SQL server\SQLfiles\Archlog1.ldf',    SIZE = 5,    MAXSIZE = 20,    FILEGROWTH = 5),    (NAME = Archlog2,    FILENAME = 'E:\SQL server\SQLfiles\Archlog2.ldf',    SIZE = 5,    MAXSIZE = 20,    FILEGROWTH = 5);--创建具有文件组的数据库CREATE DATABASE salesTestONPRIMARY(NAME = Spril1_dat,FILENAME = 'E:\SQL server\SQLfiles\Spril1_data.mdf',SIZE = 5,MAXSIZE = 20,FILEGROWTH = 15%),(NAME = Spril2_dat,FILENAME = 'E:\SQL server\SQLfiles\Spril2_data.mdf',SIZE = 5,MAXSIZE = 20,FILEGROWTH = 15%),FILEGROUP SalesGroup1( NAME = SGrp1Fi1,FILENAME = 'E:\SQL server\SQLfiles\SGrp1Fi1.mdf',SIZE = 5,MAXSIZE = 20,FILEGROWTH = 15%),(NAME = SGrp1Fi2,FILENAME = 'E:\SQL server\SQLfiles\SGrp1Fi2.mdf',SIZE = 5,MAXSIZE = 20,FILEGROWTH = 15%),FILEGROUP SalesGroup2(NAME = SGrp2Fi1,FILENAME = 'E:\SQL server\SQLfiles\SGrp2Fi1.mdf',SIZE = 5,MAXSIZE = 20,FILEGROWTH = 15%),(NAME = SGrp2Fi2,FILENAME = 'E:\SQL server\SQLfiles\SGrp2Fi2.mdf',SIZE = 5,MAXSIZE = 20,FILEGROWTH = 15%)LOG ON( NAME = Sales_log,FILENAME  =  'E:\SQL server\SQLfiles\Sales_log.ldf',SIZE = 20,FILEGROWTH = 15%);--可以用DB_ID函数判断数据库是否已经存在,若存在,会返回不为空的标识号SELECT DB_ID(N'AdventureWorks2012') AS [Database ID]GO--实际工作中常常先判断某个数据库是否已存在,若已存在,则先删除该名称的数据库再创建一个,如下:USE master;GOIF DB_ID(N'salesTest') IS NOT NULLDROP DATABASE salesTest;GOCREATE DATABASE salesTest;GO

(3)修改数据库
若数据库已经用完分配给它的空间且不能自动增长,会出现1105错误,此时我们可以拓展数据库,至少增大1MB,使用ALTER DATABASE语句设置数据库大小或向数据库添加文件

--下例使用ADD FILE命令向数据库SalesTest2的SalesGroup1文件组里增加文件SGrp1Fi3ALTER DATABASE  SalesTest2ADD FILE(NAME = SGrp1Fi3,FILENAME = 'E:\SQL server\SQLfiles\SGrp1Fi3.mdf',SIZE = 15,MAXSIZE = 30,FILEGROWTH = 5)TO FILEGROUP SalesGroup1;--执行以下语句可以删除上面添加的SGrp1Fi3文件ALTER DATABASE SalesTest2REMOVE FILE SGrp1Fi3;--下面语句可以修改数据库SalesText2的SPril1文件ALTER DATABASE SalesText2MODIFY FILE(NAME = SPril1,SIZE = 15,MAXSIZE = 30)--下面语句用于向SalesText2添加一个名为SalesGroup3的文件组ALTER DATABASE salesADD FILEGROUP SalesGroup3;--重命名文件组SalesGroup3ALTER DATABASE salesMODIFY FILEGROUP SalesGroup3NAME = SalesGroup4;--删除刚刚添加的文件组ALTER DATABASE salesREMOVE FILEGROUP SalesGroup3;--收缩数据库和文件可以使用DBCC SHRINKDATABASE语句或DBCC SHRINKFE语句来手动收缩数据库或数据库中的文件。文件始终从末尾开始收缩。(比较少用)--重命名数据库(重命名前应该确保没有人使用该数据库,而且数据库设置为单用户模式。)ALTER DATABASE SalesText2SET SINGLE_USER; --设置为单用户模式GOALTER DATABASE SalesText2MODIFY NAME = Sales1; --重命名为SalesGOALTER DATABASE SalesText2SET MULTI_USER -- 重新设置为多用户

(4)删除数据库

--删除数据库DROP DATABASE salesTest;

(5)架构管理
微软一直建议使用两部分式架构:架构名称.对象名称

0 0
原创粉丝点击