【发布时间】:2012-08-16 21:08:28
【问题描述】:
假设我们有一个包含所有国家/地区代码的代码列表。国家代码是国家表的主键,它在数据库的许多地方用作外键。在我的应用程序中,国家通常在多个表单上显示为下拉菜单。
过去存在的一些国家现在已经不存在了,例如Serbia and Montenegro,其国家代码为SCG。
我有两个目标:
- 不允许用户使用这些旧值(因此在插入数据时这些值不应在下拉列表中可见)
- 用户应该仍然能够(只读)打开旧的东西,在这种情况下,不推荐使用的值应该在下拉列表中可见。
我看到两个选项:
- 重命名不推荐使用的值,例如从“CountryName”改为“!!!!!CountryName”。这种方法最容易实施,但缺点也很明显。
- 将 IsActive 列添加到 Country 表,并将所有不推荐使用的值设置为 false,将所有其他值设置为 true。在用户可以插入数据的所有表单上,仅显示活动值。在只读表单上,我们可以显示所有值(包括已弃用的值),以便用户能够显示旧数据。但是在我的一些表单上,用户应该也可以编辑数据,这意味着不推荐使用的值应该对他隐藏。这意味着,每个 Dropbox 都应该有一些这样的初始化逻辑:如果显示的数据是只读的,则在 Dropbox 中包含不推荐使用的值,如果数据也用于编辑,则排除它们。但这也需要大量的工作并且容易出错。
还有其他想法?
【问题讨论】:
-
这是一个时态数据库。添加 valid_from 和 valid_to 字段。如果 valid_to 为 null,则它处于活动状态。
标签: c# .net vb.net database-design