2012-06-27 4 views
0

은 내가 열이있는 '사용자'테이블이 있습니다MySQL은 regex를 사용하여 행의 유형을 나타낼 수 있습니까?

USERNAME varchar(40) 

A '사용자'관리 사용자 또는 표준 사용자가 될 수 있습니다. 관리 사용자는 항상 순전히 숫자로 된 사용자 이름을 포함합니다.

정규식을 사용하면 관리 사용자를 얻기 위해 숫자 이름을 가진 모든 사용자를 끌어낼 수 있고 그 반대의 경우도 관리를받을 수 있습니다.

따라서이 정보를 얻기 위해 내 선택 쿼리에서 정규식을 사용하는 것이 괜찮 연습, 아니면 내가 대신 추가 열 추가해야합니다 :

MANAGEMENT TINYINT(1) 

사용자가 관리 사용자인지 여부를 저장합니다.

모범 사례는 무엇이며 그 이유는 무엇입니까?

+0

사용자 테이블에 역할과 비슷한 것을 추가하십시오.역할 표에 관리, 표준 등을 보관하십시오. 사용자 ID 테이블에 역할 ID가 있어야합니다. – Dev

답변

2

일반적으로 스키마를 normalized으로 설계하는 것이 좋습니다. 여기에는 동일한 정보를 저장할 여러 열이 없어도됩니다. 그러나 사용자 이름과 관리 사용자가되는 것은 분명히 중요한 정보이므로 둘 다 필요합니다.

새 열에 BIT 유형을 사용할 수 있습니다. 다음과 같이 사용자 이름의 특정 형식을 적용 할 경우

는 표준 데이터베이스 솔루션은 점검 제한 조건을 정의하는 것입니다 :

... 오라클에 REGEXP_LIKE,으로 캐스팅이 포함됩니다
ALTER TABLE YourTable ADD CONSTRAINT YourConstraint CHECK (is_management_user = 0 OR ...) 

(TSQL의 정수 또는 그런 식으로).

그러나 MySql does not enforce 제약 조건을 확인하고 응용 프로그램의 보안 또는 작동에 중요한 USERNAME 형식을 고려하면 트리거를 사용하여 해당 항목을 에뮬레이션해야합니다. 실제로는 그렇지 않습니다.

3

이것은 입니다. 실제로는 필드에서 이러한 "숨겨진"의미에 의존하는 것이 안전하지 않거나 효율적이지 않습니다. 새 필드를 추가하십시오. 정말. 아니요하지 않은 분별있는 이유가 있습니다.

Falsehoods Programmers Believe About Names에서이 기사를 읽는 것이 좋습니다.

몇 가지 예 :

9 : 사람들의 이름이 ASCII로 작성됩니다.

15 : 인물 이름에는 숫자가 포함되지 않습니다.

24 : 시스템에서 중국 이름을 사용할 필요가 없습니다.

25 : 일본.

26 : 또는 한국.

정규식으로 모두 처리 할 수 ​​있습니까? 확실히? 매번?

관련 문제