2012-07-22 57 views
0

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

编辑:我确实建议我们冻结列的数量作为一些最大数量和插入aas每个需求,但它会导致在大多数情况下,许多NULL值那会是一个糟糕的设计。

编辑:我只是想知道,如果他们确实存在解决不是添加新表中的下面的评论一个(我没告诉作为一个答案)建议其他这个问题的一些其他方式。 顺便说一句,这是面试官的一些诀窍还是另一种解决方案实际存在?

回答

5

怎么样一个简单的1:N-关系?像这样的电话号码创建一个单独的表:

Phone_Numbers(id, employee_id, phone_number_type, phone_number) 

这样就可以增加数千个电话号码的每一个员工,而不是有问题。

一般来说:它是从来没有一个好主意,在数据库字段中存储逗号分隔的任何东西。你应该阅读Database Normalization。通常情况下,3NF是一个很好的妥协去

+0

除了创建另一个表格之外,还有其他的方式吗? – Bala 2012-07-22 13:24:06

+0

没有办法使得任何意义... – klaustopher 2012-07-22 13:36:11

+0

原因即时通讯问这是面试官告诉它是一些数据挖掘问题通常面临。根据你的建议,我确实告诉过使用新桌子,但他说想到别的。这就是为什么我提出这个问题。 – Bala 2012-07-22 17:25:56

0

你说你想存储长字符串到数据库,我觉得DB不能reational DB,也可以是NoSQL的数据块而不是。如果字符串很长,您可以选择存储每个数字的差异,而不是将它们全部存储起来。我认为这样可以节省磁盘空间。 例如。如果您想存储12345,12346,12347,12358 您可以存储12345,1,2,3

1

这里的电话号码是一个多值属性。您可以使用逗号分隔的值,并将上限和下限设置为多值属性,但是由于面试官要求输入1000个号码条目,因此为表格提供原子性并为每个手机创建一个新行数。这会增加行数。然后您可以执行标准化。这是一个多值依赖的情况,所以你必须去4NF来解决这个问题。