2

背景:今天,在使用 SQL Server Reporting Services 时出现了一个问题。报告查看器中的 SSRS 下拉参数似乎不允许您指示(空)选项,以便您可以看到该参数为空的报告。基本上,表 A 是一个可空引用表 B 的表;由于报告使用表 B 填充下拉列表,因此没有可显示为选项的空值,因此您无法选择所有具有空值 B 的 A。

我真正的问题来自我正在回答的管理类型对上述问题的潜在下意识反应。当我解释发生了什么时,她发布了一项新的要求,即所有外键都必须是非空的,并且每个实体都应该插入一个“默认”记录,这是一个新标准,似乎可以解决报告工具中的这个问题。基本上,如果你有一个 Cat 表,那么 Cat.Owner 永远不应该为空,而是应该引用 Person 表中的默认记录,即“默认”Person。

虽然这可能有助于解决 SSRS 问题,但它可能会损害使用数据库的服务和应用程序的开发/维护,因为它们现在不仅要考虑空值(此时允许),而且还要查找并正确使用“默认”记录。我曾想过试图说服她放弃这项任务,但在我决定这样做之前,我想从有经验的人那里收集一些信息。

有人可以权衡一下这可能会有所帮助或伤害吗?

有人将其作为数据库标准吗?任何问题,发展或其他方面,我应该注意吗?

4

2 回答 2

2

NULL 字段意味着没有价值

因此,用 NULL 填充缺失的关系是合乎逻辑且正确的。

有时,在某些特殊情况下,我已经看到使用问题中描述的默认记录。但那是一个“特殊情况”,并且是“有时”使用的。

恕我直言,将这一政策作为数据库开发标准是愚蠢的、不正确的和潜在的危险。我不会冒险冒险由这样的设计引起的所有可能的复杂性:我想你已经想象到这意味着什么。

于 2009-11-18T23:59:12.290 回答
0

同时,如果 CAT 是 OWNED_CAT,那么它必须有一个 PERSON 作为所有者,如果它被遗弃,它不应该在该表中。

但是,如果 CAT 是 ANY_CAT(有/无所有者),则该废弃的 CAT 不应与任何 PERSON 相关联。

对我来说,为了报告而在 PERSON 表中创建一个虚拟或默认记录确实具有商业意义(对您的经理而言),但我对此并不觉得“正确”。

不能给你太多,只有我的 2 美分。

于 2009-11-19T00:01:38.830 回答