2012-06-27 22 views
0

我有個 '用戶' 表格與列:MySQL可以使用正則表示行的類型?

USERNAME varchar(40) 

A '用戶' 可以是一個管理用戶,或一個標準的用戶。管理用戶始終包含純數字用戶名。

然後,我可以使用正則表達式來拉出所有具有數字名稱的用戶以獲取管理用戶,反之亦然以獲得非管理。

它是好的做法,所以使用正則表達式在我的SELECT查詢來獲取這些信息,或者我應該代替添加附加列:

MANAGEMENT TINYINT(1) 

存儲用戶是否爲管理用戶或沒有。

什麼是最佳實踐,爲什麼?

+0

在用戶表中添加類似於角色的內容。並在角色表中保留管理,標準等。具有角色ID IN用戶表。 – Dev

回答

2

通常優選將該模式設計爲​​normalized。這包括沒有多個存儲相同信息的列。但是,用戶名和管理用戶絕對是個人信息,你需要這兩者。

您可以使用BIT類型作爲新列。如果要強制用戶名的特定格式

,標準數據庫的解決辦法是定義一個檢查約束如下:

ALTER TABLE YourTable ADD CONSTRAINT YourConstraint CHECK (is_management_user = 0 OR ...) 

(其中...將包括REGEXP_LIKE甲骨文,強制轉換爲TSQL中的整數或類似的東西)。

但是,從MySQL does not enforce檢查約束,你必須使用觸發器,如果​​你考慮USERNAME出於安全或應用程序的操作在某種程度上重要的形式,模仿他們 - 這,我希望,它真的不是。

3

這是真的不是很安全或有效地依靠這種「隱藏」的含義在一個領域。添加一個新字段。真。有沒有不明智的原因。

我也推薦閱讀Falsehoods Programmers Believe About Names這篇文章。

一些例子:

9:人的名字都寫在ASCII。

15:人名不包含數字。

24:我的系統永遠不需要處理來自中國的姓名。

25:或日本。

26:或韓國。

你的正則表達式能處理所有這些嗎?當然?每次?

相關問題