需求如下:
上级部门发布指令——指令由标题、内容、需报送的文档(分为报表、总结、简报、方案四种,可以多选),每个需报送的文档的报送频率(分为:单次指定日期、周报、月报和多次指定日期4种,单选),指令接收单位几部分组成。指令接收单位根据指令需求进行文档的上报,上报文档的要求如下:在要求报送时间的3天内可以进行报送,报送时间的两天后报送的文档定义为补报,比如一个指令文件,要求报送报表和总结,报表是每周3进行周报,那么每周1到3可以进行报表的报送,周4,5报送的定义为补报,周6,周日不能报送;总结是每月10号进行月报,那么每月8号到10号可以进行报送,11、12号报送的定义为补报,其他时间不能报送。
系统根据指令上报的情况生成该指令的上报情况统计表,大概的格式如下:
指令标题:关于上报***的指令
要求上报的内容:
1,报表:
一分局
第一周(已报),第二周(补报),第三周(未报),第四周(已报),第五周(已报)
二分局
第一周(未报),第二周(补报),第三周(补报),第四周(已报),第五周(已报)
2,总结
一分局
2010年8月(已报),2010年9月(补报)
二分局
2010年8月(已报),2010年9月(已报)
==============================================================
针对以上需求,本人研究很久之后,基本实现了功能,但是感觉很不科学,而且涉及到跨年之后周数计算的问题,不知道大家有什么好的意见啊?数据库结构和算法要怎么设计才好呢?请高手指教哈。

解决方案 »

  1.   

    先分析下需求,再考虑写sql会明确一点
      

  2.   

    我目前是这样做的:
    指令表:
    ID
    标题
    接收单位ID
    发布时间
    报表报送频率(varchar型,在程序中做判断,为空则不报送)
    总结报送频率(varchar型,在程序中做判断,为空则不报送)
    简报报送频率(varchar型,在程序中做判断,为空则不报送)
    方案报送频率(varchar型,在程序中做判断,为空则不报送)
    ==============================================
    上报表:
    ID
    指令ID
    上报单位ID
    上报类型(报表\总结\简报\方案)
    上报时间
    附件URL
    =============================================
    在程序中的统计函数如下:
    指令 当前指令=new(指令ID)
    foreash(上报内容 in 当前指令.上报内容)
    {
        string str="上报内容:<br>";
        foreash(上报单位 in 当前指令.上报内容)
        {
            str+=上报单位.tostring()+":<br>";
            foreash(上报时间 in 上报内容.上报时间)
            {
                str+=上报时间.tostring()+"("+判断该时间是否上报(上报时间,上报内容,上报单位)+")";
            }
        }
    }
    ===============================================
    这种结构是否合理?还有如何定义“上报内容.上报时间”的结构体,“判断该时间是否上报”函数如何写?