数据依赖

我不清楚术语是什么,我想表达的是 某个数据或者属性值是通过其它的数据配合一些算法而得到的。

比如 fullName = firstName + " " + lastName;

fullName 的值取决于另外2个属性值和一个算法。 (我称这个情况较数据依赖)

我们做开发时经常都会遇到这样的情况,比如在做数据库时,为了性能优化,我们很可能会设计一些冗余数据,这些冗余数据都是依赖其它column值配合一些算法的来的。

在前端也有这样的情况,比如购物车的总价钱就是通过产品和数量算出来的。

我们处理通常有3种方式

第一种:

属性访问器 getter

就是写一个 getter 函数,每次要获取fullName时,就先运行函数去获取firstName,lastName然后组合。

这做法比较简单明了。大部分情况我们都会用这个。

缺点就是如果依赖的值很多,或者算法很复杂,调用平率高的话,对性能消耗不太理想。(比如数据库,每次获取时,你可能要从好多个表获取依赖值,然后做统计等等 , 又或者在前端view同步,你可能要做一个类似脏数据更新,确保依赖值改变后,getter必须触发)

第二种:

触发器局部更新。

这回我们不等到需要数据时才去获取依赖,而反过来当依赖改变的时候去更新数据。

比如当购物车某个价值100块的产品被移除时,总数就 - 100 这样。

触发器的概念对性能就比较好了。

缺点就是代码有点凌散,而且我们也不一定每次都可以通过改变的依赖值推算出改变数据的算法 ( 比如上面的 -100 块, 是比较简单的 )

第三种:

综合 (KO js 用的就是这个)

这方式是写一个getter

然后在所有依赖值写触发器。每当依赖值改变,就调用getter去所有的依赖值重新获取一篇。

这样代码就不凌散了,性能也还可以。

以上的方法没有最好,只有比较适合的。

我个人使用angularjs 开发,所以前端我都是用第一种方法。

数据库的话,一般上使用第2种。写一个简单的 trigger. (因为我不会写储蓄过程)

时间: 2024-10-24 23:43:21

数据依赖的相关文章

8.18 数据依赖 Day35

---note--- F = {Sno->Sdept, Sdept->Mname , (Sno,Cname)->Grade } 平凡数据依赖:若X->Y , Y属于X 则称X->Y是平凡的函数依赖 非平凡数据依赖:X->Y,Y不属于X 则称X->Y是非平凡函数依赖 (Sno,Cno)-> Grade 非平凡函数依赖 扩张性:若X->Y 且W->Z 则(X,W)->(Y,Z) 分解性:X->(Y,Z) 则X->Y 且X->Z

2016.6.17 数据库设计之数据依赖的公理系统

**数据依赖的公理系统是模式分解算法的理论基础,Armstrong公理系统. **逻辑蕴含:对于满足一组函数依赖F的关系模式R<U,F>,其任何一个关系r,若函数依赖X->Y都成立,则称F逻辑蕴含X->Y. (1)关系模式R<U,F>有以下推理规则: ①自反律:若Y属于X属于U,则X->Y为F所蕴含: ②增广律:若X->Y为F所蕴含,且Z属于U,则XZ->YZ为F所蕴含: ③传递律:若X->Y即Y->Z为F所蕴含,则X->Z为F所蕴含

数据库 - 数据依赖的公理系统

数据依赖的公理系统 逻辑蕴含 定义6.11 对于满足一组函数依赖 F 的关系模式R <U,F>,其任何一个关系r,若函数依赖X→Y都成立, (即r中任意两元组t,s,若tX]=sX],则tY]=sY]),则称F逻辑蕴含X →Y Armstrong公理系统 关系模式R <U,F >来说有以下的推理规则: A1.自反律(Reflexivity):若Y ? X ? U,则X →Y为F所蕴含. A2.增广律(Augmentation):若X→Y为F所蕴含,且Z ? U,则XZ→YZ为F所蕴

接口自动化(四)--数据依赖的处理

接口测试中有的接口的请求数据要用到别的接口返回数据中的字段即有数据依赖. 处理数据依赖的思路(倒推): 1.请求数据中含有别的接口的返回数据中的字段 2.获取含有依赖数据的请求数据,所以就要获取到依赖数据 3.要获取到依赖数据,就要先执行被依赖的测试用例 4.执行完被依赖用例,得到返回数据,从返回数据中取需要字段,追加到请求数据中 具体实现(仅供参考,有的项目接口依赖很多数据,调用模块时要更复杂): 1 from data import operateExcel 2 from main impo

接口自动化使用setUp解决数据依赖问题

setUp是用例运行的前置条件,每次在运行用例的时候,都会优先运行setUp函数,我们可以运用setUp的这一特性,来解决数据依赖问题. 如下图: 将登录的请求放到了setUp函数里面,每次运行前都会发起登录请求.然后再将需要用到的cookie当做参数传递到了下一个请求中.从而解决了数据依赖问题. 参考代码如下: from API_AUTO.tools.http_request import HttpRequest import unittest import re class TestJenk

前端Mahsup异步依赖方式不能做业务数据依赖

很久之前流行mashup方式做内容集成,之前为了IP定位的方便,引用了第三方的IP定位JS,然后根据其内容与服务器同步地址数据并写入Cookie,可是这种方式一旦,第三方的库反应缓慢时,就会出现大问题,导致整站对地理数据Cookie的依赖变得很脆弱.现在把这种前端数据异步依赖方式改为后端调用第三方的公开IP地址数据库.

Python大数据依赖包安装

一.安装 先安装python2.7.6,win下的numpy这些包需要直接匹配版本,然后安装“numpy-1.8.1-win32-superpack-python2.7”和“scipy-0.16.0-win32-superpack-python2.7”,直接下一步,默认安装在C盘根目录,然后安装“setuptools-0.6c11.win32-py2.7”,装完以后去你的python27文件夹目录下找到Scripts文件夹,复制绝对路径(这是我的“C:\python\python27\Scrip

MySQL系列:视图基本操作

1. 视图简介 1.1 视图定义 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表. 视图可以从已存在的视图的基础上定义. 数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表中. 视图中的数据依赖于原来的表中的数据,表中的数据发生变化,显示在视图中的数据也会改变. 1.2 视图作用 (1)增加数据安全性 通过视图,用户只能查询和修改指定的数据. 数据库授权命令可以限制用户的操作权限,但不能限制到特定行和列上.使用视图可以将用户的权限限制到特定的行和列上. (2)提高表的

深入理解Java内存模型(四)——volatile

volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步.下面我们通过具体的示例来说明,请看下面的示例代码: class VolatileFeaturesExample { //使用volatile声明64位的long型变量 volatile long vl = 0L; public void set(long l) { vl = l;