2016-03-16 50 views
0

這應該是一個我認爲很簡單的問題,但是可以使用NULL外鍵嗎?是否可以使用NULL外鍵?

我想詳細說一下,比方說,我正在爲用戶製作數據庫,不同類型的用戶需要不同的數據集......設計此數據庫的最佳做法是什麼?

這是我的想法,作爲一個粗略的例子:(我是正確還是遙遠?)

「用戶」: ID |類型(即,'1'表示基本,'2'表示高級)| basic_id(可空的外鍵)| advanced_id(可空的外鍵)|電子郵件|名稱|地址|電話(等等)

「users_basic」: ID | user_id(外鍵)| (其他數據僅針對基本用戶)

「users_advanced」 id | user_id(forgein key)| (其他數據只需要高級用戶)

我感覺這是不好的設計原因沒有辦法讓一個查詢中的所有數據沒有檢查什麼類型的用戶它是第一次,但我真的不喜歡有大量NULL數據的表的想法。設計這個最好的方法是什麼?

+0

你爲什麼要創建一堆*孤兒*記錄? –

+0

@ PM77-1我的想法是,因爲不同類型的用戶會有很多不同類型的數據存儲,我不想有一個巨大的表,每行有50%的NULL列,因此。 –

回答

1

當然,有NULL外鍵是很好的。

不過,就你而言,我傾向於做兩件事之一。如果基本和高級用戶的列數不是很多,則可以將它們包含在users表中。這將是典型的方法。

否則,你可以聲明user_id所有三個表中的主鍵,而且還有從二級表(users_basicusers_advanced)到主(users)外鍵關係。保持關係的獨特性在MySQL中很棘手,可能不值得做。

+0

可以說有不同類型的用戶有很多獨特的數據...你會說更好的做法是有一個巨大的表,每行最終會有很多空字段?或者如上所述的3個獨立表,只有1個外鍵是NULL? 我通常會將它設計爲前一種方式,但我試圖重新將我的設計稍微考慮到後者,並且有更清晰的數據庫......我只是不確定它是更好還是更差的解決方案。 –

+0

@StephenFox。 。 。將列分隔成不同的表是一個非常合理的解決方案。單獨的表格可以加快查詢速度,減少數據大小並幫助實施安全要求。 –

+0

非常感謝Gordon ...另一個後續問題,在ONE查詢中爲特定用戶獲取所有數據的最佳方式是什麼?是可能的,或者我將不得不查詢用戶表來獲取類型,然後查詢適當的第二個表...我假設做一個雙連接與NULL鍵將無法正常工作? –

相關問題