簡體   English   中英

枚舉數據類型與MySQL中的數據表?

[英]Enum datatype versus table of data in MySQL?

我有一個MySQL表, users ,包含以下列:

  1. user_id(PK)
  2. 電子郵件
  3. 名稱
  4. 密碼

要管理角色系統, 以下任何一個選項都會有缺點嗎?

選項1:

創建第二個名為roles表,其中包含三列: role_id (主鍵), namedescription ,然后將users.user_idroles.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM