【问题标题】:Can one attribute in the functional dependency be null?函数依赖中的一个属性可以为空吗?
【发布时间】:2015-01-16 09:55:38
【问题描述】:

我在书店有一组函数依赖 F, R = {cid, cname, bid, name,rentdate, returndate, cost},只有一张表。

此人的客户 ID、bookid、书名、租借和归还日期。

显然,这不是 BCNF

但是如何为此识别非平凡函数依赖的 F 呢?

在我看来:

cid -> cname

出价 -> bname

出价,租用日期 -> 归还日期,cid

这样好吗?在最后一个函数依赖中,我认为每个订单,在特定时间租一本书,将具有唯一的归还日期,并且只属于一个人

但我也对这个函数依赖感到困惑,因为在这个表中,rentdate和returndate也可以设置为null!!!

这样,

出价,租用日期 -> 归还日期,cid

正确吗?

【问题讨论】:

  • “rentdate”或“returndate”可以为空没有任何意义。如果有人借书(或租书,或订购书,不管你是什么意思),那么你就知道发生在哪一天。
  • @MikeSherrill'CatRecall' 事实证明,如果你对图书馆员眨眼,他们don't need no stinkin' 会返回日期。
  • 重新查找 FD 参见 this recent answer。重新“出价,出租日期->返回日期,cid”,在任何时候,给定一本书和一个出租日期,是否只有一个客户和一个返回日期? (问:一天可以租两次书吗?)

标签: database-design database-schema functional-dependencies bcnf


【解决方案1】:

Codd 会简单地将具有空值的元组从函数依赖项的应用程序中排除。据我所知,使用 Codd 的 3 值逻辑,在纯 SQL 中没有自洽的方式来处理函数依赖。

因此,我希望大多数人会告诉您避免使用空值。显然,这并不总是作为一个实用的建议而被接受。

如果您有兴趣,已经有关于该主题的学术工作。我们有一篇论文专门讨论了这个问题:

Antonia Badia 和 Daniel Lemire,具有 null 的函数依赖关系 标记,计算机杂志计算机杂志 (2015) 58 (5): 1160-1168。 http://arxiv.org/abs/1404.4963

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2017-09-24
    • 2011-11-02
    • 2015-11-16
    • 2014-02-04
    相关资源
    最近更新 更多