正常化一个人的名字走得太远了吗?

时间:2009-04-23 16:35:45

标签: database normalization

您通常会规范化数据库以避免数据冗余。在一个充满名称的表格中很容易看到有足够的冗余。如果你的目标是创建一个地球上每个人的名字目录(祝你好运),我可以看到规范化名称是如何有益的。但是在普通商业数据库的背景下是否过度了?

(当然我知道你可以采取任何极端的事情...如果你将音节标准化为音节......甚至是相邻的角色对。我看不到走得那么远的好处。

更新

一个可能的理由是随机名称生成器。这就是我能想到的一切。

19 个答案:

答案 0 :(得分:53)

是的,这太过分了。

人们不会同时将他们的名字从Bill更改为Joe

答案 1 :(得分:35)

数据库规范化通常是指对字段进行规范化,而不是对其内容进行规范化。换句话说,您将规范化数据库中只有一个名字字段。这通常是值得的。但是,数据内容不应该被标准化,因为它对于那个人来说是个体的 - 你不是从列表中挑选,而是在一个地方不改变列表以影响每个人 - 这将是一个错误,而不是一个特征。 / p>

答案 2 :(得分:5)

如何规范名称?并非所有名称都具有相同的结构。并非所有国家/地区或文化都对名称使用相同的规则。名字不一定只是名字。人们有不同数量的名字。有些国家/地区没有简单的名字/姓氏对。如果我的名字恰好是您的姓,如果您的数据库中的它们被认为相同,该怎么办?如果没有,那么你会遇到一个问题,即姓氏可能意味着不同国家的不同事物。在我所知道的大多数国家,这是一个姓氏。您的姓氏与您父母的姓氏至少相同。在冰岛,这是你父亲的名字,其次是“儿子”或“女儿”。所以相同的姓氏将意味着完全不同的事情取决于你是否在冰岛和美国遇到它。

在某些文化中,结婚时这种情况很常见,因为女人可以取其丈夫的姓氏。在其他文化中,这完全是可选的,或者甚至可能以相反的方式工作。

你怎么能正常化这个?它会给你带来什么信息?如果您在数据库中发现某人将“史密斯”作为构成其姓名的最后一个词,那会告诉您什么?这可能不是他们的姓氏。它可能只是姓氏的 part 。它可能是某种语言的荣誉,但根据其文化,它应该被视为名称的一部分。

如果数据遵循通用结构,则只能对数据进行标准化。

答案 3 :(得分:2)

是的,肯定是矫枉过正的。朋友之间几十个字节是什么?

答案 4 :(得分:2)

也许如果你在人口普查办公室工作,可能会有意义。否则,请参阅其他答案:)

答案 5 :(得分:1)

如果您需要根据小名称执行查询,我可能会发现需要对名称进行规范化。例如搜索“贝蒂”可能需要返回“贝蒂”,“贝丝”和“伊丽莎白”的结果

答案 6 :(得分:1)

我会说是的,在95%以上的情况下,它太过分了。

答案 7 :(得分:1)

您通常不会在数据库中查看第四种形式规范化。因此,第七种形式的标准化有点过分。 这个地方甚至可能是一个有点可信的想法,在某种大型数据仓库中。

答案 8 :(得分:1)

不,但您可能希望规范化为客户的规范记录(因此您不会在数据库中为“Bloggs& Co.”获得5个不同的条目。这是一个经常咬人的数据清理问题MIS项目。

答案 9 :(得分:1)

是。我想不出一个好处超过问题和查询复杂性的实例。

答案 10 :(得分:1)

一般是的。归一化到那个水平将会走得很远。根据查询(例如通过姓氏搜索的电话簿),这可能是值得的。我希望这很少见。

答案 11 :(得分:0)

是的,确实如此。人们普遍认为,仅应用所有规范化规则可能会导致您走得太远并最终导致数据过于规范化。例如,可以将每个字符的每个实例标准化为对字符枚举表的引用。很容易看出那太荒谬了。

需要在适合您的问题域的级别执行规范化。非正常化与欠正常化一样是一个问题(当然,出于不同的原因)。

答案 12 :(得分:0)

我会说这绝对是矫枉过正的。在大多数应用程序中,您经常显示这些人的名字,所涉及的每个查询看起来都会更加复杂和难以阅读。

答案 13 :(得分:0)

我通常没有看到需要对名称进行规范化,主要是因为这会在连接中添加一个性能命中,并且不会给出任何好处。

如果你有这么多相似的名字,并且存在存储问题,那么它可能是值得的,但是会有一个性能损失需要考虑。

答案 14 :(得分:0)

可能存在能够链接已婚/婚前姓名的情况 最近有一个案例,我不得不重新命名成千上万的电子邮件,因为有人离婚,并且不希望任何电子邮件列出她为married_name@company.com

答案 15 :(得分:0)

除非名称构成复合主键并且您拥有依赖于其中一个名称的数据(例如,任何姓Plummer对数据库一无所知),否则无需规范化到该级别。在这种情况下,如果不进行规范化,则会违反second normal form

答案 16 :(得分:0)

我同意一般的回应,你不会这样做。

但有一件事是我想到的,压缩。如果你有十亿人并且你发现60%的名字来自5个非常常见的名字,你可以使用一些棘手的位操作来非常显着地减小尺寸。它还需要非常自定义的数据库软件。

但这不是为了规范化,而是为了压缩。

答案 17 :(得分:0)

如果您需要避免删除异常,请将其标准化。也就是说,如果您需要回答这个问题,我的数据库中是否有一个名为“Joejimbobjake”的人,您需要避免异常。软删除可能比拥有一个全面的名字表(例如)更好,但你明白我的观点。

答案 18 :(得分:0)

除了其他人所做的所有要点之外,请考虑如果您正在实施数据输入操作(例如),并且要插入新的联系人,则必须搜索您的名字和姓氏表到找到正确的Id,然后使用这些值。但是,当名称不在FN和/或LN表上时,这会更加复杂,那么您必须插入新的名/姓并使用新的ID。

如果您认为自己有完整的名单,请再想一想。我使用了超过20万个独特名字的名单,我猜它占美国人口的99.9%。但那个.1%=很多人。不要忘记外国名字和拼写错误...