我以为我了解范式
I thought I understood Normal Forms
我正在在线学习 Web 开发文凭,我刚刚进入数据库设计和开发领域。我以为我了解范式,但我刚遇到一个问题让我停了下来。
Look at the following list of attributes for the customer entity:
Customer(cus_ID, name, address, mobile_phone)
Why is this entity not in 3NF?
据我所知,它在 3NF 中是。如果不是客户,所有属性都不会存在,名称、地址和移动数据集需要客户存在。
我是不是把 3NF 的整个概念都弄错了?
多个客户可以有相同的地址。
一开始看起来很奇怪,但是您还没有定义地址甚至 ID 中的内容。我想到的一些违反 3NF 的可能性是(除了您可能在此处获得的其他评论和答案之外):
如果id是手机phone号码本身。
如果客户有不止一个手机phone或企业有兴趣获取的不止一个地址Source of this point。
如果地址包含一些通讯方式,包括手机 phone。
如果移动phone号码能以某种方式在用户之间流通。例如,号码可能不必在 countries/carriers 中是唯一的(我不是电信专家)。
如果地址包含国家、城市和州信息,并且手机 phone 号码允许包含区号作为其中的一部分(这取决于国家、城市和州信息).
编辑:
我最初包括这一点,但@philipxy 在下面的注释中提出了不同的建议:
"If any of the attributes are found in other parts of the database not shown here."
从某种角度来看,这个 table 不符合第三范式,因为它不是第一范式。 "Mobile"phone?可能还有哪些其他类型的 phone? "Address" ?哪个地址——家里、公司、游艇停靠的地方等等?姓名 - 姓名的子字段是什么(名字、中间名、姓氏 - 哦,那里是否也有诸如 Dr. 或 Mr. 或 Herr Doktor Ingeneur 之类的头衔?)?
之前给出的每个答案都会对您的数据的含义做出假设。但是要知道一个模式是否在 3NF 中,唯一正确的答案是:"Show me the functional dependencies of the schema, and then I can proof if the schema is in 3NF or not"。这是因为 3FN 是一个正式概念,在正式语境中 仅 有意义。
所以也许应该以不同的方式提出问题:
Given this schema, under realistic hypotheses, which are the functional dependencies?
然后从这些函数依赖关系中,人们可以知道,而不是推测一个范式。
所以,在我看来,一门没有人教你什么是函数依赖,并问你某个关系是否符合 3NF 的课程,不是一门好课程。
我正在在线学习 Web 开发文凭,我刚刚进入数据库设计和开发领域。我以为我了解范式,但我刚遇到一个问题让我停了下来。
Look at the following list of attributes for the customer entity:
Customer(cus_ID, name, address, mobile_phone)
Why is this entity not in 3NF?
据我所知,它在 3NF 中是。如果不是客户,所有属性都不会存在,名称、地址和移动数据集需要客户存在。
我是不是把 3NF 的整个概念都弄错了?
多个客户可以有相同的地址。
一开始看起来很奇怪,但是您还没有定义地址甚至 ID 中的内容。我想到的一些违反 3NF 的可能性是(除了您可能在此处获得的其他评论和答案之外):
如果id是手机phone号码本身。
如果客户有不止一个手机phone或企业有兴趣获取的不止一个地址Source of this point。
如果地址包含一些通讯方式,包括手机 phone。
如果移动phone号码能以某种方式在用户之间流通。例如,号码可能不必在 countries/carriers 中是唯一的(我不是电信专家)。
如果地址包含国家、城市和州信息,并且手机 phone 号码允许包含区号作为其中的一部分(这取决于国家、城市和州信息).
编辑: 我最初包括这一点,但@philipxy 在下面的注释中提出了不同的建议: "If any of the attributes are found in other parts of the database not shown here."
从某种角度来看,这个 table 不符合第三范式,因为它不是第一范式。 "Mobile"phone?可能还有哪些其他类型的 phone? "Address" ?哪个地址——家里、公司、游艇停靠的地方等等?姓名 - 姓名的子字段是什么(名字、中间名、姓氏 - 哦,那里是否也有诸如 Dr. 或 Mr. 或 Herr Doktor Ingeneur 之类的头衔?)?
之前给出的每个答案都会对您的数据的含义做出假设。但是要知道一个模式是否在 3NF 中,唯一正确的答案是:"Show me the functional dependencies of the schema, and then I can proof if the schema is in 3NF or not"。这是因为 3FN 是一个正式概念,在正式语境中 仅 有意义。
所以也许应该以不同的方式提出问题:
Given this schema, under realistic hypotheses, which are the functional dependencies?
然后从这些函数依赖关系中,人们可以知道,而不是推测一个范式。
所以,在我看来,一门没有人教你什么是函数依赖,并问你某个关系是否符合 3NF 的课程,不是一门好课程。