1

根据我在这里找到的讨论:数据库:删除或不删除记录,我想特别关注参考数据,对此添加一些想法,并询问您的一般首选方法,或者基于您的标准决定您采用哪种方法。

让我们为客户的“请求数据库”假设以下数据结构,而请求可以通过各种渠道(电话、邮件、传真……;我们的“我主要关注的参考数据表”)传递:

Request (ID, Text, Channel_ID)
Channel(ID, Description)

首先,让我们假设这两个表中有以下数据:

要求:

ID    | Text                                         | Channel_ID
===============================================================  
1     | How much is product A currently?             | 1 
2     | What about my inquiry from 2011/02/13?       | 1
3     | Did you receive my payment from 2011/03/04?  | 2

渠道:

ID    | Description
===============================================================  
1     | Phone
2     | Mail
3     | Fax

那么,假设以下要求,你如何解决这个问题:

  1. 频道可能会随着时间而改变。这意味着:他们的描述可能会改变。可以添加新的,仅从某些特定数据开始有效。频道可能会失效(在某个特定日期之前)

  2. 出于报告和监控的目的,可能需要确定最初是使用哪个渠道提交请求的。

  3. 对于新请求,应该只允许当前“有效”的通道,而对于预先存在的请求,也应该允许在该特定日期有效的通道。

在我的理解中,这显然需要一种超越删除标志的更丰富的失效方法,可能是结合了参考数据表的“ValidFrom / ValidTo”方法。

另一方面,这在请求的数据捕获过程中会遇到一些困难,因为对于新请求,您只显示它们当前可用的通道,而对于维护先前存在的通道,需要在创建此记录时所有可用的通道显示。这不仅从开发的角度来看很复杂,而且对用户来说也可能是不直观的。

您通常如何为随着时间的推移可能出现的参考数据设置数据模型?那你如何创建你的用户界面呢?对于正确的数据库设计,您还考虑了哪些其他参数?

4

1 回答 1

1

在这种情况下,我通常会创建另一个表,例如,channel_versions它复制所有字段channel并具有额外的create_date列(当然它是自己的 PK)。因为channel我在插入/更新触发器之后定义了将新值复制到channel_versions. 现在来自 table 的所有请求都Request引用来自channel_versions. 对于新请求,您需要从 获取最新版本的频道channel_versions。对于旧请求,您始终知道请求完成时通道的外观。

于 2011-03-20T15:26:35.447 回答