精华内容
下载资源
问答
  • 三级模式结构:模式、模式和内模式 一、模式(Schema) 定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。 理解: ① 一个数据库只有一个模式; ② 是...

    三级模式结构:外模式、模式和内模式

    一、模式(Schema

    定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

    理解:

     一个数据库只有一个模式;

     是数据库数据在逻辑级上的视图;

     数据库模式以某一种数据模型为基础;

     定义模式时不仅要定义数据的逻辑结构(如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。

    二、外模式(External Schema

    定义:也称子模式(Subschema)或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

    理解:

     一个数据库可以有多个外模式;

     外模式就是用户视图;

     外模式是保证数据安全性的一个有力措施。

    三、内模式(Internal Schema

    定义:也称存储模式(Storage Schema),它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式(例如,记录的存储方式是顺序存储、按照B树结构存储还是按hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定)。

    理解:

     一个数据库只有一个内模式;

     一个表可能由多个文件组成,如:数据文件、索引文件。

    它是数据库管理系统(DBMS)对数据库中数据进行有效组织和管理的方法

    其目的有:

     为了减少数据冗余,实现数据共享;

     为了提高存取效率,改善性能。

     

     

    数据库的二级映象功能和数据独立性

    映象: 
    是一种对应规则,说明映象双方如何进行转换。

    外模式/模式映象 
    定义在外模式描述中 
    把描述局部逻辑结构的外模式与描述全局逻辑结构的模式联系起来 
    保证逻辑独立性 
    当模式改变时,只要对外模式/模式映象做相应的改变,使外模式保持不变,则以外模式为依据的应用程序不受影响,从而保证了数据与程序之间的逻辑独立性,也就是数据的逻辑独立性。
     
    模式/内模式映象 
    定义在模式描述中 
    把描述全局逻辑结构的模式与描述物理结构的内模式联系起来 
    保证物理独立性 
    当内模式改变时,比如存储设备或存储方式有所改变,只要模式/内模式映象做相应的改变,使模式保持不变,则应用程

    展开全文
  • 模式、模式、内模式

    千次阅读 2014-02-03 22:01:30
    三级模式结构:模式、模式和内模式 一、模式(Schema) 模式的作用:定义表 定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。 理解: ① 一个数据库只有一个模式; ② ...
    三级模式结构:外模式、模式和内模式  
    一、模式(Schema) 模式的作用:定义表
    定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。 理解: ① 一个数据库只有一个模式; ② 是数据库数据在逻辑级上的视图; ③ 数据库模式以某一种数据模型为基础; ④ 定义模式时不仅要定义数据的逻辑结构(如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。 
     
    二、外模式(External Schema) 外模式的作用:供用户和程序操作 定义:也称子模式(Subschema)或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。  理解:  ① 一个数据库可以有多个外模式;  ② 外模式就是用户视图;  ③ 外模式是保证数据安全性的一个有力措施。  
     
    三、内模式(Internal Schema) 内模式的作用: 定义:也称存储模式(Storage Schema),它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式(例如,记录的存储方式是顺序存储、按照B树结构存储还是按hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定)。  理解:  ① 一个数据库只有一个内模式;  ② 一个表可能由多个文件组成,如:数据文件、索引文件。  它是数据库管理系统(DBMS)对数据库中数据进行有效组织和管理的方法  其目的有:  ① 为了减少数据冗余,实现数据共享;  ② 为了提高存取效率,改善性能。
    展开全文
  • JAVA设计模式之单例模式

    万次阅读 多人点赞 2014-04-16 06:51:34
    本文继续介绍23种设计模式系列之单例模式。 概念:  java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。  单例模式有以下特点:  1、单例类...

    本文继续介绍23种设计模式系列之单例模式。

    概念:
      java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
      单例模式有以下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。
      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。


    一、懒汉式单例

     

    //懒汉式单例类.在第一次调用的时候实例化自己 
    public class Singleton {
        private Singleton() {}
        private static Singleton single=null;
        //静态工厂方法 
        public static Singleton getInstance() {
             if (single == null) {  
                 single = new Singleton();
             }  
            return single;
        }
    }

     

    Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。

    (事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效。此问题在此处不做讨论,姑且掩耳盗铃地认为反射机制不存在。)

    但是以上懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例,要实现线程安全,有以下三种方式,都是对getInstance这个方法改造,保证了懒汉式单例的线程安全,如果你第一次接触单例模式,对线程安全不是很了解,可以先跳过下面这三小条,去看饿汉式单例,等看完后面再回头考虑线程安全的问题:

     

    1、在getInstance方法上加同步

     

    public static synchronized Singleton getInstance() {
             if (single == null) {  
                 single = new Singleton();
             }  
            return single;
    }

     

     

     

    2、双重检查锁定

     

    public static Singleton getInstance() {
            if (singleton == null) {  
                synchronized (Singleton.class) {  
                   if (singleton == null) {  
                      singleton = new Singleton(); 
                   }  
                }  
            }  
            return singleton; 
        }

     

    3、静态内部类

     

    public class Singleton {  
        private static class LazyHolder {  
           private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
           return LazyHolder.INSTANCE;  
        }  
    }  

    这种比上面1、2都好一些,既实现了线程安全,又避免了同步带来的性能影响。

     

     

     

     

     

     

    二、饿汉式单例

     

    //饿汉式单例类.在类初始化时,已经自行实例化 
    public class Singleton1 {
        private Singleton1() {}
        private static final Singleton1 single = new Singleton1();
        //静态工厂方法 
        public static Singleton1 getInstance() {
            return single;
        }
    }

    饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

     

     

     

     

    三、登记式单例(可忽略)

    //类似Spring里面的方法,将类名注册,下次从里面直接获取。
    public class Singleton3 {
        private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
        static{
            Singleton3 single = new Singleton3();
            map.put(single.getClass().getName(), single);
        }
        //保护的默认构造子
        protected Singleton3(){}
        //静态工厂方法,返还此类惟一的实例
        public static Singleton3 getInstance(String name) {
            if(name == null) {
                name = Singleton3.class.getName();
                System.out.println("name == null"+"--->name="+name);
            }
            if(map.get(name) == null) {
                try {
                    map.put(name, (Singleton3) Class.forName(name).newInstance());
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
            return map.get(name);
        }
        //一个示意性的商业方法
        public String about() {    
            return "Hello, I am RegSingleton.";    
        }    
        public static void main(String[] args) {
            Singleton3 single3 = Singleton3.getInstance(null);
            System.out.println(single3.about());
        }
    }

     登记式单例实际上维护了一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从Map直接返回,对于没有登记的,则先登记,然后返回。 

    这里我对登记式单例标记了可忽略,我的理解来说,首先它用的比较少,另外其实内部实现还是用的饿汉式单例,因为其中的static方法块,它的单例在类被装载的时候就被实例化了。

     

    饿汉式和懒汉式区别

    从名字上来说,饿汉和懒汉,

    饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,

    而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

    另外从以下两点再区分以下这两种方式:

     

    1、线程安全:

    饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,

    懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。


     

    2、资源加载和性能:

    饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,

    而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

    至于1、2、3这三种实现又有些区别,

    第1种,在方法调用上加了同步,虽然线程安全了,但是每次都要同步,会影响性能,毕竟99%的情况下是不需要同步的,

    第2种,在getInstance中做了两次null检查,确保了只有第一次调用单例的时候才会做同步,这样也是线程安全的,同时避免了每次都同步的性能损耗

    第3种,利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗,所以一般我倾向于使用这一种。

     

    什么是线程安全?

    如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

    或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。

     

    应用

    以下是一个单例类使用的例子,以懒汉式为例,这里为了保证线程安全,使用了双重检查锁定的方式:

     

    public class TestSingleton {
    	String name = null;
    
            private TestSingleton() {
    	}
    
    	private static volatile TestSingleton instance = null;
    
    	public static TestSingleton getInstance() {
               if (instance == null) {  
                 synchronized (TestSingleton.class) {  
                    if (instance == null) {  
                       instance = new TestSingleton(); 
                    }  
                 }  
               } 
               return instance;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void printInfo() {
    		System.out.println("the name is " + name);
    	}
    
    }

    可以看到里面加了volatile关键字来声明单例对象,既然synchronized已经起到了多线程下原子性、有序性、可见性的作用,为什么还要加volatile呢,原因已经在下面评论中提到,

    还有疑问可参考http://www.iteye.com/topic/652440
    和http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

     

     

     

    public class TMain {
    	public static void main(String[] args){
    		TestStream ts1 = TestSingleton.getInstance();
    		ts1.setName("jason");
    		TestStream ts2 = TestSingleton.getInstance();
    		ts2.setName("0539");
    		
    		ts1.printInfo();
    		ts2.printInfo();
    		
    		if(ts1 == ts2){
    			System.out.println("创建的是同一个实例");
    		}else{
    			System.out.println("创建的不是同一个实例");
    		}
    	}
    }
    

     运行结果:

    结论:由结果可以得知单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。

    对于单例模式的几种实现方式,知道饿汉式和懒汉式的区别,线程安全,资源加载的时机,还有懒汉式为了实现线程安全的3种方式的细微差别。

    更多设计模式:23种设计模式系列

    作者:jason0539

    博客:http://blog.csdn.net/jason0539(转载请说明出处)

    展开全文
  • 本文我们主要介绍数据库的三级模式:模式、模式和内模式的一些知识,希望能够对您有所帮助。 AD:2014WOT全球软件技术峰会北京站 课程视频发布 对于数据库的三级模式和两级映射,可能我们并不陌生。三级模式指...

    http://database.51cto.com/art/201108/279952.htm


    本文我们主要介绍数据库的三级模式:外模式、模式和内模式的一些知识,希望能够对您有所帮助。

    AD:2014WOT全球软件技术峰会北京站 课程视频发布

    对于数据库的三级模式和两级映射,可能我们并不陌生。三级模式指的是外模式模式内模式。两级映射指的是外模式-模式和模式-内模式。本文我们主要介绍一下数据库的三级模式的一些知识,希望能够对您有所帮助。

    一、模式(Schema)

    定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

    理解: ① 一个数据库只有一个模式; ② 是数据库数据在逻辑级上的视图; ③ 数据库模式以某一种数据模型为基础; ④ 定义模式时不仅要定义数据的逻辑结构(如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。

    二、外模式(External Schema)

    定义:也称子模式(Subschema)或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

    理解: ① 一个数据库可以有多个外模式; ② 外模式就是用户视图; ③ 外模式是保证数据安全性的一个有力措施。

    三、内模式(Internal Schema)

    定义:也称存储模式(Storage Schema),它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式(例如,记录的存储方式是顺序存储、按照B树结构存储还是按hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定)。

    理解: ① 一个数据库只有一个内模式; ② 一个表可能由多个文件组成,如:数据文件、索引文件。 它是数据库管理系统(DBMS)对数据库中数据进行有效组织和管理的方法 其目的有: ① 为了减少数据冗余,实现数据共享; ② 为了提高存取效率,改善性能。

    关于数据库的三级模式:外模式、模式和内模式的理解就介绍到这里了,希望能够带给您一些收获!

    展开全文
  • 浅谈数据库三大模式:模式、概念模式和内模式

    万次阅读 多人点赞 2019-09-17 09:45:56
    用户模式) 用来描述用户看到或者使用那部分的数据的逻辑结构,用户根据外模式用户数据操作语句或者程序去操作数据库中的数据,外模式的主要特点用来描述组成用户视图各个记录的组成、相互联系、数据的完整性和安全...
  • 三级模式:模式、概念模式、内模式。一个数据库中外模式可以有多个,内模式和概念模式只能各有1个。 在数据库的三级模式结构中,内模式有( )
  • 1、模式   模式又称子模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是某一应用有关的数据的逻辑表示。模式是从模式导出的一个子集,包含模式中允许特定用户使用...2、内模式 
  • JAVA设计模式--外观模式

    万次阅读 2017-02-12 23:37:41
    四、外观模式和中介者模式 五、外观模式的优缺点 六、总结 一、什么是外观式 外观(Facade)模式是一种对象的结构型模式。为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得...
  • 模式(external schema) 用户数据库系统之间的接口,... 数据定义语言DDL 概念模式/内模式映象 内模式中描述 提供物理数据独立性 模式/概念模式影象 在外模式中描述 提供逻辑数据独立性 概念模式像一个枢纽
  • sql 模式,模式,内模式 二级映像

    千次阅读 2012-12-10 17:50:20
    早上备课的时候,发现教材第二章的2.2节数据库设计概述中有些概念性的错误,从而使我想到,对于模式、模式、内模式的概念学生也不一定能理解透彻,于是想通过博客再谈仔细。  首先,谈谈模式的概念,模式为某种...
  • 外观模式

    千次阅读 2018-05-28 12:45:14
    外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二,角色 1,外观(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓...
  • Java设计模式-外观模式

    千次阅读 2019-03-26 14:53:17
    外观模式
  • 引言 "互联网+"已经发展的差不多了,应有尽有,空间不大,下个浪潮会不会是"AI+"?...近两年科技领域有些火热名词常常会被我们津津乐道,诸如"人工智能"、"模式识别"、"机器学习"、"深度学习"等。 还记得2016年Goog
  • 数据库系统的三级模式是概念模式、...内模式又称物理模式,它给出了数据库物理存储结构物理存取方法。 视图和表的区别联系 区别:1、视图是已经编译好的sql语句。而表不是   2、视图没有实际的物理记录。而
  • 模式、模式、内莫斯,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。 模式描述的是数据的全局逻辑结构。... DDL:数据定义语言,用来定义数据库模式、模式、内模式...
  • 单例模式懒汉式和饿汉式区别

    万次阅读 多人点赞 2018-04-11 11:19:45
    单例模式懒汉式和饿汉式区别 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建...
  • 模式(Schema)② 模式(External Schema)③ 内模式(Internal Schema)④ 数据库模式、模式、内模式总结(4)数据库的二级映像功能数据独立性① 模式/模式映象② 模式/内模式映象2.数据库的组成(1)...
  • Python设计模式:外观模式

    万次阅读 2020-01-01 11:20:27
    设计模式七:外观模式 什么是外观模式 有助于隐藏系统的内部复杂性,并通过一个简化的接口向客户端暴露必要的部分,这就是外观模式 使用场景 要为一个复杂系统提供单个简单的入口点时,就可以使用此模式 优点: 1....
  • 解析: 开闭原则:对扩展开放,对...区别:① 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 ② 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
  • 外观模式(有点像中介者模式) 通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样就能降低用户的使用成本,也就对用户屏蔽了很多实现细节,当然在我们的开发过程中,外观模式也是我们封装API的常用手段...
  • 设计模式专题 - 外观模式

    千次阅读 2019-06-13 18:11:17
    外观模式(Facade)也叫做门面模式,他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易...
  • 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类...
  • 桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。以下是它们的UML结构图。 在桥接模式中,Abstraction通过聚合的方式引用Implementor。   在策略模式中,Context也使用聚合的方式...
  • Java设计模式_(结构型)_外观模式

    千次阅读 2017-09-25 14:54:33
    引用百科外观模式(Facade),为子系统中的一组接口提供一...适用场景在以下情况下可以考虑使用外观模式:(1)设计初期阶段,应该有意识的将不同层分离,层层之间建立外观模式。(2) 开发阶段,子系统越来越复杂,增加
  • 抽象工厂模式区别及优缺点及使用场景简单工厂普通简单工厂多方法简单工厂静态方法简单工厂工厂方法模式抽象工厂模式 工厂模式是java设计模式中比较简单的一个设计模式,但很多地方都用到了工厂模式,(如解析xml...
  • 建造者模式:  1.是关注的行为的不同  2.基于抽象类 工厂方法模式 1.关注的属性的不同 2.基于接口和抽象类的
  • 这两个模式下的编程也有着显著的不同,弄明实模式与保护模式的区别是理解操作系统运行原理和编写操作系统的基础。本文主要讲解了实模式和保护模式的区别和保护模式的起源,侧重点在二者寻址方式上的差异。 1.保护...
  • 23种设计模式汇总整理

    万次阅读 多人点赞 2015-04-09 10:57:11
    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 ...
  • 多例模式与单例模式都禁止外界直接将之实例化,同时通过静态工厂方法向外界提供循环使用的自身的实例。它们的不同在于单例模式仅有一个实例,而多例模式则可以有多个实例。 多例模式往往具有一个聚集属性,通过向这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,401,086
精华内容 960,434
关键字:

外模式模式内模式的区别与联系