代码之家  ›  专栏  ›  技术社区  ›  Matthew Jones

SQL设计-计算未知值

  •  2
  • Matthew Jones  · 技术社区  · 15 年前

    假设我有一张叫HoursCharged的桌子

    ChrgNum(varchar(10))   
    CategoryID(uniqueidentifier)   
    Month(datetime)   
    Hours(int)
    

    CategoryID是对数据库中另一个表的外键引用,它只是一个名称/ID对。chrgnum保证在这个数据库之外是唯一的,所以我只检查它是否已经存在于我的数据库中。

    您还应该知道,这个工具支持来自一个数据库的几个不同的组(因此是全局唯一的categoryID,因为不同的组可能将类别命名为相同的东西,所以我需要区分它们)。

    此表由csv文件填充。其理念是,chrgnum、categoryID和month的每一个组合都是独一无二的。正在运行以创建导入文件的报告只能看到特定范围(即一年)。因此,该算法如下所示:

    IF (ChrgNum exists in database, CategoryID exists in database, 
        combo of ChrgNum/CategoryID/Month DOES NOT exist in table HoursBurned)
    THEN add a new row for this entry
    ELSE IF (ChrgNum exists in database, CategoryID exists in database,
        combo of ChrgNum/CategoryID/Month DOES exist in table HoursBurned)
    THEN update the existing row with the new Hours value.
    

    这一切都很好,但现在我的老板要我说明在一个月内,一个已知的时间和一个 未知的 类别。

    我的问题是,我如何解释这个问题?如果我只是插入一个空的categoryID,那么如果一个完全独立的组对相同的数字和类别收取小时费用,会发生什么?我的另一个想法是为未知类别创建一个新表,但是如果我这样做,并且第一个导入有两个未知类别,而下一个导入又有两个未知类别中的一个(可能发生),我该怎么做?

    我的头已经绕着这个转了好几个小时了。感谢您的帮助!

    2 回复  |  直到 8 年前
        1
  •  2
  •   APC    15 年前

    你的老板向你提出了这个问题,为什么不问问他们呢?因为这听起来像是一个商业问题。如果您的组正在报告您不知道的类别,那么您肯定应该尝试将数据库与提供它的系统同步?

    否则,单一的“未知”类别有什么问题?系统要求您跟踪分配给当前未跟踪的类别的小时数。

        2
  •  0
  •   edsoverflow    15 年前

    在我看来,您应该动态地将未识别的类别添加到现有类别表中。如果问题是区分不同组中同名的类别,那么您现在是否已经有了这个问题?