不同版本的APP,数据库结构变化后该如何处理?

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/michaelKiven/article/details/49152129
如果是移动端, 视数据的重要性来定, 如果不重要, 那就忽视它. 如果重要, 就要额外做一个检查Documents(我这里假设你的数据文件放在Documents下)下的数据文件, 如果存在, 就SQL导出再加上按照新的数据结构导入到新的数据文件. 也就是两句SQL的事, 在升级后第一次进入应用的时候做这个事. 

如果是服务端, 正常情况还是需要做接口层(当然, 我也遇到没做接口层, 直接远程数据库操作的, 对这种, 我无话可说), 接口层的变动幅度, 往往没有数据层的变动大, 有时候, 哪怕数据结构变化了, 但接口层还是一样. 如果是碰到数据层变化逼迫接口层变化的情况, 那就需要保留老接口的同时, 提供新接口服务, 直到使用老接口的app保有量低到一定程度, 再关闭老接口. 我的产品接口, 是在接口中加上一个v(version)参数作为版本判断标志.


.首先我们需要把原来的数据库表重命名一下


public static final String SQL_ALTER_TABLE_NAME = "alter table "
            + A + " rename to temp_A";

原来的表结构是:


private static final String SQL_CREATE_TABLE = "create table  if not exists "
            + A + "(id integer primary key autoincrement,...)";

2.然后把备份表temp_A中的数据copy到新创建的数据库表A中,这个表A没发生结构上的变化


public static final String INSERT_SUBSCRIBE = "select 'insert into A (field1, field2...) 
values ('''||field1||''','''||field2||''',...)'  as insertSQL from temp_A";

3.此时临时表中的数据已经全部复制到了表A中,

4.删除备份表


public static final String DELETE_TEMP_TABLE = "delete from temp_A ";
    public static final String DROP_TEMP_TABLE = "drop table if exists temp_A";

5.然后把数据库版本号改为比之前高的版本号,在OnUpgrade方法中执行上述语句就行.


展开阅读全文

像我这样的数据库结构如何设计,谢谢?

03-19

会员自动结算系统设计方案rnrn一、 系统框架:rnrn1、 系统开发模式:rnrn本系统基于C/S软件设计模式开发、单机版结构,客户端自存取数据方式。rnrn2、 系统功能框架:rnrn会员自动结算系统rnrn一、会员管理子系统 rnrn1、会员录入系统 2、会员信息管理系统(1.会员更名模块 2.会员查询 3.会员资料维护)rnrn二、自动结算子系统rnrn1、积分/提成比率管理 2、自动结算模块(1.报表生成模块)rnrn二、 功能描述:rnrn从以上系统功能框架图看出,本系统分为两大模块:即“会员管理子系统”和“自动结算子系统”,前者实现对系统会员基本信息及会员变更密码的管理、包括会员查询功能。后者实现自动结算报表生成功能,同时可以手动维护系统积分、提成比率,实现自动结算的可维护性操作。rnrn1、 基本功能说明:rnrn“会员管理子系统”:包括两大功能模块:分别是“会员录入模块”和“会员信息管理模块”。rnrn会员录入:所有会员资料均通过“会员录入模块”模块进行录入,提交到会员档案资料中。rnrn会员信息管理:包括“会员更名系统”(即结构图上的“会员更名”模块),即每个会员需要有一个统计,即对所属总的会员数,A、B组分布情况,自动结算、设置指令,结算时可设置密码限制访问等(目前由于是单机版系统,对会员的密码限制设置只是预留接口,供以后系统扩展使用)。同时,通过“会员信息管理”模块实现会员资料的查询功能、会员资料维护功能(即会员资料的废弃、删除、更新等系列操作)。rnrn“自动结算子系统”:本系统包括三个模块,即“积分/提成比率管理”功能、“自动结算模块”、“报表生成系统”。其中”积分/提成比率管理“模块对会员系统的积分或提成比率进行初始设置。自动结算系统可以对指定会员或所有会员的积分或提成情况进行结算,生成结算表。“报表生成系统”即是对生成的结算表进行重新排序与整理,生成指定格式的报表文件,以供客户端打印。rnrn2、 基本概念说明:rnrn关于会员:rnrn用户每次的消费都记录在数据库中,当其所购我公司新产品达到1190元(人民币)以上消费额时(累计),即可申请加入成为正式会员。rnrn普通会员:成为正式会员的用户也即公司的普通会员。rnrn健康顾问:当普通会员累计积分达到5000分时,会员即升级成为我公司的“健康顾问”、“健康顾问”有对所属职能部门给予咨询、解答及对健康知识的传播的义务。rnrn健康大使:当会员下层的会员中有两个“健康大使”级别的会员时,该会员即升级为“健康大使”。rnrn健康特使:当会员下层的会员中有两个“健康大使”级别的会员时,该会员即升级为“健康特使”。rnrn关于会员积分:rnrn凡是会员(普通会员)公司给予一定奖励,包括:直接推荐奖:推举两人者,给予20分(每个会员计分标准为10分)。rnrn当会员升级为“健康顾问”级时,则在对其所属会员所产生业绩的2%作为对该“健康顾问”的奖励。rnrn当会员升级为“健康大使”级时,如果所属的A、B两组都产生了健康顾问级会员,则对健康大使给予所属会员所产生业绩的2%作为对该“健康大使”的奖励。否则不予奖励。rnrn当会员升级为“健康特使”级时,如果所属的A、B两组都产生了健康大使级会员,则对健康特使所属会员所产生业绩的2%作为该“健康特使”的奖励。否则不予奖励。rnrn会员分组及分层:rnrn每个会员最多只能推举两人,即成为A、B两组。每一个会员下属最多只有十层会员,A、B两组好即是他的二层会员,计分方式:A、B两组十层之内必须同时产生一个会员,则A、B所属上层即可累加分数20分,若只有一个会员,则A、B所属上层有可加10分。rnrn关键是数据库要如何设计才算合理?表和表之间的关系该怎么处理?rn 论坛

没有更多推荐了,返回首页