http://blog.csdn.net/weiwenhp/article/details/8088979

我们知道数据库,顾名思义.最重要的东东就是管理数据,而数据在系统中主要是保存在表(table)中,所以数据库差不多所有的机制和操作都是围绕着table在打转转了.表的重要性可想而知.在表在数据库是怎么保存起来,怎么去访问呢?

Oralce中的表的管理机制

实际上数据库管理系统和文件系统很类似的.数据库中的所有信息最终也是保存在一个个实际的文件中.

Oracle中的表都是最终保存在一个个后缀为DBF的文件中.而我们使用文件时会看到一个个目录.那Oracle中的目录就是表空间(tablespace).目录下会有很多文件,那一个表空间中也会有很多个数据文件. 然后我们创建用户时是会指定用户的默认表空间,这样当前用户创建表时默认都保存到此表空间中,但也可以显式指定表空间中.用户是Oracle中的一个逻辑概念.是为了便于管理而设立的.另外oracle中还有个schema的概念.

schema与用户的区别

实际上现在的Oracle中可以把shcema和用户完全等同.那你可能会问这样的话应该可以完全去掉schema这个概念,免得误导人啊.之所以保存着schema据说是出于历史原因.刚开始时Oralce中schema与用户不是一一对应的.先是创立很多个schema,每个schema有个默认的表空间,然后在schema下面可以创建一个个的表.最后创建用户时可以让一个用户对应多个schema.但这样一来比较复杂,不便于管理和理解.于是把用户和schema一一对应了.这样就条理清晰,显得更整洁优美,更便于管理和理解.

这个据说我也没验证过,没玩啥oracle 8i或更早的.有些人就说之所以有schema和用户的区分,应该这样理解.表空间相当于一个仓库.而schema相当于其中的一个柜子.你可以在里面存各种东西.而每个用户拥有一个schema.拥有一个柜子.一一对应的关系.正常情况你不能访问别人的柜子.但如果你有特权你也可以.

上面说了一堆还是来举个例子.

假如有数据文件DBFile1.DBF 属于表空间TSpace1

有数据文件        DBFile2.DBF 属于表空间TSpcae 2

创建用户用户Arwen 指定默认表空间为TSpace1.

在用户Arwen下面创建表Table1 不指定表空间的话Table1就保存到表空间TSpace1中,由于此时表空间只有一个数据文件,所以表实际上就保存到DBFile1.DBF中

但你也可以显式指定Table1的表空间为TSpace2,此时Table1会保存到DBFile2中

表的保存是一目了然了吧.   表 --> 表空间 -->数据文件

我们访问表时就是  : select * from Arwen.Table1          如果是当前用户也可以省略Arwen这个前缀.

SQL Server表管理机制

实际上SQL Server的机制和Oracle非常类似.可能就像C#和Java那么类似了.有趣的是C#和SQL Server是微软的,Java和Oracle都是Oracle的

首先表自然也都保存一个个实际数据文件文件中,如果是系统表的话都保存在后缀为mdb的文件中,叫主要文件,其他的表一般保存在ndb文件,叫次要文件.实际上也可以把文件后缀名改成其他的,所以你要闲得蛋痛想恶作剧可以都改成跟Oracle一样,后缀为DBF,当然还得改些其他配置信息.但一般不推荐你去改后缀名.

在Oracle中数据文件会属于某个表空间,但sql server没表空间这个概念,但有文件组的概念.其实差不多拉.

然后用户会创立一个个的数据库(database),并指定它默认的文件组,然后在database下可以创建一个个表,如果不指定就保存在默认的文件组中,也可以显式指定.其实这里的database就相当于Oracle中的schema.然后再创建用户,一个用户可以可以对应多个database,相当于以前Oracle中一个用户名可以对应多个schema一样.

还是再举个例子吧.

假如有数据文件DBFile1.ndb 属于文件组group1

有数据文件 DBFile2.ndb 属于文件组group2

创建database db1 指定默认文件组group1

在db1下面创建表Table1 不指定文件组的话Table1就保存到文件组group1中,由于此时文件组只有一个数据文件,所以表实际上就保存到DBFile1.ndb中

但你也可以显式指定Table1的文件组为group2,此时Table1会保存到DBFile2.ndb中

我们可以创建用户weiwenhp, 对应的databse是db1

表的保存是一目了然了吧.  表 --> 文件组-->数据文件

我们访问表时就是 : select * from db1.dbo.Table1

这里还有个dbo,是schema.等会再补充下,开始以为sql server中没有呢.不过这里的schema跟Oracle中的不一样.

于是你用用户weiwenhp登陆就可以执行上面的SQL语句了.这里还没讨论用户的权限.下次再谈权限的问题去了.如果另外某个用户不一定有权限执行这SQL

