精华内容
下载资源
问答
  • 关系数据模型的数据结构,每个关系的数据结构是一张规范的二维表 术语: 关系(Relation):一个关系对应通常说的一张表 元组(Tuple):表中的一行即为一个元组 属性(Attribute):表中的一列即为一个属性,给每...

    关系数据模型的数据结构,每个关系的数据结构是一张规范的二维表

     

    术语:

    • 关系(Relation):一个关系对应通常说的一张表
    • 元组(Tuple):表中的一行即为一个元组
    • 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即为属性名。
    • 键(key):表中的某个属性组,它可以唯一确定一个元组
    • 域(domain):属性的取值范围
    • 分量:元组中的一个属性值
    • 关系模式:对关系的描述,一般表示为  :关系名(属性1,属性2,……,属性n)

     

    优点:

    l  建立在严格的数学概念的基础上的

    l  关系模型的概念单一,无论实体还是实体之间的联系都用关系(二维表)来表示,对数据的检索和更新也是关系,所以其数据结构简单、清晰、用户易懂易用。

    l  关系模型的存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性

     

    缺点:

    由于存取路径对用户透明,查询效率往往不如格式化数据模型,为了提高性能,DBMS必须对用户的查询请求进行优化。

    展开全文
  • UML模型视图可以通过4+1视图模型的软件体系结构来了解 1代表Use Case View 定义了系统的外部行为,从用户角度描述的系统的功能。 4分别代表 Design View(设计视图)、Implementation View(实现视图)、Process ...
  • 关系模型的实质

    2019-05-25 15:34:04
    关系代数其实对应逻辑式语言里面的一个很小的部分——它的数据结构及其基本操作,只不过关系模型有更大的局限性而已。所以学会了逻辑式语言的设计之后,你直接就可以把关系模型这种东西想出来。 每当谈到关系模型,....

    关系模型的实质
    每当我批评 SQL,就有人说我其实不理解关系模型,说关系模型本身并没有问题,所以现在我就来分析一下什么是关系模型的实质。其实关系模型比起逻辑式语言,基本就是个衍生产物,算不上什么发明。关系代数其实对应逻辑式语言里面的一个很小的部分——它的数据结构及其基本操作,只不过关系模型有更大的局限性而已。所以学会了逻辑式语言的设计之后,你直接就可以把关系模型这种东西想出来。
    每当谈到关系模型,总是有人很古板的追究它与 SQL,Datalog 等“查询语言”的区别。然而如果你看透了逻辑式语言的本质就会发现,其实“语言”和“模型”这两者并没有本质区别和明确界限。人们总是喜欢制造这些概念上的壁垒,用以防止自己的理论受到攻击。追究语言和模型的差别,把过错推到 SQL 和 IBM 身上,是关系式数据库领域常见的托词,用以掩盖其本质上的空洞和设计上的失误。所以在下面的讨论里为了方便,我仍然会使用少量 SQL 来表示关系模型里面对应的概念,但这并不削弱我对关系模型的批评。


    关系模型与逻辑式语言
    我们先来具体探讨一下关系模型与逻辑式语言的强弱关系。

    “逻辑式语言”的另一个名字,其实叫做“关系式语言”(relational language)。
    在数学上,“关系”(relation)意味着“没有方向”,意味着“可逆”。然而具有讽刺意味的是,所谓的“关系式数据库”并不具有这种可逆计算的能力。Prolog 和 miniKanren 其实是比 SQL 强大很多的语言,是真正的“关系式语言”,它们能够在比较大的程度上完成可逆计算。比如在 miniKanren 里面,你可以使用这样“查询操作”:如果 x+y 等于 10,y 等于 2,那么 x 等于几?很多 Prolog 和 miniKanren 可以表达的查询,SQL 没法表示。SQL 其实只能用于非常简单的,有“明确方向”的查询操作,基本上就像 Lisp 的 filter 函数。由于这些局限性,再加上很多其他的设计失误(比如语法像英语,组合能力弱),它只适合会计等人员使用,一旦遇到程序员需要的,稍微复杂一点的数据结构,它就没法表达了,而且会像 Prolog 一样引起诸多的性能问题。

    因此,关系式数据库所谓的“关系”,比起逻辑式语言来说,其实是小巫见大巫。关系式数据库的表达能力,绝对不会超过逻辑式语言。关系式代数里面的“=”,join 等构造都是没有方向的。然而与逻辑式语言不同,这些“可逆操作符”在关系代数里的用法受到非常大的限制。比如,这些可逆操作都不能跨过程,而且关系模型并不包含递归函数。所以你并不能真正利用这种“无方向的代码”来完成比“有方向代码”更加强大的功能,大部分时候它们本质上只是普通程序语言里面最普通的一些表达式,只不过换了一种更“炫”的写法而已。

    总是有人声称限制语言的表达力可以让语言更加容易优化,然而如果一个语言弱得不能用,优化做得再好又有什么用。关系模型的核心,其实是普通程序语言里面最简单的部分:表达式。如果缺乏控制结构和递归,这些表达式的能力只相当于最简单的计算器。经验告诉我,就算表达力这么弱的语言,很多数据库的编译器也不能把优化做好,所以这不过是为它的弱表达力找个借口。另外由于这种无方向的表达式让你在阅读的时候很难看清楚数据的“流向”,所以你很难理解这里面包含的算法。这种问题也存在于逻辑式语言,但因为逻辑式语言的表达力在某些方面强于过程式语言,所以感觉还不算白费劲。然而,关系模型有着逻辑式语言的各种缺点,却不能提供逻辑式语言最基本的长处,所以比起过程式语言来说其实是一无是处。


    关系模型与数据结构
    我们再来探讨一下关系模型与数据结构的关系。很多人认为关系式数据库比起数据结构是一个进步,然而经过仔细的思考之后我发现,它其实不但是一个退步,而且是故弄玄虚,是狗皮膏药。我做过好几个学期数据库理论课程的助教。当时我的感受就是,很多计算机系学生上了“数据结构”课程之后,再来上“数据库理论”课程,却像是被洗脑了一样,仿佛根本没有理解数据结构。经过一段时间的接触之后,我发现其实他们大部分人只是被数据库领域的诸多所谓“理论”,“模型”或者“哲学”给迷惑了。本来是已经理解的数据结构和算法,却被数据库理论给换成了等价却又吓人的新名词,所以他们忽然搞不明白了。

    其实,关系模型的每一个“关系”或者“行”(row),表示的不过是一个普通语言里的“结构”(就像 C 的 struct)。一个表(table),其实不过是一个装着结构的数组。举个例子,以下 SQL 语句构造的数据库表:

    CREATE TABLE Students ( sid CHAR(20), name CHAR(20), login CHAR(20), age INTEGER, gpa REAL )

    其实相当于以下 C 代码构造的结构的数组:

    struct student { char* sid; char* name; char* login; int age; double gpa;}

    每一个 join,本质上就是沿着行里的“指针”(foreign key)进行“寻址”,找到它所指向的东西。在实现上,join 跟指针引用有一定区别,因为 join 需要查软件哈希表,所以比指针引用要慢。指针引用本质上是在查硬件哈希表,所以快很多。当然,这些操作都是基于“集合”的,但其实普通语言也可以表示集合操作。

    所谓的查询(query),其实就是普通的函数式语言里面的 filter, map 等抽象操作,只不过具体的数据结构有所不同。关系式代数更加笨拙一些,组合能力弱一些。比如,以下的 SQL 语句

    SELECT Book.title FROM Book WHERE price > 100

    本质其实相当于以下的 Lisp 代码(但不使用链表,执行机制有所不同而已):

    (map book-title (filter (lambda (b) (> (book-price b) 100)) Book)

    所以关系模型所能表达的东西,其实不会超过普通过程式(函数式)语言所用的数据结构,然而关系模型却有过程式数据结构所不具有的局限性。由于经典的关系“行”只能有固定的宽度,所以导致了你没法在结构里面放进任何“变长”的东西。比如,如果你有一个变长的数组需要放进结构,你就需要把它单独拿出来,旋转 90 度,做成另外一个表,然后在原来的表里用一个“key”指向它们。在这个“中间表”的每一行,这个 key 都要被重复一次,产生大量冗余。这种做法通常被叫做 normalization。这种方法虽然可行,然而我不得不说这是一个“变通”。它的存在是为了绕过关系模型里面的无须有的限制,终究导致了关系式数据库使用的繁琐。说白了,normalization 就是让你手动做一些比 C 语言的“手动内存管理”还要低级的工作,因为连 C 这么低级的语言都允许你在结构里面嵌套数组!然而,很多人宝贵的时间,就是在构造,释放,调试这些“中间表格”的工作中消磨掉了。


    这些就是关系模型所有的秘密。如果你深刻的理解了数据结构的用法,那么通过反复推敲,深入理解以上这番“补充知识”,你就能把已知的数据结构常识应用到所谓的“关系模型”上面,从而对关系式数据库应用自如,甚至可以使用 SQL 写出非常复杂和高效的算法。

    另外有一些人通过关系模型与其它数据模型(比如网状模型之类)的对比,以支持关系模型存在的必要性,然而如果你理解了这小节的所有细节就会发现,使用基本的数据结构,其实可以完全的表示关系模型以及被它所“超越”的那些数据模型。说实话,我觉得这些所谓“数据模型”全都是故弄玄虚,无中生有。数据模型可以完全被普通的数据结构所表示,然而它们却不可能表达数据结构带有的所有信息。这些模型之所以流行,是因为它们让人误以为知道了所谓的“一对一”,“一对多”等肤浅的概念就可以取代设计数据结构所需要的技能。所以我认为它们其实也属于技术上的“减肥药”。

    展开全文
  • (网上说)数据结构是用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理 上的...

    何谓数据结构

    (网上说)数据结构是用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理 上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。

    数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。


    何谓对象模型

    (本人说)对象模型是用来反映一个对象的数据结构,以及如何组织对此数据结构进行操作的函数集合,本人对这个函数集合的组织形式称之为函数结构。即对象模型包括数据结构和函数结构两部分。


    对象模型的概念不管在《深度探索C++对象模型》,还是在《C++ Primer》中的描述都非常含糊。估计我的陈述在第一层面上很清晰,但是在第二层面——函数结构上还是很粗浅。


    那么,下面仿照数据结构的方法,说明一下函数结构(有些说法叫做函数底层支持)。

    首先,一般的函数调用

    //常规
    class A
    {
      int
     foo(int x1,int x2)
      {
       
    return x1+x2;
      }
      void main(void)
      {
        int y;
        y=foo(1,2);
      }
    };

    我们看看,绿色的部分的调用,这是最常用的方法,执行效率也最高,我们称之为最简便。简便一词在本文占有非常重要的地位。

    我们把上面的类稍作改造:
    //函数指针
    class A
    {
     
    int (*foo)(int x1,int x2);
      int foo_impl(int x1,int x2)
      {
        
    return x1+x2;
      }
      
    void main(void)
      {
        
    int y;
       
    foo=foo_impl;
        y=foo(1,2);
      }
    };

    对比一下,调用起来没有什么两样,但是需要之前给函数指针赋值,效率上也有所减少,而且牺牲了this指针,不过也有办法可以让this指针找回来,不在本人论述范围。这种方法可以认为是次简便

    我们再看看另外一种做法
    //函数指针数组
    class A
    {
      
    int (*foo)(int x1,int x2)[2];
      
    int foo_impl(int x1,int x2)
      {
        
    return x1+x2;
      }
      int foo_other_impl(int x1,int x2)
      {
        
    return (x1+x2)*2;
      }
      void main(void)
      {
        
    int y;
        foo[0]=foo_impl;
        foo[1]=foo_other_impl;
        y=(foo[0])(1,2
    );
      }
    };
    可以看到这种方法用起来实在不方便,函数指针数组也得依个赋值。这种方法可以认为是很不简便

    还没完,再看看
    //带名字的函数指针数组
    class A
    {
      
    struct{
        
    char *name;
        
    int (*foo)(int x1,int x2);
      }foos[
    100];
      
    int invoke_foo(char *name,int x1,int x2)
      {
        for(int i=0;i<100;i++)
        {
          if(strcmp(foos[i].name,name)==0)
          {
            return
    (foos[i])(x1,x2);
          }
        }
      }

      
    int foo_impl(int x1,int x2)
      {
        
    return x1+x2;
      }
      
    int foo_other_impl(int x1,int x2)
      {
        
    return (x1+x2)*2;
      }

      
    void main(void)
      {
        
    int y;

        foos[
    0].name="foo1";
        foos[0].foo=foo_impl;

        foos[1].name="foo2";
        foos[1]=foo_other_impl;

        y=invoke_foo("foo1",1,2
    );
      }
    };
    可以看到这种方法用起来比上面纯粹函数指针数组来得方便一点点,但是功能缺很强大,这就是C++语言动态化的一种构想。这种方法可以认为是不很简便

    当然,把函数变成指针(虚函数在本文看来也是函数指针),是对象模型变得强大的一次飞跃。在函数变成指针后,再把指针通过数据结构进行组织,是把对象模型变得更强大的又一次飞跃。它就像数据结构中用指向数据结构的指针来组织数据比overlap跌跤来得更强大一样。

    总的来说,对象模型的设计就是在方便性和功能可扩展性两方面取得平衡的艺术。



    转载于:https://www.cnblogs.com/yesry/archive/2007/05/11/742763.html

    展开全文
  • 分别对应什么结构?层次模型、网状模型和关系模型是三种重要的数据模型。这三种模型是按其数据结构而命名的。前两种采用格式化的结构。在这类结构中实体用记录型表示,而记录型抽象为图的顶点。记录型之间的联系抽象...

    分别对应什么结构?

    层次模型、网状模型和关系模型是三种重要的数据模型。这三种模型是按其数据结构而命名的。前两种采用格式化的结构。在这类结构中实体用记录型表示,而记录型抽象为图的顶点。记录型之间的联系抽象为顶点间的连接弧。 整个数据结构与图相对应。对应于树形图的数据模型为层次模型;对应于网状图的数据模型为网状模型。关系模型为非格式化的结构,用单一的二维表的结构表示实体及实体之间的联系。满足一定条件的二维表,称为一个关系(见关系数据库)。

    格式化模型可以描述复杂的数据结构,用存取路径实现数据间的联系。从60年代后期以来,在各种计算机系统上建立了许多层次模型和网状模型的数据库管理系统。这些系统成功地应用于...全部

    层次模型、网状模型和关系模型是三种重要的数据模型。这三种模型是按其数据结构而命名的。前两种采用格式化的结构。在这类结构中实体用记录型表示,而记录型抽象为图的顶点。记录型之间的联系抽象为顶点间的连接弧。

    整个数据结构与图相对应。对应于树形图的数据模型为层次模型;对应于网状图的数据模型为网状模型。关系模型为非格式化的结构,用单一的二维表的结构表示实体及实体之间的联系。满足一定条件的二维表,称为一个关系(见关系数据库)。

    格式化模型可以描述复杂的数据结构,用存取路径实现数据间的联系。从60年代后期以来,在各种计算机系统上建立了许多层次模型和网状模型的数据库管理系统。这些系统成功地应用于数据处理。但这类系统具有以下缺点。

    首先是使用了许多与数据操作任务无关的概念,如DBTG系统中的系,用户必须按照存取路径存取数据库中的数据。其次,不支持集合处理,即未提供一次处理多个记录的功能。第三,没有充分认识端点用户直接与数据库对话的需求,缺乏为适应非预期查询而增加系统设施的能力。

    这些缺点降低了程序和数据的独立性,影响应用程序员的工作效率,限制端点用户对数据库的使用。

    关系模型严格符合现代数据模型的定义。数据结构简单清晰。存取路径完全向用户隐蔽,使程序和数据具有高度的独立性。

    关系模型的数据语言非过程化程度较高,用户性能好,具有集合处理能力,并有定义、操纵、控制一体化的优点。关系模型中,结构、操作和完整性规则三部分联系紧密。关系数据库系统为提高程序员的生产率,以及端点用户直接使用数据库提供了一个现实基础。

    关系模型研究的一个课题,是扩展关系模型和把数据模型形式化。1981年提出可把数据模型看成是抽象的程序设计语言。数据库是变量,数据库模式是变量的类型。数据库状态是某类变量所取的值。数据定义语言给出说明数据库变量的语法,数据操纵语言是数据模型中操作类型的具体实现,而数据库管理系统是某个数据定义语言和数据操纵语言的具体实现。

    这样,就可以用程序设计语言的形式概念和方法来研究数据模型。收起

    展开全文
  • 对应关系: 区别: OSI模型 7层模型中各个层的定义: 特点: 各层的作用与分析: TCP/IP模型 OSI模型与TCP/IP模型 理解: 网络结构体系两个重要的模型:OSI参考模型(Open System Interconnection ...
  • 关系模型:当将日常生活中的实体(学生),和实体的属性(学生的学号,姓名)保存到数据库中,应该如何处理实体结构。1.数据结构可以规定,同类数据,结构一致。就是一个二维表格。2.数据之间的关系可以设置。实体...
  • 学过Java编程的都知道什么是Package,Package在Java编程语言中是一种包机制,...UML的包图模型类似Package结构,不同的是UML包图模型仅描述Package高层次的模块间关系,对于较低层的模块一般不涉及,这些较低层的...
  • 徐无忌深入浅出网络笔记:什么是TCP/IP网络体系结构? 完成:第一遍 1.TCP/IP四层网络模型有哪四层? 在实际应用中TCP/IP的四层体系结构得到广泛应用 四层:自底而上分别是网络接口层、网络层、传输层和应用层 每一...
  • 关系型数据可以很好地存储一些关系模型的数据,比如学校老师和学生的数据(“多对多”),一本书对应多个作者(“一对多”),一本书对应一个出版日期(“一对一”)。 关系模型是我们生活中能经常遇见的模型,...
  • OSI模型和TCP/IP模型各有几层,并有何对应关系? OSI模型有七层从上到下依次:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP模型有四层从上到下一次为:应用层、传输层、网络层、网络...
  • 关系模型:由关系数据结构、关系操作集合、关系完整性三部分组成 关系数据结构:值得数据由什么方式来存储,是一种二维表的形式存储 关系操作集合:如何来关联和管理对应的存储数据,SQL指令 关系完整性约束:...
  • 什么是计算机网路 包括硬件设备 不仅仅是信息通信,还支持...TCP/IP四层模型与OSI七层模型对应关系 数据传输的过程 数据从计算A传送到路由器,再由路由器传送到计算机B 按照协议划分 计算机网络的性能指标 计算
  • Hibernate的关系映射

    2019-11-05 16:48:41
    Hibernate的关系映射 一、Hibernate的概念 在了解什么是Hibernate之前我们先来看看什么是ORM呢? 1.(对选哪个-关系映射)ORM-Object ...用来把域模型表示的对象映射到关系数据模型对应的数据库结构中去...
  • RDBMS,关系型数据库是指依据关系模型来创建的数据库,主要用于储存结构化的数据。 关系模型包括一对一、一对多、多对多等,举个简单的例子:一个学校有很多个班级,学校与班级的对应关系就是一对多;一个班级有多...
  • 常见的关系型数据库

    2018-11-11 19:39:04
    关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。 关系数据结构:指的数据以什么方式来存储,是一种二维表的形式存储 本质:二维表 关系操作集合:如何来关联和管理对应的存储数据,SQL指令 关系...
  • 什么是DOM? 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的...
  • 什么模型 模型:根据数据库表结构而创建出来的class 一张表一个类 一个字段就是一个属性 模型框架—ORM ORM – Object Relational Mapping 对象关系映射 ORM,O/RM O/M Mapping ORM的三大特征 数据...
  • 什么模型? 我们的WEB系统一定会和各种数据打交道,实际开发过程中,往往一个类对应关系数据库的一张或多张数据表,这里就会出现两个问题。 1.类和数据表,一方修改会导致另一方的修改,只要数据表结构不定下来...
  • 网络体系结构

    2021-04-06 14:59:45
    OSI与TCP/IP参考模型对应关系 考点是每个层对应的协议,每个协议都是重点,从1~2分到15~20分的不止,具体题型后面再说。 还有TCP/IP模型的层次关系图,我推荐希赛五天那本书,考点全,总结的很到位,(零基础的...
  • 众所周知关系型数据库纵向扩展(列)和变动都不容易,而横向(行)容易,而使用模型描述定义数据库结构容易,模型的改变也容易,但如何能保证模型描述信息(数据库结构)与模型的实现数据库结构一致呢,为什么...
  • 抽象出一个适当的数学模型,能解此数学模型的算法就是数据结构 什么结构 个人理解:比如说我想从一堆人的资料中找出年龄为25岁以上的,想要找出结果完全取决于这些人中年龄和其它个人信息的对应关系。一个人的...
  • 它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。脚本开发人员可以通过文档对象的属性、方法和事件来掌控、操纵和创建动态的...
  • DTS结构及其编译方法

    2017-06-28 17:00:36
    2,dts的结构模型 3,dts是如何被编译的,以及编译后会生成一个什么文件. 二:参考文字 1,DTS(device tree source) .dts文件是一种ASCII文本格式的DeviceTree描述。基本上,在ARMLinux内,一个.dts文件对应...
  • 什么模型?我们的WEB系统一定会和各种数据打交道,实际开发过程中,往往一个类对应关系数据库的一张或多张数据表,这里就会出现两个问题。1.类和数据表,一方修改会导致另一方的修改,只要数据表结构不定下来,...
  • dts 结构和编译方法

    千次阅读 2016-08-10 18:26:47
    2,dts的结构模型 3,dts是如何被编译的,以及编译后会生成一个什么文件. 二:参考文字 1,DTS(device tree source) .dts文件是一种ASCII文本格式的DeviceTree描述。基本上,在ARMLinux内,一个.dts文件对应...
  • Redis 没有传统关系型数据库的Table 模型,schema 所对应的db仅以编号区分。同一个db 内,key 作为顶层模型,它的值是扁平化的。也就是说db 就是key的命名空间。 我们都知道,在 redis 中一共有5种数据结构,那每种...
  • 我们的WEB系统一定会和各种数据打交道,实际开发过程中,往往一个类对应关系数据库的一张或多张数据表,这里就会出现两个问题。 1.类和数据表,一方修改会导致另一方的修改,只要数据表结构不定下来,业务逻辑的...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 357
精华内容 142
关键字:

关系模型对应什么结构