1

我目前将在 vb.net 中设计一个应用程序来使用访问后端数据库。我一直在想办法减少数据冗余,下面有一个示例场景:

让我们想象一下,出于示例目的,我有一个客户表,需要突出显示 WI 中的所有客户并向他们发送一封信。客户表将包含与客户关联的所有客户和属性(姓名、地址等),因此我们将查询表中状态为“WI”的位置。然后我们将获取该数据的结果,并将其附加到带有“完成”指示符的表中(因此从“CUSTOMERS”到“WI_LETTERS”表)。

让我们假设需要进行一些处理,因此当其完成时,将该表中的一个字段标记为“完成”,然后允许使用邮件合并打印字母。(从 'WI_LETTERS' 中选择,其中 INDICATOR = 完成)。

该项目现已完成并完成。但是可以说,每隔一个奇数年(2013 年),我们也会向表中的每个人发送一个通知,状态为“WI”。我们现在在年份为奇数且客户状态为“WI”时查询客户表。然后将该数据附加到一个名为“通知”的表中,并带有完成指示符,并将其标记为完成。

这似乎使数据保持“基于任务”,因为数据仅基于手头的任务。但是,这不被认为是冗余数据吗?这种设置意味着许多账户可以有一种交易类型(甚至年复一年地多次到同一个账户),但它不应该是一个账户对许多交易吗?
这个设计如何变得更好?

4

1 回答 1

1
  1. 您当然不想开始为您执行的每个单独任务创建新表。如果您需要跟踪的信息(以及这些表中的列)在不同类型的任务之间会有很大差异,您可能希望为不同类型的任务创建几个不同的表,但这些表应该用于所有任务那个特定的类型。您可以在这些表中维护一个字段,以标识每条记录适用的单个任务(例如,[campaign_id] 用于营销活动邮寄,或 [mail_batch_id] 或类似的)。

  2. 绝对不想开始创建像 [WI_letters] 这样按状态(或任何客户端属性)隔离的新表。您已经在 [Customers] 表中拥有客户的状态,因此您在 [Letters] 表中需要的唯一与客户相关的属性是 [CustomerID]。如果您经常想查看威斯康星州客户的信件列表,那么您可以随时创建一个名为 [WI_Letters]的已保存文件Query(在其他数据库系统中通常称为 a ),如下所示View

    SELECT * FROM Letters INNER JOIN Customers ON Customers.CustomerID=Letters.CustomerID WHERE Customers.State="WI"

于 2013-05-28T13:15:53.483 回答