数据库与架构
来源:互联网 发布: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
- 数据库与架构
- 与冯大辉谈数据库架构(InfoQ)
- 与冯大辉谈数据库架构(InfoQ)
- 与冯大辉谈数据库架构(InfoQ)
- 与冯大辉谈数据库架构(InfoQ)
- 大规模数据库架构与技术
- 关于存储、数据库与架构
- 与冯大辉谈数据库架构(InfoQ)
- 数据库与分布式架构策略思考
- EF架构与sqlserver数据库设计
- 数据库与三层架构你如何建立?
- 数据库基本架构与日志的作用
- 数据库的架构设计与性能优化
- 典型数据库架构设计与实践
- 典型数据库架构设计与实践
- 典型数据库架构设计与实践
- 典型数据库架构设计与实践
- 数据库学习之--Oracle 架构与MySQL架构对比
- C语言调用System命令并获取命令的返回值
- spark-shell基本的RDD操作
- 消息中间件(一)分布式系统事务一致性解决方案大对比,谁最好使?
- linux-grep--匹配前后几行
- iOS常用小功能(电话,短信,邮件)
- 数据库与架构
- 记录Python各种各样的BUG
- extjs 简单的ajax请求实例和后台返回格式
- Java并发编程规则:无状态对象永远是线程安全的
- 股票经济人通信网络 poj 1125 多源最短路
- 循环显示页面
- Spring MVC+Maven 实现同一项目的前端和后台交互
- 常用js
- 二叉树的遍历