(注意:想了下发现上面说的不太准确,涉及到SQL Server中有个非常误导人的概念login和user的区别.login可以对应多个database但user 不能对应多个database,只能对应多个schema.而user与login的关系是一个login可以对应多个user.在后面讲权限管理时再讨论这问题)

补充

SQL Server中的Schema

我们在创建用户时可以直接给用户指定一个databse.但这样可能比较浪费,而且不便于仅限管理.于是每个databse下面还可以创建很多schema.你可以这样想databse相当于一个大仓库,而schema是其中的小柜子.你每次创建一个databse时是用一个模板来初始化的,这样database默认下面就已经有一些schema了,有一些小柜子了.你最熟悉的可能是dbo这个柜子了.当然你指定用户map一个database相当于把所有的schema都给他了.

当有了一个database后,你还可以在里面加些任意数据的schema,一个仓库中你爱整多少个柜子就整几个.有了schema后我们创建一个用户时就可以不指定一个database给他,而是只指定一个或多个schema.这样此用户就只能使用一个或多个柜子了.

举例,

假如有用户Arwen,给它指定一个database 名为mydb.这个database下有dbo,sm等schema此时用户创建一个表tmp

create table tmp(name char(20));

此表没有指定保存到哪个schema中,默认就保存到dbo中

查找select * from db1.dbo.tmp    //实际在management sudio这个图形界面的工具上,我们选了某个database后,然后查找时直接写

select * from tmp就行了.默认会加上db1.dbo

create table sm.mytable(name char(20));

此时指定了schema sm,则表保存到sm中.

要查找的话得select * from  db1.sm.mytable    //database加schema再加表名.

SQL Server与Oracle对比学习:表的管理和组织的更多相关文章

  1. SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

    http://blog.csdn.net/weiwenhp/article/details/8094739 目录(?)[-] SQL Server权限管理 login 与user的区别 角色role ...

  2. SQL Server与Oracle对比学习:权限管理(一)

    http://blog.csdn.net/weiwenhp/article/details/8093661 我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博 ...

  3. 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比

    SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...

  4. sql server 向oracle导入表

    选择相应的数据库,右键,任务,选择导出数据 点击下一步 选择Microsoft OLE DB Provider for Sql Server 选择下一步 目标选择.net Framework data ...

  5. 【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

    原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT ...

  6. Oracle和sql server中复制表结构和表数据的sql语句

    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...

  7. 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别

    SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...

  8. 关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题

    在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * f ...

  9. Win7 64位下sql server链接oracle的方法

    继上一次mysql同步sql server后,这一次需要将Oracle同步到sql server上来,方案相似,只是在sql server链接oracle的时候费了很多时间. 一.测试环境 本方案实现 ...

随机推荐

  1. App页面显示优化

    在开发移动端APP页面时,对各操作系统各种型号的手机进行适配是必须的.然鹅,上周在开发完一个落地页后,被测试给打了回来,其中列出了一个在我看来很小的问题:单击进入页面的时候,页面还没加载完的时候字体显 ...

  2. C++引用作为函数的参数

    引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式: void swap(int &p1, int &p2) //此处函数的形参都是引用 ...

  3. 个人学习笔记--MyBatis-的搭建及第一个程序

    1.导入Jar包 2.设置全局配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE c ...

  4. WinterCamp 2015 总结

    这次WC2015确实有很多遗憾,特别是考试的时候犯的低级错误,由于我没有看到第三题每个点输出不全可以得小分,对于又没跑出来的点,我都根本没有上交.这确实是一个很悲伤的事情,但是也给我了足够时间去反思. ...

  5. c# gzip解压缩

                , bytes.Length)) > )             {                line =  System.Text.Encoding.Defaul ...

  6. http://jinnianshilongnian.iteye.com/blog/1996071

    http://jinnianshilongnian.iteye.com/blog/1996071 http://my.oschina.net/jkcui/blog/388400 http://tian ...

  7. 四种必须知道的Android屏幕自适应解决方案

    一.细说layout_weight     目前最为推荐的Android多屏幕自适应解决方案.     该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中.其值越小,则对应的layout ...

  8. linux权限掩码

    我的博客:www.while0.com 主要是在新建文件或目录的时候,控制新文件或目录的默认权限. 文件:新建文件默认没有x权限,故新建文件在umask为000时最大权限是666. 目录:新建目录默认 ...

  9. POJ_2001_Shortest_Prefixes_(Trie)

    描述 http://poj.org/problem?id=2001 给出一组单词,求每个单词的最小唯一前缀. 最小唯一前缀:该前缀不能是其他单词的前缀,并且最小,如果不存在,则为该单词本身. Shor ...

  10. Lambda表达式与匿名方法

    在C#2中,由于有了方法组,匿名方法,类型的协变和抗变,使得运用delegate变得很容易,在注册事件时代码变得简单易读,但是在C# 2中,代码仍然有点臃肿,大块的匿名方法会降低代码的可读性,一般我们 ...