SQL表OR字段

时间:2015-02-24 21:00:18

标签: mysql database-design

我有一个概念性的问题。

我的数据库有一个存储有关人员信息的表。其中一个字段是他们的电话号码(我国的8位数字)。

事情是,在某些情况下,两个或更多人将拥有相同的电话号码。

我的问题是:将电话号码存储在另一个表格中然后用外键引用它而不是仅仅将它们存储为字段是更好的选择吗?如果是这样,结果是否相同无论是什么DB的大小是?

我不知道这是否会产生任何影响,但该表的记录不会超过600.000 - 800.000,而且我猜这些重合的电话号码将占总记录的10%左右。

编辑:

- 每个记录最多可包含4个电话号码(两行和两个单元格)

- 两种情况都会发生,有时用户会在寻找具有特定号码的所有人,以及用户想知道一个人拥有的所有电话号码的时间

4 个答案:

答案 0 :(得分:1)

如果您每人拥有超过1个电话号码

有一个很好的理由设置新表: id, user_id, phone, type, description

所以type可以列出 家庭,工作,办公室2,老板,妻子,传真,手机等......

description喜欢 "仅限工作时间","晚上"," 24x7","仅限紧急情况"等

如果您确实为您的应用程序管理电话簿,那么最好将电话号码与原始用户表分开。

答案 1 :(得分:1)

从技术上讲,要进行规范化,您将拥有一个单独的电话号码表,然后是一个PersonPhonenumber表。

然而,在实践中,我很少看到这种电话号码和地址的结构。首先,当你只想改变一个人时,很容易犯错并更新一个人的地址或电话。另一方面,它增加了一个对大多数人来说似乎无需的额外连接。除了少量重复之外,你不是通过这个级别获得很多收益。

真正的决定因素是您将如何使用和更新数字。如果您想要经常更新所有具有相同号码的人,最好进行完全标准化。如果您通常只想一次更新一个人,那么只有一个Person表和一个PersonPhone Number表可能风险较小。

如果你想要历史,那么我会选择一个人表和一个PeronPhoneNumber历史表。它会有人格,电话号码,开始日期和结束日期。因此,当约翰和玛丽离婚时,他的电话号码会有一个结束日期,但她的电话号码没有,你可以清楚地看到谁有这个号码。

答案 2 :(得分:0)

通常电话号码只是一个号码,没有人没有意义。 所以你将它存储在Person表中。

但是你工作的电话公司的电话号码具有不同的含义和用法(如历史,电话查询,账单),那么它应该存储在一个单独的表中。我希望它有所帮助。

答案 3 :(得分:0)

如果您有两个人使用相同的电话号码,则在搜索特定电话号码时会遇到问题。搜索特定电话号码有时会返回多个结果(根据您的估计,为10%)。如果您按电话号码和人员搜索,则可以要求所有搜索电话号码以包含用户标识符(名字,姓氏,位置等)。这取决于你的目标是什么。