2014-11-03 172 views
3

我在我的數據庫中有一個users表,它有三種用戶角色 - 管理員(admin),專家和學生。在數據庫中存儲一對多列的最佳方式

我曾嘗試將其角色存儲在users表中的列role,但我的問題是存儲它的最佳方式是什麼?

例如,我應該使用數字 - 1爲管理員,2爲專家和3爲學生。或者只有一個角色 - 管理員爲'A',專家爲'E',學生爲'S'或爲管理員等完整的字符串'管理員',或者什麼?

編輯

夥計們,我想最有效的方式。你們中的一些人告訴我要另一張桌子,但這種關係並不是很多,這是一對多的,因爲用戶只能有一個角色。

+1

這更多取決於你的使用情況和規範要求,但如果是我,我會做歸一化的東西,使其更具活力 – mituw16 2014-11-03 19:26:44

回答

5

您可能希望有一個單獨的聯結表,例如user_roles,它們將具有列:id,user_idrole_id。這樣,每個用戶將來可以擁有多個角色,即使現在他們只有1個。

並且role_id將指向新的roles表中的某個角色,該表中可能包含與角色關聯的所有數據。

或者如果你真的不想要接口表,那麼只需將role_id直接放入你的users表中即可。

查找數據庫「正常化」。基本上,如果您有一組將在列中重複的特定數據,則可能需要將其放入其自己的表中。

+0

任何用戶只能有一個角色 – Arman 2014-11-03 19:54:47

+1

,今天可能是真實的,但除非你能保證它會永遠保持真實,請按照這個答案的建議。 – 2014-11-03 20:37:44

+0

@Andrew這不是我的答案,我想要存儲角色列的方式,那麼如何將角色存儲在新表中? – Arman 2014-11-03 20:44:36

1

您可以創建一個單獨的表,顯示2列:role_nbr,具有以下值的角色: 1,Admin; 2,專家; 3,學生

然後在您的用戶表中包含role_nbr並使用數字,將其鏈接到角色表以查找角色名稱。這樣,如果你增加了角色,就很容易添加到單獨的表格中。一個很好的研究將是規範化 - 這將幫助你消除存儲重複信息,你有很多信息要存儲(比如角色名稱 - 因爲存儲一個數字或字母 - 你會怎麼記得它代表什麼?)

0

使用enum類型。下面是一個例子

CREATE TABLE users (
    -- the other columns 
    role ENUM('admin, 'expert', 'student') 
); 

的ENUM是與從在在創建表時的列規範明確列舉允許值的列表中選擇的一個值的字符串對象。

這意味着enum類型已經定義的值(可以包含只有一個每行價值 - 你不能擁有誰是admin用戶,並在同一時間student)。在你的情況下,他們是admin,expertstudent

DOCS

相關問題