模式与数据库与表的关系
模式与数据库、数据库中的表的关系:
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.具体表名
模式与数据库、数据库中的表的关系:
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
模式与数据库与表的关系相关推荐
- mysql数据库和表的关系_MySQL数据库学习【第六篇】表与表之间的关系
表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 ...
- spool模式导出数据库指定表的数据到Excel
资源 spool脚本链接: 链接:https://pan.baidu.com/s/1c87vsxqiNLf4ZBNV7IfbnQ 提取码:5izz 执行步骤: 1.先找到一个服务器,选一个路径,用来放 ...
- Oracle数据库查看表空间使用率
12C之前或NON-CDB模式的数据库查看表空间使用率 set linesize 160 set pagesize 999 col TABLESPACE_NAME for a18 col TBS_TO ...
- mysql关系模式_数据库学习--关系模式
最近开始做数据库的大实验,其中有一条实验要求如下: 通过网络查找相关文献并参考所给资料进行需求分析,画出系统的 E-R 图,给出实体或联系的属性,标明联系的种类,并写出关系模式. 画ER图没有什么问题 ...
- HubbleDotNet 开源全文搜索数据库项目--为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式...
关系型数据库中,多表关联是很常见的事情,HubbleDotNet 可以对部分情况的多表关联形式建立关联的全文索引,这样用户就不需要专门建一个大表 来解决多表关联时的全文索引问题. 下面以 为数据库现有 ...
- 数据库元数据数据字典查询_1_列出模式中所有的表
列出模式中所有的表 需求描述 需求:查询给定模式下创建的所有表和创建时间. 解决方法:通过各个数据库里提供的系统视图查询. 注: 数据库数据集SQL脚本详见如下链接地址 员工表结构和数据初始化SQL脚 ...
- MySQL(三)数据库的六种约束、表的关系、三大范式
文章目录 数据库约束 NOT NULL(非空约束) UNIQUE(唯一约束) DEFAULT(缺省约束) PRIMARY KEY(主键约束) AUTO_INCREMENT 自增 FOREIGN KEY ...
- 【转】EntityFramework使用Code First模式创建数据库控制生成单数形式的表名
使用Code-First模式生成数据库时,默认生成的数据库表的名称为类型的复数形式,例如实体类名称是"User",默认生成的数据库表名为"Users",多数情况 ...
- MySQL | 数据库的六种约束、表的关系、三大范式
文章目录 数据库约束 NOT NULL(非空约束) UNIQUE(唯一约束) DEFAULT(缺省约束) PRIMARY KEY(主键约束) AUTO_INCREMENT 自增 FOREIGN KEY ...
- 数据库建表-- 一对多/多对一/一对一/多对多 关系
转自: https://blog.csdn.net/zhongshan_c/article/details/8210196 数据库建表-- 一对多/多对一/一对一/多对多 关系 关联映射:一对多 ...
最新文章
- TCGAbiolinks包下载TCGA数据
- [20171109]缓存命中率神话.txt
- 神策数据 × 水滴汽车:着眼车主忠诚度,实现转型期逆势增长!
- 反思专注力:重视专注;转变认知;避开即时娱乐;控制专注;氛围想不专注都难
- [Ubuntu18.04]使用snap
- Win32汇编学习(6):键盘输入消息
- 计算机一级考试自测题,计算机一级B考试自测题
- 软件测试的重要性与必要性,软件测试的目的和意义
- 机房环境监控报警系统
- 分享35套极其精美的高清桌面壁纸免费下载
- 菜鸟最爱,60行代码打造一款音乐播放器!
- TensorFlow入门教程(30)车牌识别之整合EAST+DenseNet进行车牌识别(六)
- Android中的Junit单元测试
- 如何解决Cannot send session cache limiter – headers already sent 错误
- linux cad 安装教程,如何在Ubuntu 18.04/16.04/Linux中安装FreeCAD 0.18
- keil的sct文件_STM32 分散加载文件 .sct 解析
- 完成一条微指令四周期英文全称
- 2022疫情缩水,啃透这份399页Java架构知识点笔记,已从13K涨到25K
- 如果能天天送书,天天爽就好了,再送5本
- Python编码,解码问题
热门文章
- c语言有坐标判断正方形,正方形
- 绕过CDN查找网站真实IP
- Office XP 程序设计之局域网中怎么配置Office Web组件?
- 一个不错的控件网站-慧都控件网
- 使用FlashFXP连接Linux乱码问题
- 微信html页面缓存问题,浅谈微信页面入口文件被缓存解决方案
- 使用keras实现YOLO v3报错‘str‘ object has no attribute ‘decode‘
- 抢购软件使用方法(如何开发抢购软件)
- sklearn的系统学习——随机森林调参(含案例及完整python代码)
- python编程最大值_python求最大值最小值方法总结