Database design 函数依赖项中的一个属性是否可以为null?

Database design 函数依赖项中的一个属性是否可以为null?,database-design,database-schema,functional-dependencies,bcnf,Database Design,Database Schema,Functional Dependencies,Bcnf,我有一组函数依赖项F,R={cid,cname,bid,name,rentdate,returndate,cost}在书店中,只有一个表 客户ID、图书ID、书名、租金和归还日期 显然,这不是BCNF 但是,如何识别非平凡函数依赖的F 我认为: cid->cname 投标->bname 投标,租赁日期->归还日期,cid 可以吗?在最后一个函数依赖项中,我认为每个订单(在特定时间租用一本书)都有唯一的归还日期,并且只属于一个人 但是我也对这个函数依赖项感到困惑,因为在这个表中,rentdate和

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

客户ID、图书ID、书名、租金和归还日期

显然,这不是BCNF

但是,如何识别非平凡函数依赖的F

我认为:

cid->cname

投标->bname

投标,租赁日期->归还日期,cid

可以吗?在最后一个函数依赖项中,我认为每个订单(在特定时间租用一本书)都有唯一的归还日期,并且只属于一个人

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

通过这种方式

投标,租赁日期->归还日期,cid


正确吗?

Codd只会从函数依赖项的应用程序中排除带有null的元组。据我所知,使用Codd的3值逻辑,在纯SQL中没有自一致的方法来处理函数依赖关系

因此,我希望大多数人告诉你避免空值。显然,这并不总是被认为是一项实际有用的建议

如果你感兴趣的话,已经有关于这个主题的学术研究了。我们有一份文件涉及这一问题:

Antonia Badia和Daniel Lemire,函数依赖项为null markers,《计算机杂志》计算机杂志(2015)58(5):1160-1168


“rentdate”或“returndate”可为空没有任何意义。如果有人借了一本书(或者租了一本书,或者订了一本书,不管你是什么意思),那么你就知道发生的日期了。@MikeSherrill'CatRecall'发现,如果你向图书管理员眨眼,他们往往会退回日期。你会发现FDs看到了。Re“bid,rentdate->returndate,cid”,在任何时候,给定一本书和一个rentdate,是否只有一个客户和一个退货日期?(问:一本书一天能租两次吗?)