在DB中存储电话号码

时间:2012-07-22 08:19:44

标签: sql optimization storage database

在接受采访时,我不得不为每位员工存储多个电话号码。我回答说我们可以用逗号分隔数字串。接下来的问题是如果字符串的大小变得非常长(假设假设有1000个数字)。想出一个更好的解决方案。我一无所知。有人可以建议解决这个问题的正确方法..

编辑:我的确建议我们将列数冻结为一些最大数量,并根据需要插入aas但在大多数情况下会导致很多NULL值,因此这将是一个糟糕的设计。

编辑:我只是想知道他们是否确实存在其他解决此问题的方法,除了添加一个新表,如下面的评论之一(我确实作为答案)所示。 BTW是采访者的一些伎俩还是其他解决方案确实存在?

3 个答案:

答案 0 :(得分:5)

简单的1:n-Relation怎么样?为这样的电话号码创建一个单独的表:

Phone_Numbers(id, employee_id, phone_number_type, phone_number)

通过这种方式,您可以为每位员工添加数千个电话号码,而不会出现问题。

一般情况下:在数据库字段中存储以逗号分隔的内容是永远一个好主意。你应该阅读Database Normalization。通常3NF是一个很好的折衷方案

答案 1 :(得分:1)

此处电话号码是多值属性。您可以使用逗号分隔值并将上限和下限设置为多值属性以便有意义,但是当您的采访者要求输入1000个数字条目时,最好为表提供原子性并为每个电话创建一个新行数。这将增加行数。然后,您可以执行规范化。这是一个多值依赖的情况,所以你必须要到4NF来解决这个问题。

答案 2 :(得分:0)

你说你想把长字符串存储到DB中,我认为DB不能是reational DB,它可以是nosql db而不是。如果字符串很长,您可以选择存储每个数字的差异,而不是完全存储每个数字。我认为这种方式可以节省磁盘空间。 例如。如果你想存储12345,12346,12347,12358     你可以存储12345,1,2,3