数据库与架构

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

  • 数据库实例

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

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

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

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

--创建未指定文件的数据库
CREATE DATABASE mydata


--创建指定数据和事务日志文件的数据库(没有使用PRIMARY指定主文件)
CREATE DATABASE Sales
ON
 (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 Archive
ON
PRIMARY
   (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 salesTest
ON
PRIMARY
(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;
GO
IF DB_ID(N'salesTest') IS NOT NULL
DROP DATABASE salesTest;
GO
CREATE DATABASE salesTest;
GO

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

--下例使用ADD FILE命令向数据库SalesTest2的SalesGroup1文件组里增加文件SGrp1Fi3
ALTER DATABASE  SalesTest2
ADD FILE
(NAME = SGrp1Fi3,
FILENAME = 'E:\SQL server\SQLfiles\SGrp1Fi3.mdf',
SIZE = 15,
MAXSIZE = 30,
FILEGROWTH = 5)
TO FILEGROUP SalesGroup1;

--执行以下语句可以删除上面添加的SGrp1Fi3文件
ALTER DATABASE SalesTest2
REMOVE FILE SGrp1Fi3;

--下面语句可以修改数据库SalesText2的SPril1文件
ALTER DATABASE SalesText2
MODIFY FILE
(NAME = SPril1,
SIZE = 15,
MAXSIZE = 30)


--下面语句用于向SalesText2添加一个名为SalesGroup3的文件组
ALTER DATABASE sales
ADD FILEGROUP SalesGroup3;

--重命名文件组SalesGroup3
ALTER DATABASE sales
MODIFY FILEGROUP SalesGroup3
NAME = SalesGroup4;

--删除刚刚添加的文件组
ALTER DATABASE sales
REMOVE FILEGROUP SalesGroup3;

--收缩数据库和文件
可以使用DBCC SHRINKDATABASE语句或DBCC SHRINKFE语句来手动收缩数据库或数据库中的文件。文件始终从末尾开始收缩。(比较少用)

--重命名数据库(重命名前应该确保没有人使用该数据库,而且数据库设置为单用户模式。)
ALTER DATABASE SalesText2
SET SINGLE_USER; --设置为单用户模式
GO

ALTER DATABASE SalesText2
MODIFY NAME = Sales1; --重命名为Sales
GO

ALTER DATABASE SalesText2
SET MULTI_USER -- 重新设置为多用户

(4)删除数据库

--删除数据库
DROP DATABASE salesTest;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值