我正在集思广益一个应用程序来处理各种数据完整性检查。每个单独的检查可以查询许多生产表,评估结果并报告错误,提供与检查相关的数据。例如,一次检查会查找预定付款但没有剩余余额的客户;不同的支票可能会查找已获得授权但未结算超过3天的信用卡交易。两个完全不相关的检查。来自第一个的数据集将包含客户编号,预定付款日期,支付日期等内容。第二个检查将包括交易号,卡类型,卡的最后4位数,金额等。
我想将结果数据集存储在一个公共模式中,以便在过去3个月内查询特定客户的Check A中的任何错误。或者,Check B为不同的事务返回了多少次错误。其他表也可以管理问题解决等。到目前为止,我唯一想到的是一个包含~20列的表,一列与特定检查相关,一列用于日期/时间,剩下的将是某种形式的varchar,能够保存任何类型的数据。这有很多原因让我感到畏缩,但是那里的表现相当高。我希望为每个检查避免使用单独的表,但将其与查找表结合使用可能是唯一的方法。
对于好奇的我试图将其保留在Microsoft世界(VB.NET和SQL Server)中,但我对其他想法持开放态度。
答案 0 :(得分:2)
您可以将这些~20列拉出到一个标准化的“值”表中。 您可以拥有一个查找表,该表与每个检查类型的预期字段相结合。
说明我的建议:
<强> check_datasets 强>
dataset_id
(PK)check_id
(这将是失败的支票的ID)datetime
<强> value_types 强>
value_type_id
(PK)name
<强> dataset_value_types 强>
value_type_id
(FK,PK)dataset_id
(FK,PK)<强> dataset_values 强>
dataset_id
(FK,PK)value_type_id
(FK,PK)value
(此列代表数据的值)所以在上面的表中解释一下:
check_datasets
是保存每次失败检查的表(我假设您只记录失败的检查 - 否则,您可能想要添加通过/成功标记到这张表)。value_types
是一个简单的查找表,用于提供值字段的名称。dataset_value_types
用于定义哪些检查具有哪些类型的值字段(这是check_datasets
表和value_types
之间的多对多关系) dataset_values
是保存每项支票的具体值的表格。此设计提供了一种标准化且简便的方法,可以查询返回的每个“数据集”所需的每个值。
此设计的缺点是您在一个字段(value
)中仍然具有混合数据类型。
如果要分隔数据类型,可以将 dataset_values
子类型分为单独的表(即:一个表用于整数值,一个用于varchars,LOB等)。
在上面的示例中,这意味着要为数据类型创建所需数量的子表(例如:dataset_values_int
,dataset_values_text
等)。每个子表只需要有两列 - 一列保存值,第二列引用父表。
(1)dataset_values
将成为父表,可能看起来像这样:
<强> dataset_values 强>
dataset_value_id
(PK)dataset_id
(FK)value_type_id
(FK)datatype
(此值是整数,varchar等。此列告诉您要检查哪个子表的表)(2)示例子表将是:
<强> dataset_values_varchar 强>
dataset_value_id
(PK,FK)value
(在此表中,这将是一个varchar - 但对于其他子表会有所不同。)答案 1 :(得分:0)
Hmmmm。只是在这里集思广益。你真的需要存储检查数据吗?或者只是一个能够查找它的参考?如何存储检查类型的表,然后是存储chekc id的相关表,检查类型,检查日期以及您可能需要的任何其他数据。然后是另一个相关表,用于存储检查失败的记录的检查ID和记录ID。
另一种方法是我们如何存储我们的审计表数据,一个varchar(实际数据的最大值)列,它表示它所属的列(在您的情况下,它所属的表可能是一个单独的列)然后将其与已执行的检查相关联的列。
如果您确实认为必须将数据存储在一条记录中,则可能是存储xml文档的位置。