我在我的項目數據庫中創建Account
表。每個帳戶都有屬性頗多:數據庫中的高級用戶信息
- 登錄
- 電子郵件
- 密碼
- 生日
- 國家
- avatarUrl
- 城市
- 等
其中大部分都是可空的。我的問題是,我應該如何設計這個數據庫?
它應該是一個具有所有這些屬性的表嗎?或者,也許我應該創建兩個表,如AccountSet
和AccountInfoSet
,我將存儲所有'高級'用戶的設置?最後但並非最不重要的:如果這應該是兩張表格,那麼這些表格之間應該有什麼樣的關係?
我在我的項目數據庫中創建Account
表。每個帳戶都有屬性頗多:數據庫中的高級用戶信息
其中大部分都是可空的。我的問題是,我應該如何設計這個數據庫?
它應該是一個具有所有這些屬性的表嗎?或者,也許我應該創建兩個表,如AccountSet
和AccountInfoSet
,我將存儲所有'高級'用戶的設置?最後但並非最不重要的:如果這應該是兩張表格,那麼這些表格之間應該有什麼樣的關係?
如果這是一個關係數據庫,那麼我肯定會而不是將這些屬性作爲字段存儲在帳戶表中。一些原因:
一旦你的申請後,進入生產(或者它已經存在),該架構維護將成爲一場噩夢。你絕對會添加更多的屬性,並且不得不在生產中不斷觸摸該表格將會很痛苦。
您很可能最終會遇到孤立的字段。我已經多次看到你會介紹一個屬性然後停止使用它,但是它已經被燒入你的模式中,並且你可能會害怕刪除它。
理想情況下,您希望避免在表中存在這樣稀疏的數據(大量的空值有很多空值)。
我的建議是做你正在考慮的事情,那就是爲賬戶引入一個屬性表。你稱它爲AccountInfoSet。
表應該是這樣的:
ACCOUNTID INT, 屬性爲nvarchar(50), 價值爲nvarchar(50)
(當然,當你看到你設置的數據類型和大小)
然後,您將加入到AccountInfoSet表中,並可能在「高級」屬性上進行透視 - 將查詢轉換爲列。
在.NET中,您還可以編寫一個存儲過程,該存儲過程通過一次調用返回兩個查詢,並查看DataSet對象中的表。
或者你可以只做兩個不同的電話。一個用於賬戶,一個用於物業。
許多方法來獲取信息,但如果您使用的是關係數據庫,請確保您不只是將字段添加到帳戶。
您是否減少了多餘的信息?令人驚訝的是,您可以擺脫多少信息。 –
哦,我只是在問一般的想法,不要將這些例子(生日,國家)當作我的嚴格數據。我只想知道如何管理需要存儲大量信息的情況。 – walkerbox
這取決於。我寧願將數據分割成單獨的表格以避免混亂。具有鏈接表格的設計良好的數據庫對於更改,添加和操作更爲靈活。如果您的數據完全由單一實體組成,並且關聯性爲1:1(即,每行對於其他行都具有互斥信息),則單個表格可能是最好的。 從性能的角度來看,列號對於數千列的影響可以忽略不計。但是,如果屬性是可選的,則存儲特別大的數據庫可能會成爲問題,並且通常將其保留爲空。 –