Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL设计-计算未知值_Sql_Database Design - Fatal编程技术网

SQL设计-计算未知值

SQL设计-计算未知值,sql,database-design,Sql,Database Design,假设我有一张叫小时收费的桌子 ChrgNum(varchar(10)) CategoryID(uniqueidentifier) Month(datetime) Hours(int) CategoryID是对数据库中另一个表的外键引用,它只是一个名称/ID配对。ChrgNum保证在这个数据库之外是唯一的,所以我只检查它是否已经存在于我的数据库中 您还应该知道,该工具支持来自一个数据库的多个不同组(因此是全局唯一的CategoryID,因为不同组可能会将类别命名为相同的名称,我

假设我有一张叫小时收费的桌子

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.
这一切都很好,但现在我的老板要我说明,在一个特定的月份,对一个已知的ChrgNum和一个未知的类别收取的小时数

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


我的脑袋已经在这上面转了好几个小时了。感谢您的帮助

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

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


否则,拥有一个“未知”类别有什么错?您被要求跟踪分配给当前未跟踪的类别的小时数

严肃地说:你需要区分不同的“未知”类别ID吗?我喜欢你在“未知类别”表中插入的想法。若要处理“未知已存在”,您可以执行编程检查并仅在其不存在时插入,或者在CategoryID上添加唯一约束并告诉它忽略重复项。否,问题是报告的时间跨度可变。假设我在第一次运行报告时发现两个未知类别。下一次,我发现了一个,那一个是前两个中的一个的完全复制品。行发生了什么?您是否可以在“未知类别”中添加一个额外的列,以使此案例具有唯一性?类似于INT标识之类的东西?不依赖CategoryID是唯一的?导入文件是否包含类别名称或ID?名称。ID是由我的数据库内部生成的。我不想添加类别,因为用户可以出于其他目的选择它们。如果您永远不打算将类别添加到主表中,您可以使用您提到的“未知类别”表,其中可能有一列指示提供类别的组。然后在每次导入时,您是否会看到类别是否存在于任一表中,如果不存在,请将其添加到未知表中?信不信由你,这是与我实际操作最接近的答案。有时最简单的解决方案是最好的。通常情况下,虽然这并不意味着我们总是以这种方式实现事情。