【问题标题】:Null value vs a special, predefined empty value空值与特殊的预定义空值
【发布时间】:2014-03-23 17:49:09
【问题描述】:

我有一个表myTable 有一个外键,假设它叫做credential_id。大多数情况下,经过身份验证的用户通过执行某些操作来使用它,因此credential_id 指向某个值(当将一行插入myTable 时,credential_id 具有 一个值)。

但是,我想允许匿名(未经过身份验证或访客)用户也执行一些涉及此表的操作。由于它们没有经过身份验证,credential_id 不能有任何价值。

我想知道,有什么更好的方法:允许credential_id 使用空值,或者为匿名用户创建一个特殊帐户并在用户未通过身份验证时使用它?这个问题在某种程度上是关于所谓的空模式,但关于数据库。

【问题讨论】:

  • 我认为特殊帐户更好,因为它明确说明了您要做什么。
  • 如果您有任何相关数据存储在凭据表或匿名用户的硬代码中,那么存储它是有意义的。除非您没有任何类似的值/数据 - 基本上您不会对匿名用户做任何其他事情,否则没有额外的条目和指向它的值是不值得的。然而,第一种情况更有可能
  • 顺便提一下,与数据库设计相关的这些问题可以在 dba.stackexchange.com 上得到更详细的解决。

标签: sql database design-patterns database-design schema


【解决方案1】:

此类记录通常用于数据仓库,因为 NULL 值通常是不明确的。最好为各种异常情况创建虚拟记录,以消除这种歧义。在您的情况下,某种“来宾”凭据将是非常合适的。

也就是说,如果您认为这是操作没有凭据的唯一原因,那么使用 NULL 值也可以。它相当直观:此操作没有任何凭据,但确实发生了,我猜用户不需要进行身份验证。

您需要权衡实施访客凭证的(适度)成本与使用 NULL 值造成混淆的可能性。

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 2017-01-14
    • 1970-01-01
    • 2022-01-16
    • 2021-04-24
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多