关于ivx中数据库多表联查的经验总结

数据库是案例中经常用到的后台组件,而且往往一个案例中会使用多个数据库存储数据,当这些数据库之间有公共字段且存在一定关系时我们就会使用到多表联查。

一.多表联查
例如下图,图片表中数据ID字段为唯一标识字段,我们要在喜欢表中引用图片表的数据时,并不是将图片直接添加在喜欢表中,而是将图片的数据ID保存在喜欢表的imageID字段中。反之,通过这个imageID我们可以在图片表中找到唯一确定的图片数据。
关于ivx中数据库多表联查的经验总结
这样做的好处是当一个数据库数据发生改动时,不会对其它数据库造成影响。例如,当图片表数据ID为1的记录需要更换图片时,我们只需要更改图片表,但如果喜欢表中直接存放的是图片数据,我们就要从喜欢表中找出所有与该图片有关的数据一一更改。
关于ivx中数据库多表联查的经验总结
在数据库中我们将数据ID这样唯一标识一条记录且不能重复不允许为空的字段称为主键,其它字段称为外键,而外键不能用于多表联查,只有主键可以作为其它数据表中外键。例如图片表中的数据ID在喜欢表中就是作为外键。

二.案例事件

1.输出数据服务
在输出数据服务中我们要做的不光是输出图片库中全部图片的资源地址,还需要统计每张图片总共被点赞的次数和是否被当前用户点赞。
首先我们将图片表输出到后台的对象数组“图片列表”中,可以注意到“图片列表”中除了对应图片表中数据ID和image两个字段外还添加了like和islike两个字段,其中like用于存储该图片被点赞的总次数,而islike用于存储图片是否被当前用户点赞。不过由于数据库中没有这两个字段,所以此时这两个字段都还是空值。
接下来我们使用一个循环语句遍历对象数组的每一行数据。每次循环中我们先统计喜欢表中imageID字段等于该行图片数据ID且islike字段为1的记录条数,将统计结果填到该行的like中,然后再从喜欢表中输出image字段等于该行图片数据ID且提交用户为当前用户的记录,根据统计结果设置islike的值。这里使用了一个三元表达式,如果输出行数是0行就表示当前用户没有点赞过该图片直接赋值为0。如果有输出记录,那么输出结果中的islike就可能为1(用户点赞过)也可能为0(用户点赞过又取消了),这里我们不需要再进行判断而将其直接赋值到对象数组中即可。最后我们将对象数组“图片列表”返回到前台。
关于ivx中数据库多表联查的经验总结
关于ivx中数据库多表联查的经验总结
关于ivx中数据库多表联查的经验总结
2.提交图片服务
提交图片中我们将图片URL地址传给服务,在图片表中添加一条数据即可。
关于ivx中数据库多表联查的经验总结
3.喜欢与否服务
喜欢与否服务用于用户对图片的点赞状态发生改变时,其接收参数就是图片的ID和用户当前对图片的点赞状态。首先从喜欢表中统计提交用户为当前用户且image字段为所传图片的记录条数,如果为0说明用户对该图片没有点赞过,就直接将接收参数提交到喜欢表中,如果统计结果不为0则将接收参数更新到喜欢表中。
关于ivx中数据库多表联查的经验总结
4.在前台初始化时我们调用输出数据服务,将数据保存到前台的“图片列表”中,然后通过循环创建展示出所有图片及它们的总点赞数,喜欢图标也通过数据绑定会根据当前用户是否点赞显示对应的样式。
关于ivx中数据库多表联查的经验总结
关于ivx中数据库多表联查的经验总结
点击喜欢图标则调用喜欢与否动作组,动作组中会将当前图片的数据ID和islike取反之后的值传给喜欢与否服务。当服务成功更改后台数据后就将前台“图片列表”中的值更新。
关于ivx中数据库多表联查的经验总结
关于ivx中数据库多表联查的经验总结
5.模型中,我们还可以自行上传图片。点击上传图片图标就可以将图片地址保存到一维数组中,界面下方会以一维数组为来源将图片循环创建并展示,点击每张图片的upload按钮会调用提交图片服务将该图片上传至图片库中,上传成功后自然也就将该图片从一维数组中删除。
关于ivx中数据库多表联查的经验总结
关于ivx中数据库多表联查的经验总结
关于ivx中数据库多表联查的经验总结
总结
是否使用多表联查一定要结合自己的案例实际情况。一般而言,直接绑定数据的话在制作时逻辑会比较简单,但是会增加后期维护的难度;而使用多表联查则相反,在制作案例时逻辑会更加复杂一些,但是有利于后期维护和改动。

猜你喜欢

转载自blog.51cto.com/14556317/2491261
今日推荐