2012-07-22 55 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來解決這個問題。