我正在网上学习网络开发文凭,我刚刚进入数据库设计和开发。我以为我理解了普通形式,但我刚刚达成了一个让我陷入困境的问题。
查看以下客户实体的属性列表:
Customer(cus_ID, name, address, mobile_phone)
为什么这个实体不在3NF?
据我所知,在3NF中是。如果不是客户,名称,地址和移动数据集要求客户存在,那么所有属性都不会存在。
我是否只是错误地了解了3NF的整个概念?
答案 0 :(得分:5)
一开始看起来很奇怪,但你还没有定义地址甚至是id。这可能会导致一些违反3NF的可能性(除了您可能会在此处获得的其他评论和答案):
如果id是手机号码本身。
如果客户有多个移动电话或多个地址,企业有兴趣捕获Source of this point。
如果地址包含一些通讯方式,包括手机。
如果手机号码可以以某种方式在用户之间传播。例如,这些数字可能不必在国家/运营商之间是唯一的(我不是电信专家)。
如果地址包含国家/地区,则允许城市和州的信息和手机号码包含区号作为其中的一部分(这取决于国家,城市和州的信息)。
编辑: 我最初包含了这一点,但@philipxy在下面的注释中另有说明: "如果在此处未显示的数据库的其他部分中找到任何属性。"
答案 1 :(得分:2)
多个客户可以拥有相同的地址。
答案 2 :(得分:0)
从某个角度来看,这张表并不符合第三范式,因为它不是第一范式。 "移动"电话?还有哪些其他类型的手机? "地址" ?哪个地址 - 家庭,商业,游艇停靠在哪里等?姓名 - 名字的子领域是什么(第一,中,最后 - 哦,是否有像Dr.或Mr.先生或Herr Doktor Ingeneur这样的头衔?)?
答案 3 :(得分:0)
之前给出的每个答案都对数据的含义做出了假设。但要知道3NF中是否存在模式,唯一正确的答案是:“向我展示模式的功能依赖性,然后我可以证明如果模式是否在3NF中”。这是因为3FN是一个正式的概念,并且在正式的上下文中只有 。
所以也许问题应该以不同的方式提出:
鉴于这种模式,在现实假设下,哪些是功能依赖?
然后从这些功能依赖项中,可以知道,而不是推测通过正常形式。
所以,在我看来,没有人教你什么是功能依赖,并且问你某个关系是否在3NF,这不是一个好的课程。