[英]Enum datatype versus table of data in MySQL?
我有一個MySQL表, users
,包含以下列:
要管理角色系統, 以下任何一個選項都會有缺點嗎?
選項1:
創建第二個名為roles
表,其中包含三列: role_id
(主鍵), name
和description
,然后將users.user_id
與roles.role_id
關聯為名為users_roles
的第三個表中的外鍵?
要么...
選項2:
創建第二個名為roles
表,其中包含兩列: user_id
(來自users.user_id
外鍵)和role
(ENUM)? ENUM數據類型列允許將允許的角色的簡短列表作為值插入。
我以前從未在MySQL中使用ENUM數據類型,所以我只是好奇,因為選項2意味着少一個表。 我希望這是有道理的,這是我第一次嘗試在論壇中描述MySQL表。
通常, ENUM
類型不適用於這些情況。 如果您打算在將來添加或刪除角色的靈活性,則尤其如此。 更改ENUM
值的唯一方法是使用ALTER TABLE
,而在自己的表中定義角色只需要在roles
表中有一個新行。
此外,使用roles
表可以添加其他列以更好地定義角色,例如您在選項1中建議的description
字段。如果您使用選項2中的ENUM
類型,則無法進行此操作。
就個人而言,我不會在這些情況下選擇ENUM
。 也許我可以看到它們被用於具有絕對有限值的列,例如{Spades, Hearts, Diamonds, Clubs}
來定義卡片的套裝,但不是在諸如所討論的那種情況下,用於缺點之前提到。
對案例使用ENUM只有當您在接收端有一個嚴格定義的ORM時才建議有意義,因為對於istance將db行自動映射到平面對象列表中。
示例:table animal(ENUM('reptiles','mamals')類別,(varchar 50)名稱);
自動maped到
對象動物 - >分類動物 - >名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.