模式与数据库、数据库中的表的关系:
1个数据库下,可以有多个模式。

1个模式下,可以有0个或多个表 。

  首先我来做一个比喻,什么是User,什么是Database,什么是Schema,什么是Table,什么是列,什么是行,?

  我们可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间Table可以看作是每个Schema中的,Table就被放入每个房间中,不能放置在房间之外。然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样。所以Schema包含的是Object,而不是User。

  User是每个对应数据库的主人,既然有操作数据库的权利,就肯定有操作数据库中每个Schema(房间)的权利。换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的,他有完全的操作权,。我们还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了,至于分配权限的问题,后面章节有介绍。

  在SQL Server2005中,当我们用Create User创建数据库用户时,我们可以为该用户指定一个已经存在的Schema作为默认Schema,如果我们不指定,则该用户所默认的Schema即为dbo 模式,dbo 房间(Schema)好比一个大的公共房间,在当前登录用户没有默认Schema的前提下,如果你在大仓库中进行一些操作,比如Create Tabe,如果没有指定特定的房间(Schema),那么你的物品就只好放进公共的dbo房间(Schema)了。但是如果当前登录用户有默认的Schema,那么所做的一切操作都是在默认Schema上进行(比如当前登录用户为login1。

  在SQL Server2005中创建一个数据库的时候,会有一些Schema包括进去,被包括进去的Schema有:dbo,INFORMATION_SCHEMA, guest,sys等等。

   我在上文中已经提到了,在SQL Server2005中当用存储过程sp_adduser创建一个user时,同时SQL Server2005也为我们创建了一个默认的和用户名相同的Schema,这个时候问题出来了,当我们create table A时,如果没有特定的Schema做前缀,这个A表创建在了哪个Schema上,即进入了哪个房间?答案是:

   1.如果当前操作数据库的用户有默认的Schema(在创建用户的时候指定了),那么表A被创建在了默认的Schema上。

  2.如果当前操作数据库的用户没有默认的Schema(即在创建User的时候默认为空),那么表A被创建在了dbo Schema上,即使有一个和用户名同名的Schema存在,由于它不是该用户默认的Schema,所以创建表的时候是不会考虑的,当作一般的Schema来处理,别看名字相同,可是没有任何关系哦。

   3.如果在创建表A的时候指定了特定的Schema做前缀,则表A被创建在了指定的 Schema上。

  在这里,为了避免混淆和提高操作数据库的速度,我们最好每次在操作数据库对象的时候都显式地指定特定的Schema最为前缀。现在如果登录的用户为Sue,该用户有一个默认Schema也为Sue,那么如果现在有一条查询语句为Select * from mytable, 那么搜寻每个房间(Schema)的顺序是怎样的呢?顺序如下:

   1. 首先搜寻sys.mytable (Sys Schema)

   2. 然后搜寻Sue.mytable (Default Schema)

   3. 最后搜寻 dbo.mytable (Dbo Schema)

  执行的顺序大家既然清楚了,那么以后在查询数据库表中的数据时,最好指定特定的Schema前缀,这样子,数据库就不用去扫描Sys Schema了,当然可以提高查询的速度了。

  另外需要提示一下的是,每个数据库在创建后,有4个Schema是必须的(删都删不掉),这4个Schema为:dbo,guest,sys和INFORMATION_SCHEMA,其余的Schema都可以删除。

为什么把表归属于不同的模式里?
  例如你的数据库里面有很多的表。就以一个学校作为例子吧:

  有很多表分别用于存储学生、课程、成绩、学分等信息。

  还有很多表用于存储 老师、工资、奖金等信息。

  还有很多表用于存储学校的固定资产、流动资产、财务相关信息。

  如果这么多的表,都混杂在一起。管理起来非常麻烦。

  通过 create schema , 划分区域,

   把学生的,创建一个 schema 叫 Student

  教师的,创建一个 schema 叫 Teacher

  学校财务的,创建一个 schema 叫 School

  这样,对于专门负责学生信息管理的,就只负责 Student 这个 schema,表名全部是 Student.具体表名。

  对于,负责教师系统开发的人来说,程序里面的表名,都是Teacher.具体表名。

  学校财务的也是一样,查询的时候,是:SELECT * FROM School.具体表名

摘自:https://wenku.baidu.com/view/4e994735f111f18583d05a27.html

数据库、模式、表的关系(转载)相关推荐

  1. mysql数据库和表的关系_MySQL数据库学习【第六篇】表与表之间的关系

    表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 ...

  2. [转载]学习数据库分表和分库思想

    目录: 基本思想之什么是分库分表 基本思想之为什么要分库分表 分库分表的实施策略 何谓垂直切分 何谓水平切分 应该使用哪一种方式来实施数据库分库分表这要看数据库中数据量的瓶颈所在并综合项目的业务类型进 ...

  3. 数据库建表时一定要设置外键约束关系吗?

    数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键.而在关系数据库中,常常有两表存在一定关系的情况.即一张表的主键跟另一张的外键存在对应关系, ...

  4. Oracle - 数据库的实例、表空间、用户、表之间关系

    完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...

  5. HubbleDotNet 开源全文搜索数据库项目--为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式...

    关系型数据库中,多表关联是很常见的事情,HubbleDotNet 可以对部分情况的多表关联形式建立关联的全文索引,这样用户就不需要专门建一个大表 来解决多表关联时的全文索引问题. 下面以 为数据库现有 ...

  6. MySQL(三)数据库的六种约束、表的关系、三大范式

    文章目录 数据库约束 NOT NULL(非空约束) UNIQUE(唯一约束) DEFAULT(缺省约束) PRIMARY KEY(主键约束) AUTO_INCREMENT 自增 FOREIGN KEY ...

  7. MySQL | 数据库的六种约束、表的关系、三大范式

    文章目录 数据库约束 NOT NULL(非空约束) UNIQUE(唯一约束) DEFAULT(缺省约束) PRIMARY KEY(主键约束) AUTO_INCREMENT 自增 FOREIGN KEY ...

  8. mysql引擎模式_mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件...

    引擎 show engines : 查看引擎 innodb(默认引擎):支持事务,行级锁,外键myisam:查询效率由于innodb,不需要支持事务,行级锁,外键,可以选用myisam来优化数据库 m ...

  9. 数据库建表-- 一对多/多对一/一对一/多对多 关系

     转自: https://blog.csdn.net/zhongshan_c/article/details/8210196 数据库建表-- 一对多/多对一/一对一/多对多 关系 关联映射:一对多 ...

  10. sql如何把一个数据库的表复制到另一个数据库中【转载】

    sql如何把一个数据库的表复制到另一个数据库中[转载] 这篇经验帖是我转载的,是我搜到的最为直观具体的 一.需要把一张表的表结构从一个数据(A)库复制到另一个数据库(B).操作步奏如下: ①在数据库A ...

最新文章

  1. Android开发基本概念
  2. (仿头条APP项目)7.首页标签页完善和微头条页面设计实现
  3. react-redux中的持久化数据存储redux-persist
  4. 第七章 比高斯更快的计算
  5. Dev C++ 实现Hello World
  6. Android学习点点滴滴之获取正在运行的进程
  7. 使用JDBC来连接数据库
  8. (六)Redis集群搭建
  9. 挖矿为什么要用显卡_你知道为什么挖矿用显卡,而不用CPU吗?
  10. 19_04_02校内训练[deadline]
  11. 复制百度文库文字最简单的方法
  12. 基于Springboot+Mybatisplus的学校学院门户学生就业指导管理系统
  13. Android快速转战Kotlin教程
  14. Puppet nginx+passenger模式配置
  15. Flutter 项目的闪屏页方案
  16. 使用Aspose.Words设置word文档多倍行距
  17. 【物联网】linkboy轻松实现设备远程通信
  18. 变异系数法之python
  19. 计算机毕业设计ssm高校求职招聘智能推荐1875f系统+程序+源码+lw+远程部署
  20. 供独立游戏开发者参考的2D美工教程(四)

热门文章

  1. 文件没保存怎么恢复?试试这个方法恢复数据
  2. 微信公众号吸粉软件助你快速增加粉丝数和文章阅读量!
  3. js正则表达式检验经纬度
  4. 背景建模之高斯混合模型
  5. python爬取微信朋友圈
  6. 服务器 交换机 无线ap,交换机、路由器、防火墙、无线AP等和终端设备
  7. 路由器和交换机哪个更好?路由器交换机怎么连接?
  8. Arduino UNO+OLED可视化音乐频谱:32段分频0.96寸OLED显示细条频谱线
  9. 32位程序使用超过4G的内存
  10. 微信公众号订阅号开发的学习(一):基础知识