小谈pointer和relation
在apicloud的数据库中,pointer和relation是在很难让人理解。
通过不断的实践,终于有点明白了。
pointer和relation作用:在nosql数据库中实现表之间的关联
首先来说说pointer
官方文档上说“pointer用于表与表之间建立一对一的关系”,太粗糙了。
要理解pointer,最好从pointer的使用方法开始
如果我要在user的基础上增加钱包属性,我可以直接创建一个新的列wallet,数值类型。
可是,如果这么做的话,我的wallet只能存放一个值。
如果我需要我的钱包有 总金额、冻结金额 和 代金券 三个属性的话,上面的表是不满足我的需求的。
这时,我可以使用pointer,用pointer指向一个新的表wallet。
当然,我也可以选择其他方法,例如创建一个array类型的wallet,或者是object类型的wallet。
如何使用pointer?
首先,在user中添加新列,poiner类型,名称为wallet,目标class为新建的wallet表。
然后,我就可以通过pointer来实现user到wallet的关联了。
例如,有个user,名jack,在wallet中创建了jack的钱包,
这时,我只需要将jack的钱包的id(apicloud数据库中,每一张表的每一行都有一个id)输入到user表中jack的pointer属性,就可以实现jack与其钱包的关联
可是,这时还无法从jack的钱包找到jack。
小结:
1.pointer实现建立表与表之间一对一的关系,实际上是表中一行与另一表中的一行之间的关系。
2.pointer建立的关系是单向的,只有含pointer属性的表能访问被关联的表。
3.可以通过在两张表中都建立pointer,实现两张表之间的双向关联。
4.pointer关联的表,由创建列的时候的target class决定,不能指向别的表的行。
接下来谈谈relation
官方文档:“relation是指这张表的这个字段指向另一张表中的某几个行的集合,用于表与表之间建立一对多的关系”
有了pointer的知识,就能猜到relation实际上是 建立表中一行与另一表中的多行之间的关系
举个实例,我要实现user下单购物,这时就需要使用relation
首先需要有个下单的order表
然后在user表中建立relation类型的order属性,targetclass为order表
这时只要不断往user的order属性中添加order表中的id就可以了(错错错,大错特错!)
问题出现了,我无法在user的order属性中添加order表中的id
直接在apicloud的控制台操作数据库时,当我点击user表的order属性,就会直接跳到order表,而且是空的表,我之前添加的行都看不见了
这时,虽然我可以建立新的行,但是我无法让user表中的order属性关联到已经存在的行。
通过观察导出的数据库的表,我发现 虽然relation属性是在user表中创建的,可是实际上记录着relation关系的却是order表。
在导出user表中,没有发现order属性(relation),甚至是在添加relation类型前后,导出的表竟是相同的。
而在order表中,被relation的行出现了:
"user(uz*R*id)" :
"5587d38d8dd3919a41d5b42e"
由此可知,与relation相关的数据是保留在被relation的表中的。
我甚至试过删除user的order属性,然后重新创建关联到order表的relation类型
此时,不需要任何额外的操作,我就实现了之前创建的关联。
知道了这些,就可以解决“无法让user表中的order属性关联到已经存在的行”的问题了
解决这个问题的方法,就是在order表中添加被user关联的属性:
"user(uz*R*id)" :
"5587d38d8dd3919a41d5b42e"
复制代码
如果是使用控制台修改数据库的话,就需要使用API 调试功能,在order表更新该属性。
小结:
1.relation 建立表中一行与另一表中的多行之间的关系
2.同pointer一样,也是单向关联
3.同pointer一样,可以通过在两个表都建立relation实现双向关联
4.同pointer一样,relation建立关联的表,由创建列的时候的target class决定
5.relation两张表之间的关联信息实际上保存在被关联的表中
6.控制台中无法直接设置relation关联已存在的行
提示:遇到pointer和relation相关的问题,可以通过控制台导出数据库中的表,分析和解决问题
相关技术文档:http://www.apicloud.com/index?uzchannel=3
免费1对1梳理APP需求:http://app.apicloud.com/RequirementDescription
推荐项目送macbook、iphone7等大礼:http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=44433
小谈pointer和relation的更多相关文章
- DevStore开发人员服务有奖征文:小谈新浪微博开放平台
DevStore开发人员服务有奖征文:小谈新浪微博开放平台 笔者接入新浪微博开发平台也有一段时间了,对整个平台的接入也算比較熟悉,新浪提供了统一的API接口,能够让开发人员更方便的使用API来实现自己 ...
- 小谈Java里的线程
今天,我们来谈一谈Java里的线程. 一.进程与线程的基本概念 大家可能没听过线程这个概念,但是相信,用计算机的朋友都听过进程这个概念.打开电脑的任务管理器,我们就可以看到许多进程.它们主要分为三类, ...
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- iOS 小谈开发者中的个人、组织(公司、企业)账号
苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...
- Http与Socket小谈
http与socket是网络编程中最为重要的概念,不管是客户端还是服务端,都是最为重要的部分,以下简述两者的关系和区别(个人见解). Http 定义 基于应用层的超文本传输协议.通常承载于TCP/IP ...
- 小谈 - web模仿手机打电话与正则表达式
昨天遇到了一个很棘手的问题,就是手机端调用web端的页面,如果用编辑器插入的内容页面中有电话的的数据就要变一下格式,让手机端可以实现拨号的功能. 研究了半天就是没一点头绪,但是偶尔看到数据中每一个电话 ...
- 小谈React、React Native、React Web
React有三个东西,React JS 前端Web框架,React Native 移动终端Hybrid框架,React Web是一个源码转换工具(React Native 转 Web,并之所以特别提出 ...
- scales小谈grunt
Grunt是基于Node.js的项目构建工具.它可以自动运行你所设定的任务.Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现. 一头野猪映入眼帘,意:咕噜声 中文网站:htt ...
- PHP 小谈静态用法
1.静态的表现形式,在PHP中定义一个静态变量需要加入一个关键字——static,静态对象是属于类的,非静态对象是属于对象的 class Fenbi { public $changdu;//属于对象的 ...
随机推荐
- Fault Tolerance —— Storm的故障容错性
——本文讲解了Storm故障容忍性(Fault-Tolerance)的设计细节:当Worker.节点.Nimbus或者Supervisor出现故障时是如何实现故障容忍性,以及Nimbus是否存在单点 ...
- Android listview与adapter用法
listview与adapter用法 博客分类: android 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...
- CentOS6.4 安装SSDB
1.安装 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zipunzip mastercd ssd ...
- CentOS 命令【备忘】
1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看核心数量 grep 'core id' /proc/cpuinfo ...
- HDU-Minimum Inversion Number(最小逆序数)
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
- [深入浅出Windows 10]应用实战:Bing在线壁纸
本章介绍一个使用Bing搜索引擎背景图接口实现的一个应用——Bing在线壁纸,讲解如何使用网络的接口来实现一个壁纸下载,壁纸列表展示和网络请求封装的内容.通过该例子我们可以学习到如何使用网络编程的知识 ...
- USACO 5.4 Twofive(DP)
非常不容易的一题,思路就是DP之后输出路径.但是此题,路径和DP的方式不一样,路径要按字典序输出. 开始写了一个版本,N 10000的时候就是过不了,后来才发现,自己的写法有问题,无法保证字典序.看了 ...
- Linux之线程管理
linux下查看线程数的几种方法 1. cat /proc/${pid}/status [root@limt01 2325]# ps -ef|grep xinetd|grep -v grep ro ...
- 教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用
引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要 ...
- CSS_css sprite原理优缺点及使用
CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢 ...