精华内容
下载资源
问答
  • 版本升级分析以及数据设计版本升级接口开发以及 APP 演示 1 /** 2 * version_upgrade 版本升级信息表 3 */ 4 CREATE TABLE `version_upgrade` ( 5 `id` smallint(4) unsigned NOT NULL ...

    APP 版本升级以及 APP 演示

    ① 版本升级分析以及数据表设计

    ② 版本升级接口开发以及 APP 演示

     

     1 /**
     2 * version_upgrade 版本升级信息表
     3 */
     4 CREATE TABLE `version_upgrade` (
     5   `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
     6   `app_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '客户端设备id 1安卓pad 2安卓手机 3ios手机 4iospad',
     7   `version_id` smallint(4) unsigned DEFAULT '0' COMMENT '大版本号id',
     8   `version_mini` mediumint(8) unsigned DEFAULT '0' COMMENT '小版本号',
     9   `version_code` varchar(10) DEFAULT NULL COMMENT '版本标识 1.2',
    10   `type` tinyint(2) unsigned DEFAULT NULL COMMENT '是否升级  1升级,0不升级,2强制升级',
    11   `apk_url` varchar(255) DEFAULT NULL,
    12   `upgrade_point` varchar(255) DEFAULT NULL COMMENT '升级提示',
    13   `status` tinyint(2) DEFAULT NULL,
    14   `create_time` int(11) DEFAULT NULL,
    15   `update_time` int(11) DEFAULT NULL,
    16   PRIMARY KEY (`id`)
    17 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    18 
    19 /**
    20 * app表 客户端表
    21 */
    22 CREATE TABLE `app` (
    23   `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
    24   `name` varchar(10) DEFAULT NULL COMMENT 'APP类型名称  如 : 安卓手机',
    25   `is_encryption` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否加密 1加密 0不加密',
    26   `key` varchar(20) NOT NULL DEFAULT '0' COMMENT '加密key',
    27   `image_size` text COMMENT '按json_encode存储',
    28   `create_time` int(11) NOT NULL COMMENT '创建时间',
    29   `update_time` int(11) NOT NULL COMMENT '更新时间',
    30   `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1正常 0删除',
    31   PRIMARY KEY (`id`)
    32 ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    版本升级接口开发及演示

                   

    不建议使用 get 方式。

    common.php 处理公共接口类的一些方法

    转载于:https://www.cnblogs.com/lxj0205/p/10001915.html

    展开全文
  • 比如某一条数据版本号是1,当它被别人替代后,并不是一般地删除,而是isvalid=false 然后是新插入一条数据版本号是2,isvalid=true 同时旧数据的obsoleteDT=%datetime%并且新数据的createDT=%datetime% 还有...
  • 我在和他闲聊中,听他说起数据设计时遇到的一个疑惑。听他说完后感觉这样的问题还是有一些普遍性的,在这里进行一下分享。 问题描述 文档版本管理最主要的是要维护文档的版本链。这很容易让人想到链表这种数据结构...

    最近一个朋友接手了一个项目,为自己部门开发文档版本管理系统。我在和他闲聊中,听他说起数据表设计时遇到的一个疑惑。听他说完后感觉这样的问题还是有一些普遍性的,在这里进行一下分享。

    问题描述

    文档版本管理最主要的是要维护文档的版本链。这很容易让人想到链表这种数据结构,所以我的那位朋友很快就给出了如下的表结构:

    create table Table_Docunment
    (
    	Docunment_Id int not null identity(1000, 1) primary key,
    	Docunment_Name nvarchar(64) not null,
    	Docunment_SubmitDate datetime not null,
    	Docunment_PreId int not null default(-1),
    	Docunment_NxtId int not null default(-1),
    	.......
    );

    其中Docunment_PreId存放前一版本文档的Id,Docunment_NxtId存放下一版本文档的Id。

    起初还没有感觉出什么问题,但当他试图向Table_Docunment填充测试数据或试图写一个存储过程来获取其链上最新的文档时,感觉非常痛苦。

    在他的存储过程中需要进行循环,他自己知道这样性能不好,但又不清楚如何解决。

    解决方案

    问题的关键在于初始的设计并不适合系统的使用场景。原始的设计导致了取某文档的下一版本或上一版本都需要进行连接(Join)操作,若要获得最新版本文档,还需要进行循环。

    对原始设计进行修改,新的表结构如下(省略了部分字段):

    create table Table_Docunment
    (
    	Docunment_Id int not null identity(1000, 1) primary key,
    	Docunment_Name nvarchar(64) not null,
    	Docunment_ChainId int not null default(-1),
    	Docunment_VersionId int not null default(-1),
    	Docunment_SubmitDate datetime not null,
    	......
    );

    其中Docunment_ChainId为当前文档所属的版本链,Docunment_VersionId为当前文档在版本链中的版本号(从1开始的连续编号)。

    在列(Docunment_ChainId, Docunment_VersionId)上可加unique约束。

    举例来说,有如下两条文档链:

    image (图1)

    其中文档上方的两个数字分别代表文档编号(Docunment_Id)和版本编号(Docunment_VersionId)。把这些信息存储到新的Table_Docunment中,结果如下:

    Docunment_Id Docunment_Name Docunment_ChainId Docunment_VersionId Docunment_SubmitDate ……
    1000 aaa 1 1 2010-01-01 12:03:00 ……
    1001 bbb 1 2 2010-01-02 06:02:00 ……
    1002 ccc 2 1 …… ……
    1003 …… 1 3 …… ……
    1004 …… 1 4 …… ……
    1005 …… 2 2 …… ……
    1006 …… 2 3 …… ……

    对于给定的一个文档,要找其上一版本或下一版本的文档时,只要找其同一条链上版本号小1或大1的文档。若要找最新版本文档只要在链上对版本号取max就行了,也很方便。

    新的需求

    这样的设计已基本满足我那位朋友的需求了,但在某些使用场景下,情况可能会更复杂些。

    若文档链有文档归并的情况,即两个文档链的最新文档版本是同一个文档,示意图如下:

    image (图2)

    对于这个新的需求,先前的设计就会有一些问题,对于图中文档1007,其版本号对于链1应为5,对于链2应为4,实在是没办法填,我先用了一个问号。

    新的需求改变了链和文档之间的关系。原先链和文档之间为1对多关系(注:标准情况下1对多关系会有两张表,但由于链在此系统中是一个虚概念,而且链实体也只会包含一个Id列,所以在先前设计中省去),现在链和文档之间变为多对多关系。多对多关系需要3张表,两个实体表,一个关系表。在此系统中链的实体表可以省去,所以我们只要引入一张关系表。

    重构原先设计,脚本如下:

    create table Table_Docunment
    (
    	Docunment_Id int not null identity(1000, 1) primary key,
    	Docunment_Name nvarchar(64) not null,
    	......
    );
    
    create table Table_DocChain
    (
    	DocChain_ChainId int not null,
    	DocChain_VersionId int not null default(1) check(DocChain_VersionId >= 1),
    	Docunment_Id int not null references Table_Docunment(Docunment_Id),
    	DocChain_SubmitDate datetime not null,
    	primary key(DocChain_ChainId, DocChain_VersionId)
    );

    主要是添加了Table_DocChain这张关系表,对于我在此表上加的约束大家可以自己思考。

    检验一下重构后的设计,把图2中的信息存入新的表结构中。

    Table_Docunment:

    Docunment_Id Docunment_Name ……
    1000 aaa ……
    1001 bbb ……
    1002 ccc ……
    1003 …… ……
    1004 …… ……
    1005 …… ……
    1006 …… ……
    1007 …… ……

     

    Table_DocChain:

    DocChain_ChainId DocChain_VersionId Docunment_Id DocChain_SubmitDate
    1 1 1000 2010-01-01 12:03:00
    1 2 1001 2010-01-02 06:02:00
    2 1 1002 ……
    1 3 1003 ……
    1 4 1004 ……
    1 5 1007 ……
    2 2 1005 ……
    2 3 1006 ……
    2 4 1007 ……

    其中关键的两行记录已用粗体标出。

    反过来思考

    前一节讨论了文档归并的情况。有文档归并,就有可能出现文档分支,那该如何处理呢?是否需要修改设计?

    我们先看一下文档分支的示意图:

    image (图3)

    文档分支没有改变链和文档之间的关系,所以我自己觉得前面的表结构设计不需要修改。

    那图3中分支链上的问号处如何填呢?

    当文档进行分支时,其已经不归属于原先的链了,应新创建一条链。图3中,当文档1005分支时,在表Table_DocChain中应插入一条DocChain_ChainId:3, DocChain_VersionId: 1, Docunment_Id: 1005的记录,此分支的随后文档都归属此新链,这样问题就解决了。

    防止文档链成环

    对于文档链的一个重要约束是不能成环。这个约束可以在应用程序端实现,但数据库端的检查永远是我们最后的一道防线。我们应尽可能通过约束或其他手段来避免错误数据进入数据库。

    如果能用check约束来避免链成环是最为直接的,在Table_DocChain中加如下约束:

    alter table Table_DocChain
    add constraint CK_LoopChain 
    check(not exists
    		(select
    			*
    		from
    			Table_DocChain DC1
    			inner join
    			Table_DocChain DC2
    			on
    				DC1.DocChain_ChainId = DC2.DocChain_ChainId
    				and
    				DC1.DocChain_VersionId <> DC2.DocChain_VersionId
    				and
    				DC1.Docunment_Id = DC2.Docunment_Id
    			)
    );

    其逻辑是在同一条链中,不存在版本号不同,且文档号相同的记录。

    但非常可惜无论在SQL Server 2008还是Oracle中,check约束都不允许使用子查询(Subqueries)。

    我们可以通过带有with check option的视图来达到目的,代码如下:

    create view View_DocChain
    as
    select
    	DC1.DocChain_ChainId,
    	DC1.DocChain_VersionId,
    	DC1.Docunment_Id,
    	DC1.DocChain_SubmitDate
    from
    	Table_DocChain DC1
    where
    	not exists
    	(select
    		*
    	from
    		Table_DocChain DC2
    	where
    		DC1.DocChain_ChainId = DC2.DocChain_ChainId
    		and
    		DC1.DocChain_VersionId <> DC2.DocChain_VersionId
    		and
    		DC1.Docunment_Id = DC2.Docunment_Id	
    	)
    with check option;

    对于Table_DocChain的插入、修改,都通过View_DocChain来进行,就能防止文档链成环的发生。

    转载于:https://www.cnblogs.com/DBFocus/archive/2010/09/12/1824321.html

    展开全文
  • 每次入库操作对应一个临时库(子版本),数据更新只针对选定的子版本,支持多人编辑。 更新流程化,支持长事务,数据更安全。 提交数据后删除子版本后,马上压缩数据库,避免增量表膨胀。 定时执行重建空间索引、...

    数据入库更新流程如下:

    其特点和优点为:

    1. 每次入库操作对应一个临时库(子版本),数据更新只针对选定的子版本,支持多人编辑。
    2. 更新流程化,支持长事务,数据更安全。
    3. 提交数据后删除子版本后,马上压缩数据库,避免增量表膨胀。
    4. 定时执行重建空间索引、分析数据集任务,加快浏览、查询速度。
    展开全文
  • 电子招投标企业信息备案数据设计(powerdesigner版本),包含企业信息,企业资质,工程项目,财务等栏目管理,提供版本管理功能,有需要联系xddouble@126.com
  • <br />问题描述 文档版本管理最主要的是要维护文档的版本链。这很容易让人想到链表这种数据结构,所以我的那位朋友很快就给出了如下的表结构:createtable Table_Docunment ( Docunment_Id ...

    问题描述

    文档版本管理最主要的是要维护文档的版本链。这很容易让人想到链表这种数据结构,所以我的那位朋友很快就给出了如下的表结构:

    create table Table_Docunment ( Docunment_Id int not null identity(1000, 1) primary key, Docunment_Name nvarchar(64) not null, Docunment_SubmitDate datetime not null, Docunment_PreId int not null default(-1), Docunment_NxtId int not null default(-1), ....... );

    其中Docunment_PreId存放前一版本文档的Id,Docunment_NxtId存放下一版本文档的Id。

    起初还没有感觉出什么问题,但当他试图向Table_Docunment填充测试数据或试图写一个存储过程来获取其链上最新的文档时,感觉非常痛苦。

    在他的存储过程中需要进行循环,他自己知道这样性能不好,但又不清楚如何解决。

    解决方案

    问题的关键在于初始的设计并不适合系统的使用场景。原始的设计导致了取某文档的下一版本或上一版本都需要进行连接(Join)操作,若要获得最新版本文档,还需要进行循环。

    对原始设计进行修改,新的表结构如下(省略了部分字段):

    create table Table_Docunment ( Docunment_Id int not null identity(1000, 1) primary key, Docunment_Name nvarchar(64) not null, Docunment_ChainId int not null default(-1), Docunment_VersionId int not null default(-1), Docunment_SubmitDate datetime not null, ...... );

    其中Docunment_ChainId为当前文档所属的版本链,Docunment_VersionId为当前文档在版本链中的版本号(从1开始的连续编号)。

    在列(Docunment_ChainId, Docunment_VersionId)上可加unique约束。

    举例来说,有如下两条文档链:

    image (图1)

    其中文档上方的两个数字分别代表文档编号(Docunment_Id)和版本编号(Docunment_VersionId)。把这些信息存储到新的Table_Docunment中,结果如下:

    Docunment_Id Docunment_Name Docunment_ChainId Docunment_VersionId Docunment_SubmitDate ……
    1000 aaa 1 1 2010-01-01 12:03:00 ……
    1001 bbb 1 2 2010-01-02 06:02:00 ……
    1002 ccc 2 1 …… ……
    1003 …… 1 3 …… ……
    1004 …… 1 4 …… ……
    1005 …… 2 2 …… ……
    1006 …… 2 3 …… ……

    对于给定的一个文档,要找其上一版本或下一版本的文档时,只要找其同一条链上版本号小1或大1的文档。若要找最新版本文档只要在链上对版本号取max就行了,也很方便。

    新的需求

    这样的设计已基本满足我那位朋友的需求了,但在某些使用场景下,情况可能会更复杂些。

    若文档链有文档归并的情况,即两个文档链的最新文档版本是同一个文档,示意图如下:

    image (图2)

    对于这个新的需求,先前的设计就会有一些问题,对于图中文档1007,其版本号对于链1应为5,对于链2应为4,实在是没办法填,我先用了一个问号。

    新的需求改变了链和文档之间的关系。原先链和文档之间为1对多关系(注:标准情况下1对多关系会有两张表,但由于链在此系统中是一个虚概念,而且链实体也只会包含一个Id列,所以在先前设计中省去),现在链和文档之间变为多对多关系。多对多关系需要3张表,两个实体表,一个关系表。在此系统中链的实体表可以省去,所以我们只要引入一张关系表。

    重构原先设计,脚本如下:

    create table Table_Docunment ( Docunment_Id int not null identity(1000, 1) primary key, Docunment_Name nvarchar(64) not null, ...... ); create table Table_DocChain ( DocChain_ChainId int not null, DocChain_VersionId int not null default(1) check(DocChain_VersionId >= 1), Docunment_Id int not null references Table_Docunment(Docunment_Id), DocChain_SubmitDate datetime not null, primary key(DocChain_ChainId, DocChain_VersionId) );

    主要是添加了Table_DocChain这张关系表,对于我在此表上加的约束大家可以自己思考。

    检验一下重构后的设计,把图2中的信息存入新的表结构中。

    Table_Docunment:

    Docunment_Id Docunment_Name ……
    1000 aaa ……
    1001 bbb ……
    1002 ccc ……
    1003 …… ……
    1004 …… ……
    1005 …… ……
    1006 …… ……
    1007 …… ……

     

    Table_DocChain:

    DocChain_ChainId DocChain_VersionId Docunment_Id DocChain_SubmitDate
    1 1 1000 2010-01-01 12:03:00
    1 2 1001 2010-01-02 06:02:00
    2 1 1002 ……
    1 3 1003 ……
    1 4 1004 ……
    1 5 1007 ……
    2 2 1005 ……
    2 3 1006 ……
    2 4 1007 ……

    其中关键的两行记录已用粗体标出。

    反过来思考

    前一节讨论了文档归并的情况。有文档归并,就有可能出现文档分支,那该如何处理呢?是否需要修改设计?

    我们先看一下文档分支的示意图:

    image (图3)

    文档分支没有改变链和文档之间的关系,所以我自己觉得前面的表结构设计不需要修改。

    那图3中分支链上的问号处如何填呢?

    当文档进行分支时,其已经不归属于原先的链了,应新创建一条链。图3中,当文档1005分支时,在表Table_DocChain中应插入一条DocChain_ChainId:3, DocChain_VersionId: 1, Docunment_Id: 1005的记录,此分支的随后文档都归属此新链,这样问题就解决了。

    防止文档链成环

    对于文档链的一个重要约束是不能成环。这个约束可以在应用程序端实现,但数据库端的检查永远是我们最后的一道防线。我们应尽可能通过约束或其他手段来避免错误数据进入数据库。

    如果能用check约束来避免链成环是最为直接的,在Table_DocChain中加如下约束:

    alter table Table_DocChain add constraint CK_LoopChain check(not exists (select * from Table_DocChain DC1 inner join Table_DocChain DC2 on DC1.DocChain_ChainId = DC2.DocChain_ChainId and DC1.DocChain_VersionId <> DC2.DocChain_VersionId and DC1.Docunment_Id = DC2.Docunment_Id ) );

    其逻辑是在同一条链中,不存在版本号不同,且文档号相同的记录。

    但非常可惜无论在SQL Server 2008还是Oracle中,check约束都不允许使用子查询(Subqueries)。

    我们可以通过带有with check option的视图来达到目的,代码如下:

    create view View_DocChain as select DC1.DocChain_ChainId, DC1.DocChain_VersionId, DC1.Docunment_Id, DC1.DocChain_SubmitDate from Table_DocChain DC1 where not exists (select * from Table_DocChain DC2 where DC1.DocChain_ChainId = DC2.DocChain_ChainId and DC1.DocChain_VersionId <> DC2.DocChain_VersionId and DC1.Docunment_Id = DC2.Docunment_Id ) with check option;

    对于Table_DocChain的插入、修改,都通过View_DocChain来进行,就能防止文档链成环的发生。

     

     

    展开全文
  • 给出了一种数据仓库版本的形式定义和维度实例的共享存储方式,并在此基础上设计了查询优化算法DWVOQ,通过建立维度实例的版本视图及其与事实实例的连接索引来降低索引空间代价,提高索引查询效率。
  • APP接口开发--版本升级数据设计

    千次阅读 2020-01-26 13:35:33
    版本升级信息表 DROP TABLE IF EXISTS `version_grade`; CREATE TABLE "version_grade" ( "id" smallint(5) unsigned NOT NULL AUTO_INCREMENT, "app_id" smallint(6) NOT NULL DEFAULT '0' COMMENT '客户端...
  • 移动端产品版本更新数据表的设计

    千次阅读 2016-09-28 20:06:09
    useragent:各渠道版本 ,以逗号分隔,可升级多渠道,全渠道用all,主要是区分多渠道的不同升级,比如腾讯某个渠道,并不让你升级到最新版本,则就可以不加上腾讯渠道 download_url:下载url update_id
  • 项目中,常见有四种模式: 模式一:让ArcGIS自动将增量数据移动到基表。在注册数据的时候,勾选将...模式二:正式库的数据注册归档,同时,设计一个空的临时库,与正式库结构一致。数据更新到临时库中,确认无误...
  • 数据结构课程设计-VC版本的双链表类 完整代码
  • 我们在考虑数据接口的设计的时候,最容易关注的是数据本身的接口。简单点说,要哪些数据,我接口设计的时候就加入那些数据。在此基础上再考虑数据结构以及结构优化。这些并没有什么问题。事实上,也只有考虑这些,...
  • 版本升级分析以及数据设计版本升级接口开发以及 APP 演示 /** * version_upgrade 版本升级信息表 */ CREATE TABLE `version_upgrade` ( `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT...
  • 为了能够保留历史数据,在版本设计时有以下方案: 一、使用版本号 版本号是一种常见的版本设计方案,就是在要进行历史数据保留的表上面增加一个版本号字段,该字段可以是DateTime类型,也可...
  • 学生管理系统的设计与实现(c语言版本数据结构)

    千次阅读 多人点赞 2020-07-09 18:54:04
    文章目录学生管理系统的设计与实现1、需求分析1.1 实验目的:1.2 实验内容:1.3实验要求:1.4概要设计:2、概要设计2.1所用数据结构的定义及其相关说明(相关结构体或类的定义及其含义)2.2、各子程序调用关系2.3、各...
  • 最近有一张数据表,有多个业务需求需要修改此表,修改的...修改时先查询数据库中的数据版本号(最新版本号)和自己一开始取到数据的版本号是否一致,一致则直接修改,不一致先刷新到最新版数据,再确定是否要修改。...
  • 数据之美:一本书学会可视化设计》PDF英文版本下载

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,885
精华内容 7,154
关键字:

数据版本设计