精华内容
下载资源
问答
  • 数据库字段设计之流程与状态

    千次阅读 2016-12-14 22:22:13
    Status表示业务所处阶段的状态,而流程中的每个步骤通常表示某个动作,两者之间还是有一些差异的,差异来自于观察角度的不同,开发人员看的是流程,而用户看到是状态,下面我以审批流程为例进行解释。

    数据库是动态网站开发不可缺少的一部分,当业务步骤较复杂时,我们可以使用Status来控制其整个流程。Status表示业务所处阶段的状态,而流程中的每个步骤通常表示一个动作,两者的每一步都一一对应但也有一些差异,差异来自于不同的角色间不同的观察角度,开发人员看的是流程,而用户看的是状态,下面我以某审批流程为例进行解释。
    假设审批流程有七个步骤:

    1. 发起申请
    2. 副经理审批
    3. 副经理驳回
    4. 经理审批
    5. 经理驳回
    6. 采购
    7. 入库

    副经理审批和副经理驳回可以理解为副经理审批这一步骤的两种结果:一种是通过,另一种是驳回,这俩可以理解为一步的两种情况,他们是并列关系;
    经理审批和经理驳回可以理解为经理审批这一步骤的两种结果:一种是通过,另一种是驳回,这俩也可以理解为一步的两种情况,他们是并列关系。
    因此,说这个审批流程有七个步骤可以,说他有五个步骤也行,而且流程中的每个步骤都是一个动作,这对于程序开发人员来说比较好理解,因为我们平时描述一个流程也不过如此,但是如果用这些步骤来作为业务所处阶段的状态描述信息的话,那用户就不太能理解了。
    例如:
    A发起申请并指定下一步的审批人是副经理B,B登录系统后发现名下多了一个待处理的项目,状态是“发起申请”,其实现在这个项目的状态描述地就不明确,如果感觉不出来的话,那请对比下面的情况;
    A发起申请并指定下一步的审批人是副经理B,B登录系统后发现名下多了一个待处理的项目,状态是“副经理待审批”,这样就比较明确了,副经理登录后看见项目的状态就知道自己该怎么做。
    “发起申请”表示流程中的一个步骤,而“副经理待审批”表示业务所处阶段的状态,他俩是一对一对应的关系,但是应用的场景不同,前者用于开发者明确业务流程,后者用于提示用户进行操作。
    业务所处阶段的状态通常描述的是下一步应该进行的操作,因为只有这样,它才能对该流程下一步的处理人员的操作起到提示作用:
    如果发起申请后的下一步是副经理审批,那业务所处阶段的状态就是“副经理待审批”;
    如果发起申请后的下一步是经理秘书审批,那业务所处阶段的状态就是“经理秘书待审批”。
    所以流程与状态的对应关系应该是这样的:
    这里写图片描述
    驳回会造成流程回环,所以把它们单独拿出来,剩下的是一个线性流程,对应关系更加明显。
    流程中的每个步骤通常表示一个动作,而且是已完成的动作,上面的状态其实是简化过的,下面附上流程与完整的状态的对应关系图:
    这里写图片描述
    我们一般不会使用完整的状态,一是太长了显示出来不好看,二是不符合人们的习惯。
    如果你有心的话会发现,简化的状态是完整的状态中的后半句话,但是2副经理已驳回和4经理已驳回是前半句话,这很符合人们的习惯,我觉得用后半句话更合理,不过使用前半句话或后半句话都没错。
    副经理B驳回到发起人A后,A登录系统发现名下有一个项目,状态是“副经理已驳回”,这时A会重新发起申请;
    如果副经理B驳回到发起人A后,A登录系统发现名下有一个项目,状态是“待重新发起申请”,这时A也会重新发起申请,我觉得这样的状态对操作人员的提示更加明显;
    注意:
    别把流程中的步骤与状态链中的状态混淆了,如果流程描述成如下:

    1. 发起申请
    2. 副经理审批
    3. 副经理驳回
    4. 经理审批
    5. 经理驳回
    6. 正在采购
    7. 已入库

    那6和7其实就是错误的,这样就会把流程中的步骤与状态链中的状态混淆了,给自己造成不必要的麻烦,所以一定要牢记:“流程中的每个步骤通常表示一个动作,而且是已完成的动作”。
    不知道大家现在搞清楚流程与状态的关系了没,如果有帮助的话请点个赞。

    展开全文
  •  一张表中,新增时有时间,状态(初始为0)字段,要求到该时间时,就将该条数据的状态设置为1 思路:  做正常的增改,直接将这两个字段存入至数据库,然后再公共类中写监听,每2分钟将数据库中小于系统时间的...

    需求:

      某一张表中,新增时有时间,状态(初始为0)字段,要求到该时间时,就将该条数据的状态设置为1

    思路:

      做正常的增改,直接将这两个字段存入至数据库,然后再公共类中写监听,每2分钟将数据库中小于系统时间的字段设置为1

    代码:

      监听类: 

      public class SystemListener implements ServletContextListener {
        private Timer timer = null;

        public void contextDestroyed(ServletContextEvent arg0) {
          if (timer != null) {
            timer.cancel();
          }
        }

        public void contextInitialized(ServletContextEvent arg0) {
          if (timer == null) {
            System.out.println("审核监听开启...");
            timer = new Timer();
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 90);
            calendar.set(Calendar.SECOND, 0);

            //服务启动后1分钟后执行1次,之后2分钟执行一次
            timer.schedule(new SynJzbmsj(), 1000*60, 2*60*1000);
          }
        }
      }

      修改状态类:

      public class SynJzbmsj extends TimerTask{
        private Logger log = Logger.getLogger(SynJzbmsj.class);
        @Override
        public void run() {
          try{
            log.info("修改截至报名时间的状态");
            long time_s = System.currentTimeMillis();

            
            syn();

            long time_e = System.currentTimeMillis();
            log.info("修改截至报名时间的状态,耗时(ms):"+(time_e-time_s));
          } catch (Exception e) {
            e.printStackTrace();
          }
        }

        private void syn(){
          try{
            //修改学位项目中截至报名时间的状态

            String sql = "update WEB_XWXM set sjzt = '0' where JZBMSJ <= sysdate";

            DBManagerUtil db = new DBManagerUtil();
            db.execute(sql);

          }catch(Exception e){
            log.error("修改截至报名时间的状态时发生错误"+e.toString(), e);
            e.printStackTrace();
          }
        }

      }

      web.xml文件中配置监听器 

      <listener>
        <listener-class>
          yansoft.common.SystemListener
        </listener-class>
      </listener>

    自此大功告成!

     

    转载于:https://www.cnblogs.com/zying3/p/11016313.html

    展开全文
  • 一般我们都用一个状态字段来表示他的状态来,不同的状态下我们可以进行不同的业务操作。但有时候真实的状态又与时间有关。时间到了就上架,时间到了就要下架。如果我们只用一个状态字段来表示状态,那么我们就需...

    一、上下架字段

    很多产品都有上下架的需求,比如商品管理,广告管理,图书管理等等。

    一般我们都用一个状态字段来表示他的状态来,不同的状态下我们可以进行不同的业务操作。但有时候真实的状态又与时间有关。某时间到了就上架,某时间到了就要下架。如果我们只用一个状态字段来表示状态,那么我们就需设计一个定时任务,每隔很短的时间来判断当前时间与设置时间的关系来变化状态值。这样状态值就可以用多个值来表示直正的状态。比如:待上架,已上架,已过期。

    如果不用定时任务呢?那我们就要在使用时加上时间的判断,这样的话,状态值可以就是两个:下架、上架。至于上架又可分成"时间内"与"时间外"的,这个不在状态字段里体现。下图分别表示只有开始时间与有开始时间和结束时间的两种情况:

    8fbbc759a4f16c8940ec666bfcb1a78e.png

    以前的另一种状态设计,感觉比较麻烦:

    ad3577e29dd7ab141c20baccba58463c.png

    二、is_del(逻辑删除)字段

    这个用于恢复一些误操作,但不滥用。因为如果滥用(如每个表都设置一个),那么所有的查询sql都要关注这个字段,谁又敢保证“都”都关注到字段呢。

    如果确实有这样的业务,那么在“逻辑删"时就要考虑相关表的数据。是要物理删除?逻辑删?不变化? 不变化的话,相关表的数据会不会被别的表关联到?

    关联到了数据是不是就是逻辑错误?

    如果is_del能放进state字段,就不要拿出来,放进去就要考虑有没有删除状态下还有别的状态(比如有需求要取删除的但曾经是显示的),有就不能放进去。

    三、冗余字段的设计

    数据库的设计范式里是不推荐冗余字段的,确实有它的道理。在实际操作中,有时为了效率要多设计一个冗余字段,那么一定要考虑到,如果同步它的更新。是用事务,还是定时任务?

    展开全文
  • 需求:一张表中,新增时有时间,状态(初始为0)字段,要求到该时间时,就将该条数据的状态设置为1思路:做正常的增改,直接将这两个字段存入至数据库,然后再公共类中写监听,每2分钟将数据库中小于系统时间的字段...

    需求:

    某一张表中,新增时有时间,状态(初始为0)字段,要求到该时间时,就将该条数据的状态设置为1

    思路:

    做正常的增改,直接将这两个字段存入至数据库,然后再公共类中写监听,每2分钟将数据库中小于系统时间的字段设置为1

    代码:

    监听类:

    public class SystemListener implements ServletContextListener {

    private Timer timer = null;

    public void contextDestroyed(ServletContextEvent arg0) {

    if (timer != null) {

    timer.cancel();

    }

    }

    public void contextInitialized(ServletContextEvent arg0) {

    if (timer == null) {

    System.out.println("审核监听开启...");

    timer = new Timer();

    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.HOUR_OF_DAY, 23);

    calendar.set(Calendar.MINUTE, 90);

    calendar.set(Calendar.SECOND, 0);

    //服务启动后1分钟后执行1次,之后2分钟执行一次

    timer.schedule(new SynJzbmsj(), 1000*60, 2*60*1000);

    }

    }

    }

    修改状态类:

    public class SynJzbmsj extends TimerTask{

    private Logger log = Logger.getLogger(SynJzbmsj.class);

    @Override

    public void run() {

    try{

    log.info("修改截至报名时间的状态");

    long time_s = System.currentTimeMillis();

    syn();

    long time_e = System.currentTimeMillis();

    log.info("修改截至报名时间的状态,耗时(ms):"+(time_e-time_s));

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    private void syn(){

    try{

    //修改学位项目中截至报名时间的状态

    String sql = "update WEB_XWXM set sjzt = '0' where JZBMSJ <= sysdate";

    DBManagerUtil db = new DBManagerUtil();

    db.execute(sql);

    }catch(Exception e){

    log.error("修改截至报名时间的状态时发生错误"+e.toString(), e);

    e.printStackTrace();

    }

    }

    }

    web.xml文件中配置监听器

    yansoft.common.SystemListener

    自此大功告成!

    展开全文
  •  分析:从前端输入时间段,最终将由前端的后台程序接收该时间段的开始时间和结束时间,而数据库存有张表用来存储设备运行状态,则该任务的本质就是利用该时间段的开始时间和结束时间对数据库中设备状态表进行约束,...
  • 关于数据库表中ENABLE字段

    千次阅读 2011-08-02 11:58:12
    数据库设计的过程中,我们经常会看到一些表中会存在一个字段叫做ENABLE(意思是:可用性...这个字段的用途主要体现在当我们对表中的一条记录进行删除的时候,其实没有真正的删除记录,而是修改了ENABLE字段状态
  • status),角色的用户将次数据库中存放的一id的request的status修改为一个值时,比如open,则从修改时开始计时,若没有其他用户将它的状态改为其他值,那么24小时后,要让此request的status字段自动变为另一个...
  • 数据库字段设计时的要领1.数字型:一般用来记录次数分数等等,还有一种可以用在检索,排序,它比字符型来的快,如果你能用数字型的那就用数字型,特别是用来区分条数据是什么类型时用,比如我们的订单是处于新建订单...
  • 在oracle数据库中,通过bitand来查询options上一位上的状态 例如:查询第三位上的状态是否是1,bitand(options,4)如果等4表示第三位是1,否则不是。 要验证哪一位通过是用那一位的2的n-1次方与opt...
  • 在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10...现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另外一个字段,然后在django中删除计算每台服务器负...
  • 【单选题】20. 计算 vt.【单选题】以下哪个数据库更适合查找学术类医学护理全文,比如利用医学主题词查找,解决您毕业论文写作中需要引用外文参考文献的困难...【单选题】工作在放大状态三极管,当输入电流IB=10μA...
  • 我们可以用session这种会话管理机制来构建购物车、监控站点网络访问,甚至还可以跟踪一个用户具体是如何使用你的应用的。PHP默认的session处理行为已经能应付大部分的场景,但有时候我们还是希望能够主动一点来...
  • 我最近做项目遇到一个问题就是数据库的的订单需要定时检查自己的订单状态,如果到了endtime字段的时间订单状态还是2,就将订单状态修改为4 在网上找到类似的解决方法。 定时的关键是要结合MySQL的某些时间函数。 ...
  • 一、问题描述:需要将工作界面上的一些已经离职的用户状态改为失效,并备注为离职二、需要准备/拿到手的工具/条件/数据:1.已离职人员名单(excel格式)2.任意mongodb工具(笔者使用的是NoSQLBooster for Mongodb)3.连接...
  • 我最近做项目遇到一个问题就是数据库的的订单需要定时检查自己的订单状态,如果到了endtime字段的时间订单状态还是2,就将订单状态修改为4在网上找到类似的解决方法。定时的关键是要结合MySQL的某些时间函数。如下文...
  • 当某个表中存在标志表格中记录不同状态的判断性字段的时候,可以采用两种不同的数据库组织形式。方法一、将两种不同状态的记录分别存储到两个表格中,然后通过C#判断选择一个表格并执行查询操作。方法二、.将所有...
  • 事务把数据库从一种一致性状态转换成另一种一致性状态。原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态...
  • 程序开发中,经常遇到一条记录有多个状态位,比如一条商品,他属于热门,新品,特卖。我们的数据库如何设计呢?...状态存储在一个字段中,比如条商品属于热卖,新品和特卖,则字段存储的值:01|...
  • 目前有一个订单表,表里有 status 和 manager_id 字段,manager_id 值为 1-3,status 的值为 1-10,表示对应不同的状态,目前我需要把每一个 manager_id 的不同状态的条数查出来,然后展示到一个页面上,本来想利用 ...
  • 程序开发中,经常遇到一条记录有多个状态位,比如一条商品,他属于热门,新品,特卖。我们的数据库如何设计呢?...状态存储在一个字段中,比如条商品属于热卖,新品和特卖,则字段存储的值:01|...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 328
精华内容 131
关键字:

数据库某字段状态