0

这是在一次采访中被问到的,我必须为每个员工存储多个电话号码。我回答说我们可以有一个逗号分隔的数字串。下一个问题是如果字符串的大小变得非常长(假设有 1000 个数字)怎么办。想出一个更好的解决方案。我一无所知。有人可以建议解决此问题的正确方法吗?

编辑:我确实建议我们将列数冻结为某个最大数并根据需要插入 aa,但在大多数情况下它会导致许多 NULL 值,所以这将是一个糟糕的设计。

编辑:我只是想知道他们是否确实存在解决此问题的其他方法,而不是按照以下评论之一的建议添加一个新表(我确实将其作为答案)。顺便说一句,这是面试官的一些技巧还是确实存在其他解决方案?

4

3 回答 3

5

一个简单的 1:n-Relation 怎么样?为电话号码创建一个单独的表,如下所示:

Phone_Numbers(id, employee_id, phone_number_type, phone_number)

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

一般来说:在数据库字段中存储逗号分隔的任何内容都不是一个好主意。您应该阅读Database Normalization。通常 3NF 是一个很好的折衷方案

于 2012-07-22T08:23:26.353 回答
1

这里电话号码是一个多值属性。您可以使用逗号分隔值并将上限和下限设置为多值属性以使其有意义,但是当您的面试官要求输入 1000 个数字条目时,最好为表格提供原子性并为每个电话创建一个新行数字。这将增加行数。然后,您可以执行标准化。这是一个多值依赖的例子,所以你必须到 4NF 才能解决这个问题。

于 2012-11-30T06:52:50.290 回答
-1

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

于 2012-07-22T09:21:03.810 回答