精华内容
下载资源
问答
  • 本篇文章,我将跟大家一起学习 Eloquent 最复杂也是最难理解的部分——模型关系。官方英文文档中叫 Relationships,个人认为翻译成 “模型关系” 比现在的 “关联” 更好理解一点哈哈。 Eloquent是...

     

    在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。官方英文文档中叫 Relationships,个人认为翻译成 “模型间关系” 比现在的 “关联” 更好理解一点哈哈。

    Eloquent是什么

    Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/eloquent#relationships

    下面我们开始一个一个地学习。

    一对一关系

    顾名思义,这描述的是两个模型之间一对一的关系。这种关系是不需要中间表的。

    假如我们有两个模型:User 和 Account,分别对应注册用户和消费者,他们是一对一的关系,那么如果我们要使用 Eloquent 提供的一对一关系方法,表结构应该是这样的:

    user: id ... ... account_id
    
    account: id ... ... user_id
    

    假设我们需要在 User 模型中查询对应的 Account 表的信息,那么代码应该是这样的。 `/app/models/User.php`:

    <?php
    
    class User extends Eloquent {
    
      
    
      protected $table = 'users';
    
      public function hasOneAccount()
    
      {
    
          return $this->hasOne('Account', 'user_id', 'id');
    
      }
    
    }
    

    然后,当我们需要用到这种关系的时候,该如何使用呢?如下:

    $account = User::find(10)->hasOneAccount;
    

    此时得到的 `$account` 即为 `Account` 类的一个实例。


    这里最难的地方在于后面的两个 foreign_key 和 local_key 的设置,大家可以就此记住:在 User 类中,无论 hasOne 谁,第二个参数都是 `user_id`,第三个参数一般都是 `id`。由于前面的 `find(10)` 已经锁定了 id = 10,所以这段函数对应的 SQL 为: `select * from account where user_id=10`。


    这段代码除了展示了一对一关系该如何使用之外,还传达了三点信息,也是我对于大家使用 Eloquent 时候的建议:

    1. 每一个 Model 中都指定表名

    2. has one account 这样的关系写成 `hasOneAccount()` 而不是简单的 `account()`

    3. 每次使用模型间关系的时候都写全参数,不要省略

    相应的,如果使用 belongsTo() 关系,应该这么写:

    <?php
    
    class Account extends Eloquent {
    
      protected $table = 'accounts';
    
      
    
      public function belongsToUser()
    
      {
    
        return $this->belongsTo('User', 'user_id', 'id');
    
      }
    
    }
    

    一对多关系

    学会了前面使用一对一关系的基础方法,后面的几种关系就简单多了。

    我们引入一个新的Model:Pay,付款记录。表结构应该是这样的:

    user: id ... ...
    
    pay: id ... ... user_id
    

    User 和 Pay 具有一对多关系,换句话说就是一个 User 可以有多个 Pay,这样的话,只在 Pay 表中存在一个 `user_id` 字段即可。 `/app/models/User.php`:

    <?php
    
    class User extends Eloquent {
    
      
    
      protected $table = 'users';
    
      public function hasManyPays()
    
      {
    
        return $this->hasMany('Pay', 'user_id', 'id');
    
      }
    
    }
    

    然后,当我们需要用到这种关系的时候,该如何使用呢?如下:

    $accounts = User::find(10)->hasManyPays()->get();
    

    此时得到的 `$accounts` 即为 `Illuminate\Database\Eloquent\Collection` 类的一个实例。大家应该也已经注意到了,这里不是简单的 `-> hasOneAccount` 而是 `->hasManyPays()->get()`,为什么呢?因为这里是 `hasMany`,操作的是一个对象集合。

    相应的 belongsTo() 的用法跟上面一对一关系一样:

    <?php
    
    class Pay extends Eloquent {
    
      protected $table = 'pays';
    
      
    
      public function belongsToUser()
    
      {
    
        return $this->belongsTo('User', 'user_id', 'id');
    
      }
    
    }
    

    多对多关系

    多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了。

    我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系。表结构应该是这样的:

    article: id ... ...
    
    tag: id ... ...
    
    article_tag: article_id tag_id
    

    在 Model 中使用:

    <?php
    
    class Tag extends Eloquent {
    
      protected $table = 'tags';
    
      
    
      public function belongsToManyArticle()
    
      {
    
        return $this->belongsToMany('Article', 'article_tag', 'tag_id', 'article_id');
    
      }
    
    }
    

    需要注意的是,第三个参数是本类的 id,第四个参数是第一个参数那个类的 id。

    使用跟 hasMany 一样:

    $tagsWithArticles = Tag::take(10)->get()->belongsToManyArticle()->get();
    

    这里会得到一个非常复杂的对象,可以自行 `var_dump()`。跟大家说一个诀窍,`var_dump()` 以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。

    在这里给大家展示一个少见用法(奇技淫巧):

    public function parent_video()
    
    {
    
        return $this->belongsToMany($this, 'video_hierarchy', 'video_id', 'video_parent_id');
    
    }
    
    public function children_video()
    
    {
    
        return $this->belongsToMany($this, 'video_hierarchy', 'video_parent_id', 'video_id');
    
    }
    

    对,你没有看错,可以 belongsToMany 自己。

    其他关系

    Eloquent 还提供 “远层一对多关联”、“多态关联” 和 “多态的多对多关联” 这另外三种用法,经过上面的学习,我们已经掌握了 Eloquent 模型间关系的基本概念和使用方法,剩下的几种不常用的方法就留到我们用到的时候再自己探索吧。

    重要技巧:关系预载入

    你也许已经发现了,在一对一关系中,如果我们需要一次性查询出10个 User 并带上对应的 Account 的话,那么就需要给数据库打 1 + 10 条 SQL,这样性能是很差的。我们可以使用一个重要的特性,关系预载入:http://laravel-china.org/docs/eloquent#eager-loading

    直接上代码:

    $users = User::with('hasOneAccount')->take(10)->get()
    

    这样生成的 SQL 就是这个样子的:

    select * from account where id in (1, 2, 3, ... ...)
    

    这样 1 + 10 条 SQL 就变成了 1 + 1 条,性能大增。



    至此,深入理解 Laravel Eloquent 系列文章到此结束。推荐继续了解 软删除 、转换成数组/JSON

    END

    展开全文
  • 商业智能BI,我们经常会听到指标、指标表、维度、模型、数据仓库、数据等一些名词和概念,那么他们之前到底有什么关系和联系呢? 什么叫指标?指标就是我们具体要分析的对象,分析的数据,比如销售收入、销售...

    在商业智能BI中,我们经常会听到指标、指标表、维度、模型、数据仓库、数据等一些名词和概念,那么他们之前到底有什么关系和联系呢?

     

    什么叫指标?指标就是我们具体要分析的对象,分析的数据,比如销售收入、销售毛利、采购成本、人均产出等数值类型的就是指标。

     

    指标表就是在同一个业务分析主题下的指标的组合,比如像财务分析-利润分析中的营业利润、利润总额、净利润、净利润率等,比如像采购分析-采购到货分析中的订单金额、实际到货金额、逾期到货金额、到货金额比率、逾期到货金额比率等等。通常情况下,他们都具有相同的分析维度。

     

    维度就是看数据的角度,从哪个角度去看这个数据指标,比如:2019年北京地区华为手机的销售量,销售量就是我们要去看的一个指标,维度就是时间维度,地区维度和产品维度。所以我们可以只看2020年全部地区全部产品的销售额,也可以只看2019年山东地区某一个产品的销售额。这种动态的分析就是一种多维度的分析。

     

    将分析指标和具体的分析维度组织起来就形成了一个分析模型,在数据库中表现出来就是一张事实表或者叫指标表,这些表关联到不同的维度表,形成了表与表之间的关联关系。最后,这一个又一个的分析模型就沉淀到数据仓库中,当然这里面的时间、地区和产品维度在不同的分析模型中是可以复用的,具体在数据仓库中就是一张又一张的数据表。

     

    数据有两种,一种是源数据,就是我们要分析的数据来源,他们都存放在一个或者一些业务系统中。我们通过ETL过程将这些源数据抽取、转换,最后再加载到数据仓库的各个分析模型中,这样就完成了业务基础数据到业务分析模型的转变,我们基于这些分析模型就可以实现BI的自助可视化拖拉拽分析了。

    在整个BI的设计和开发过程中,最重要的阶段就是业务分析模型的构建,数据仓库数据模型的构建,从数据源的数据匹配到数据仓库模型过程中数据的清洗、转换、治理,这些工作占据了BI项目开发过程中80%的时间,剩余的20%时间就是可视化报表的开发。

    展开全文
  • 按照OSI的模型,上层利用相邻下层的服务,与通信对端的同一层建立对等的服务,最高一层应用层,最下一层物理层。比如你说你要告诉你的朋友,你的兰花开了,“兰花开了”是一条信息,是“应用层”需要传递的。你...

    应用层是信息传递,
    网络层按照对方的地址传递数据。
    按照OSI的模型,上层利用相邻下层的服务,与通信对端的同一层建立对等的服务,最高一层叫应用层,最下一层叫物理层
    比如你说你要告诉你的朋友,你的兰花开了,“兰花开了”是一条信息,是“应用层”需要传递的。你可以选择传递一句话,或者一张照片,将信息“表示为”一串数字或者物理实体,这是“表示层”该干的。如果你选择把这件事写在纸上交给对方,你得了解对方不是盲人、不是文盲、懂你写下的语言(比如中文),这是你选择表示层时候必须考虑的。你可以与对方成文或不成文的约定你们采用的语言,这叫协议
    确定了表示方法,你就需要选择把这个东西传给谁,怎么传。这次信息传送是孤立的,还是一大串信息传递(比如笔友还是生意往来)中的一部分。这叫会话
    确定了会话,你要确定怎么找到你的朋友。你的朋友,大明王二三,小名三仔,昵称二子,俗称二三娃,网名3123,是王一万的儿子,是A公司职员,住在B地址,是C群体的会员,每个称呼都代表着不同的传输方法,成本、速度、可靠性都不同,你选哪一个?选择不同,你就需要和不同的中间人说一些不同的话,最终目的是把那一串数字或者物理实体传递给正确的人。这叫传输层
    如果表示方法是一张照片,打算通过邮局邮寄给你的朋友,相应的会话层确定是单次通信,传输层的工作就是找到一个信封,把照片放在里面,封上封口,在信封上写上地址和名字。你必须找到你的朋友的邮寄地址。有了地址和你朋友的名字,你就试着用会话层提供的服务。地址代表着网络层的服务,名字代表着传输层的服务。虽然OSI的规定上传输层和网络层互相独立,但是实际上是很难分开的。注意,这里的选项是你决定的,或者说是你和你的通信对象选择的会话方法决定的。你和你的通信对象完全可以另起炉灶约定一种谁也没见过的方法,不会伤害到任何人。你选择了对方地址,写在信封上,将照片装在信封里面不给邮递员看,这叫封装。经过封装后,邮政局传送的是信,而不是照片。有些封装(比如明信片)可以被邮递员看到并串改,这在数字世界很不常见。将封装好的新建丢进信筒或者交给快递员,都是你开始使用“网络层”服务了。
    在这个例子里,邮政局为你提供网络层服务。一般说来,网络层按照对方地址来决定如何将信息传递到对方。你看,同样的网络层完全可以提供不同的服务,比如平信、快信和专递(当然收费也不同)。IP在这里,你要通过IP网通信,你需要知道对方的IP地址。邮政局不会专门为你把你的信专门送到对方手中,而是通过不同层次的分拣站逐层解析地址逐层传送。在收信局,每封信都要分拣,走同样路径的信件可能会被打成邮包并标记上对方分拣站的地址,这叫路由(翻译自route,是个动词,表示寻找路径的意思)。邮局会将“目的地分拣站”相同的信件装在邮包里快速传递,这叫数据链路层。数据链路层不需要知道用户信件的最终地址,只按照固定往来路径传送邮包。在OSI语境下,数据链路层可以有地址,但是这个地址只有链路层互联的终端之间有意义,而网络层地址必须是全局(全网)唯一的。往来用户收发信件的邮递员知道你的地址和交通方式,而且只需要记住他负责的片区的信息,如果有片区内的信件往来他可能直接就替你送了(在邮政局是不允许的,对快递员可能会收一点小费后就接受了),这叫局域网,是数据链路层的特例。注意,分拣局之间收发邮包的路径(数据链路层)无论是否遵循公开的标准都是邮政局(网络)的选择,不受任何用户干扰,和传输层。干扰邮包收发是犯罪(网络黑客)行为。你是公司职员,为公事发信,信件被前台秘书统一交寄,寄出的信件只有公司的地址和你的名字,收到的信件由前台秘书统一签收,并叫你自取或(如果你和TA关系足够好或职位足够高)送到你的办公桌上,这位秘书就是NAT。无论如何,信件还是邮包,总是装在自行车/卡车/火车/轮船/飞机上运输的,这些运输工具可能属于也可能不属于邮政局,但是总是按照自己的固定路线转运货物,甚至不知道传送的货物中有“邮包”或者“信件”这类东西,这叫物理层。如果你们公司是个跨国公司,对内部信件规定了特别的方法,以上所说每一件事都有人干但是并没有严格依照上述方法来传递,这叫内部网(PrivateNetwork, Intranet)。有时候还会将自己内部信件打包交给快递公司传送,这叫VPN。最后,按照OSI模型的语境,你不能是人,也不能是狗,甚至不能是计算机,你必须是一台计算机上运行的一个程序。

    网络层具体就是指IP(Internet Protocol),因特网协议,应用层一般有HTTP,FTP等,中间还有个传输层,具体一般是TCP和UDP
    那网络层和应用层是什么关系呢
    应用层(HTTP)建立在传输层(TCP)基础上,传输层建立在网络层(IP)基础上
    在这里插入图片描述

    展开全文
  • 本篇文章,我将跟大家一起学习 Eloquent 最复杂也是最难理解的部分——模型关系。官方英文文档中叫 Relationships,个人认为翻译成 “模型关系” 比现在的 “关联” 更好理解一点哈哈。Eloquent是什么...

    在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。官方英文文档中叫 Relationships,个人认为翻译成 “模型间关系” 比现在的 “关联” 更好理解一点哈哈。

    Eloquent是什么

    Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/eloquent#relationships

    下面我们开始一个一个地学习。

    一对一关系

    顾名思义,这描述的是两个模型之间一对一的关系。这种关系是不需要中间表的。

    假如我们有两个模型:User 和 Account,分别对应注册用户和消费者,他们是一对一的关系,那么如果我们要使用 Eloquent 提供的一对一关系方法,表结构应该是这样的:

    user: id ... ... account_id
    
    account: id ... ... user_id
    

    假设我们需要在 User 模型中查询对应的 Account 表的信息,那么代码应该是这样的。 `/app/models/User.php`:

    <?php
    
    class User extends Eloquent {
    
      
    
      protected $table = 'users';
    
      public function hasOneAccount()
    
      {
    
          return $this->hasOne('Account', 'user_id', 'id');
    
      }
    
    }
    

    然后,当我们需要用到这种关系的时候,该如何使用呢?如下:

    $account = User::find(10)->hasOneAccount;
    

    此时得到的 `$account` 即为 `Account` 类的一个实例。


    这里最难的地方在于后面的两个 foreign_key 和 local_key 的设置,大家可以就此记住:在 User 类中,无论 hasOne 谁,第二个参数都是 `user_id`,第三个参数一般都是 `id`。由于前面的 `find(10)` 已经锁定了 id = 10,所以这段函数对应的 SQL 为: `select * from account where user_id=10`。


    这段代码除了展示了一对一关系该如何使用之外,还传达了三点信息,也是我对于大家使用 Eloquent 时候的建议:

    1. 每一个 Model 中都指定表名

    2. has one account 这样的关系写成 `hasOneAccount()` 而不是简单的 `account()`

    3. 每次使用模型间关系的时候都写全参数,不要省略

    相应的,如果使用 belongsTo() 关系,应该这么写:

    <?php
    
    class Account extends Eloquent {
    
      protected $table = 'accounts';
    
      
    
      public function belongsToUser()
    
      {
    
        return $this->belongsTo('User', 'user_id', 'id');
    
      }
    
    }
    

    一对多关系

    学会了前面使用一对一关系的基础方法,后面的几种关系就简单多了。

    我们引入一个新的Model:Pay,付款记录。表结构应该是这样的:

    user: id ... ...
    
    pay: id ... ... user_id
    

    User 和 Pay 具有一对多关系,换句话说就是一个 User 可以有多个 Pay,这样的话,只在 Pay 表中存在一个 `user_id` 字段即可。 `/app/models/User.php`:

    <?php
    
    class User extends Eloquent {
    
      
    
      protected $table = 'users';
    
      public function hasManyPays()
    
      {
    
        return $this->hasMany('Pay', 'user_id', 'id');
    
      }
    
    }
    

    然后,当我们需要用到这种关系的时候,该如何使用呢?如下:

    $accounts = User::find(10)->hasManyPays()->get();
    

    此时得到的 `$accounts` 即为 `Illuminate\Database\Eloquent\Collection` 类的一个实例。大家应该也已经注意到了,这里不是简单的 `-> hasOneAccount` 而是 `->hasManyPays()->get()`,为什么呢?因为这里是 `hasMany`,操作的是一个对象集合。

    相应的 belongsTo() 的用法跟上面一对一关系一样:

    <?php
    
    class Pay extends Eloquent {
    
      protected $table = 'pays';
    
      
    
      public function belongsToUser()
    
      {
    
        return $this->belongsTo('User', 'user_id', 'id');
    
      }
    
    }
    

    多对多关系

    多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了。

    我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系。表结构应该是这样的:

    article: id ... ...
    
    tag: id ... ...
    
    article_tag: article_id tag_id
    

    在 Model 中使用:

    <?php
    
    class Tag extends Eloquent {
    
      protected $table = 'tags';
    
      
    
      public function belongsToManyArticle()
    
      {
    
        return $this->belongsToMany('Article', 'article_tag', 'tag_id', 'article_id');
    
      }
    
    }
    

    需要注意的是,第三个参数是本类的 id,第四个参数是第一个参数那个类的 id。

    使用跟 hasMany 一样:

    $tagsWithArticles = Tag::take(10)->get()->belongsToManyArticle()->get();
    

    这里会得到一个非常复杂的对象,可以自行 `var_dump()`。跟大家说一个诀窍,`var_dump()` 以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。

    在这里给大家展示一个少见用法(奇技淫巧):

    public function parent_video()
    
    {
    
        return $this->belongsToMany($this, 'video_hierarchy', 'video_id', 'video_parent_id');
    
    }
    
    public function children_video()
    
    {
    
        return $this->belongsToMany($this, 'video_hierarchy', 'video_parent_id', 'video_id');
    
    }
    

    对,你没有看错,可以 belongsToMany 自己。

    其他关系

    Eloquent 还提供 “远层一对多关联”、“多态关联” 和 “多态的多对多关联” 这另外三种用法,经过上面的学习,我们已经掌握了 Eloquent 模型间关系的基本概念和使用方法,剩下的几种不常用的方法就留到我们用到的时候再自己探索吧。

    重要技巧:关系预载入

    你也许已经发现了,在一对一关系中,如果我们需要一次性查询出10个 User 并带上对应的 Account 的话,那么就需要给数据库打 1 + 10 条 SQL,这样性能是很差的。我们可以使用一个重要的特性,关系预载入:http://laravel-china.org/docs/eloquent#eager-loading

    直接上代码:

    $users = User::with('hasOneAccount')->take(10)->get()
    

    这样生成的 SQL 就是这个样子的:

    select * from account where id in (1, 2, 3, ... ...)
    

    这样 1 + 10 条 SQL 就变成了 1 + 1 条,性能大增。

    展开全文
  • E-R图中,实体集是一组相似的实体(数据模型中的数据对象),这些实体可以具有属性。数据库系统中,实体是数据库中的表或表中的属性,因此通过显示表及其属性之间的关系,ER图显示了数据库的完整逻辑结构。【视频...
  • DDD的“领域模型

    2020-01-14 09:31:11
    大家好,欢迎来到小蒋的技术圈。...和我们传统软件设计以及UML的领域模型什么关系?今天小蒋准备和大家一起聊聊看。下面我们开始吧。 网上搜索领域模型,有大量的文章。一种是来源于最初的传统软...
  • 什么叫互模拟

    千次阅读 2015-04-01 21:49:07
    从直观上讲 ,互模拟就是两个系统能够相互模仿对方 ,从而从观察者的角度讲 ,...模态逻辑常常把互模拟定义克里普克模型上。 定义 令 M = (W , R, V ) 和 M ′= (W ′, R′,V′)是两个克里普克模型 ,令 Z∈W ×W ′
  • 大家好,欢迎来到小蒋的技术圈。上次跟大家聊到了领域驱动设计,也DDD。分享了“美团点评业务系统”他们用...和我们传统软件设计以及UML的领域模型什么关系?今天小蒋准备和大家一起聊聊看。下面我们开始吧。
  • 0x1:线性回归和线性分类的“线性”指的是什么 线性(linear),指量与量之间按比例、成直线的关系数学上可以理解为一阶导数为常数的函数;非线性(non-linear)则指不按比例、不成直线的关系,一阶导数不为常数 ...
  • 关于什么叫组件编程,其实就是利用.NET来开发基于组件模型的程序,面向组件编程而非面向对象编程,这是一个高度,没有很长时间的学习与磨练 是体会不到这个感觉的。我们现在的开发思想应该是以面向对象为主的,但是...
  • 本文前文的基础上,考虑继承关系(单继承),继续验证继承关系下的C++对象模型。 先看下什么叫作覆盖(override) 覆盖override,是指派生类存在重新定义的函数,其函数名、参数列、返回值类型必须同父类的...
  • (1)抽象:从许多事物舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就作抽象。抽象是形成概念的必须手段。 抽象原则有两方面的意义:第一,尽管问题域的事物是很复杂的,但是分析员并不需要了解和...
  • 单例模式(Singleton)也单态模式,是设计模式最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计...
  • ETL 到底是什么

    2020-07-03 15:21:11
    商业智能BI,我们会经常听到一个词语ETL,也看到很多相关的职位,就有ETL开发工程师,那么ETL到底是什么呢? ETL 的英文全称叫做 Extraction 抽取,Transformation 转换,Loading 加载。 抽取就是指将数据从...
  • 什么是DOM?(转)

    2017-11-26 12:27:00
    它把XML文档看作是一系列node和node间的关系,并且把每一个node都当作一个对象,所以文档对象模型。  DOM是与编程语言无关的,因此有多种实现。 DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许...
  • 应用的起源 软件架构服务化就是根据业务模型进行细化的过程,这个过程切分出一个个具备不同职责的业务逻辑模块,然后每个微服务模块都会提供相对应业务逻辑的...应用模型及关系模型的建立 上面定义出来的应用...
  • 所谓回归和分类:深度网络,分类任务和回归任务的主要区别就在于:loss函数(其模型输出和标签的比较)和标签的区别,和其前边的特征特区部分没有任何关系。而传统的机器学习算法,可以认为没有太多之前的特征...
  • 是多维模型的一个形象的说法.(关于多维模型这里不讲述,数据仓库设计过程还挺重要的,有兴趣自行查阅)立方体其本身只有三维,但多维模型不仅限于三维模型,可以组合更多的维度为什么叫数据立方体?一方面是出于更...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 208
精华内容 83
关键字:

在关系模型中什么叫关系