2011-07-07 92 views
1

我正在創建一個應用程序,其中有兩種不同類型的用戶。我是否應該將所有用戶數據放在一個表中,添加一個「角色」字段來標識用戶類型,還是應該爲每個用戶類型創建一個單獨的表?每個用戶類型都需要一些他們不共同共享的字段。數據庫架構問題

回答

2

真正的答案將取決於您的下游實施。在所有的現實中,我很可能會認爲你可以通過角色做一些事情來識別用戶並使用該角色來控制對其他必需字段的驗證。但那可能不適合你的情況。

的關鍵將是確定這是一個獨一無二的類的情況,還是你預計未來其他角色/ usertypes將需要此解決方案。此外,是否還有其他功能與指定核心用戶功能(如驗證等)重複需要的功能不同。

將兩個用戶表拆分可能會使身份驗證更加困難,例如,如果兩個用戶類型都通過相同的登錄頁。

1

如果差異是一列,那麼可以使用Role列來將它們放置到一個表中。如果您看到一個角色需要比另一個角色更多的信息,則可以爲所有用戶創建一個基表,然後將有問題的角色的其他信息存儲到另一個表中,並將ID作爲外鍵返回到包含該信息的表。

1

一般來說,最好的設計是有很少變化的細節表,另一個表與你的第1表保存信息的主鍵,它經常更改外鍵約束。

個人而言,我有一個字段類型,他們是什麼樣的用戶,並與其他數據識別你需要更多的細節二級表中的一個「用戶」表。

然後你就可以做,只要你需要的數據表之間的簡單連接,但如果你只是搜索你的主要用戶表,快速掃描會快很多。

0

正如您所說,爲用戶創建一個具有不同角色的單個表 - 只有所有用戶的共同屬性。在創建與用戶表中的1-1關係其他2個表,並且這些表中保持的屬性爲每個用戶類型

0

多少列是不同的爲每個用戶類型?

如果你有共同的50列,每種類型都有短短兩年多是截然不同的 - 那麼我很可能把那些兩種類型的用戶到同一個表,只是讓那些額外的列空。

但是,如果這些類型的用戶只共享兩個,三個常見的列(IDName),每個都有獨立的25-50列 - 其中一些你可能想使NOT NULL該類型用戶的 - 那麼我d爲每個用戶類型使用一個基表(只有公共屬性)和兩個單獨的「衍生」表,引用該基表。

0

事實上,每個用戶類型都會有不與其他類型共享的字段,因此在沒有任何其他信息的情況下,單獨的表格會更簡單。如果您使用一個表,那麼您必須爲所有用戶屬性添加列,並用很多NULL填充表,或者將所有屬性收集到某種編碼的clob或blob中,這非常不關係,但是在大數據和NoSQL環境,感覺很好玩。

如果您擁有數百個用戶類型而不是兩個,或者您有非常具體的原因用於某種非規格化,複雜或編碼的屬性信息,那麼兩個表應該沒問題。然而,對「所有用戶」的查詢會很混亂,所以如果你的用戶角色是不同的,那麼去這條路線。

如果用戶可以擁有多個角色,那麼其他答案已經說明過,一個包含公共數據和多個表用於角色特定數據的表格可以很好地工作。