2013-01-12 33 views
0

我在我的項目數據庫中創建Account表。每個帳戶都有屬性頗多:數據庫中的高級用戶信息

  • 登錄
  • 電子郵件
  • 密碼
  • 生日
  • 國家
  • avatarUrl
  • 城市

其中大部分都是可空的。我的問題是,我應該如何設計這個數據庫?

它應該是一個具有所有這些屬性的表嗎?或者,也許我應該創建兩個表,如AccountSetAccountInfoSet,我將存儲所有'高級'用戶的設置?最後但並非最不重要的:如果這應該是兩張表格,那麼這些表格之間應該有什麼樣的關係?

+0

您是否減少了多餘的信息?令人驚訝的是,您可以擺脫多少信息。 –

+0

哦,我只是在問一般的想法,不要將這些例子(生日,國家)當作我的嚴格數據。我只想知道如何管理需要存儲大量信息的情況。 – walkerbox

+0

這取決於。我寧願將數據分割成單獨的表格以避免混亂。具有鏈接表格的設計良好的數據庫對於更改,添加和操作更爲靈活。如果您的數據完全由單一實體組成,並且關聯性爲1:1(即,每行對於其他行都具有互斥信息),則單個表格可能是最好的。 從性能的角度來看,列號對於數千列的影響可以忽略不計。但是,如果屬性是可選的,則存儲特別大的數據庫可能會成爲問題,並且通常將其保留爲空。 –

回答

1

如果這是一個關係數據庫,那麼我肯定會而不是將這些屬性作爲字段存儲在帳戶表中。一些原因:

  1. 一旦你的申請後,進入生產(或者它已經存在),該架構維護將成爲一場噩夢。你絕對會添加更多的屬性,並且不得不在生產中不斷觸摸該表格將會很痛苦。

  2. 您很可能最終會遇到孤立的字段。我已經多次看到你會介紹一個屬性然後停止使用它,但是它已經被燒入你的模式中,並且你可能會害怕刪除它。

  3. 理想情況下,您希望避免在表中存在這樣稀疏的數據(大量的空值有很多空值)。

我的建議是做你正在考慮的事情,那就是爲賬戶引入一個屬性表。你稱它爲AccountInfoSet。

表應該是這樣的:

ACCOUNTID INT, 屬性爲nvarchar(50), 價值爲nvarchar(50)

(當然,當你看到你設置的數據類型和大小)

然後,您將加入到AccountInfoSet表中,並可能在「高級」屬性上進行透視 - 將查詢轉換爲列。

在.NET中,您還可以編寫一個存儲過程,該存儲過程通過一次調用返回兩個查詢,並查看DataSet對象中的表。

或者你可以只做兩個不同的電話。一個用於賬戶,一個用於物業。

許多方法來獲取信息,但如果您使用的是關係數據庫,請確保您不只是將字段添加到帳戶。

+0

非常感謝您的回答。我只有一個問題。如果我擁有一百萬個用戶和大約十個屬性,它會高效嗎?如果每個人都會填寫所有的個人信息,那麼這個表格就會變得相當龐大。如果我知道,我是否應該使用其他方法?大多數用戶會填寫這些數據,還是可以? – walkerbox

+0

即使有100萬用戶和10個屬性,我認爲它會好的。但是一旦你開始擴展規模,你就會發現自己必須更具創造性。當你到達它時,我會穿過那座橋,但通常在一個關係數據庫中大約有一百萬到兩百萬個就足夠了。 – ryan1234