【发布时间】:2014-08-28 18:48:44
【问题描述】:
好吧好吧,我知道你们可能会因为问这个问题而杀了我,但是我与一位同事就我们的一个数据库表进行了友好的程序员争论,他问了一个我知道答案的问题,但我无法解释这是更好的方法。
为了问题的简单性,我将简化情况,我们有一个相当大的人员/用户表。现在在存储的其他数据中,有问题的数据如下:我们有一个 simNumber、cellNumber 和该 sim 的 ipAddress。
现在我说我们应该创建一个表,我们将其命名为 SimTable 并将这 3 个条目放入 sim 表中,然后将 FK 放入连接两者的 UsersTable 中。为什么?因为这就是我一直被教导的 标准化你的桌子!!!好的,在这方面一切都很好。
但是现在我的朋友对我说是的,但是现在当你想查询用户的电话号码时,现在必须执行 SQL 并且:
- 搜索用户
- 搜索 sim fk
- 在 sim 数据库中搜索正确的 sim 行
- 获取电话号码
现在,当我去请求 10000 个用户电话号码时,完成的操作数量会大大增加。
与其他方法相比
- 搜索用户
- 找到电话号码
现在这个论点纯粹是基于性能的。据我所知,我们为什么要对数据进行规范化(以删除冗余数据、可维护性、对一张表中的数据进行更改以向上传播等。)在我看来,在一张表中使用数据的方法会更快或者至少会减少任务/操作来给我想要的数据?
那么在这种情况下是什么情况呢?我真的希望我没有问任何疯狂愚蠢的事情,现在是清晨,如果我没有想清楚,请原谅我
MS SQL server 2012涉及的技术
[编辑] 下面这篇文章还涉及到我上面提到的一些概念 http://databases.about.com/od/specificproducts/a/Should-I-Normalize-My-Database.htm
【问题讨论】:
-
如果您假装每个人实际上都拥有相同的电话号码并且甚至不费心存储它,您可以获得更好的性能。快速和错误很容易。
-
如果你规范化的唯一原因是你被教导总是规范化,那么难怪你不知如何说服同事,尤其是程序员。每种归一化形式(1NF、2NF、3NF、BCNF、4NF、5NF...)一旦被发现就受到青睐,这是有原因的。最终标准化和其他一些设计之间也存在权衡。一旦您了解了权衡取舍,您就可以更好地为您的设计提出理由。
标签: sql sql-server database database-design normalization