2014-11-14 1 views
0

, 난 당신이 이름과 이름 낮은 열을 상상할 수 있으므로더 낮은 란이 정상 모양을 끊는가 있습니까?

ID int, 
Name varchar(50) 
Name_Lower varchar(50) 

Name - "John" 
Name_Lower - "john" 

같은 데이터를 포함하는 접촉 테이블을 보유하고 타사 데이터베이스와 함께 일하고 있어요 포함 된 데이터가 정확히 같아야한다는 것을 알기 때문에 하위 함수를 제외하고는 정상적인 형식을 벗어납니다. 아마도 이것을 언급할만한 가치는 계산 된 컬럼이 아닙니다. 과거에는 두 사람이 동기화되지 않는 경우가있었습니다.

+1

왜 그런 열이 필요한가요? 문자열 비교는 열의 데이터 정렬에 의해 영향을받습니다. 대/소문자를 구분하지 않는 데이터 정렬은 대부분의 languates의 기본값입니다. –

+0

@DrCopyPaste 필요가 없으므로 쿼리 자체에 다른 데이터 정렬을 지정할 수 있습니다. 계산 된 열은 새 열에 인덱스를 넣고 자 할 경우에만 필요합니다.하지만 그 이유는 무엇입니까? –

+0

단순 : 규칙을 위반하는 경우 * 모든 데이터가 키에 의존해야하지만 전체 키와 키 (Codd에 도움이 됨) * - 그렇다면 세 가지 기본 형식 중 하나를 위반합니다. 'Name' 열에 ** only **에 의존하는'lower' 열이 있고'Name'이 해당 테이블의 키가 아닙니다 -> NF를 위반합니다> –

답변

1

물론 하나의 열이 다른 열의 직접 파생이므로 NF가 중단됩니다.

이렇게 할 필요는 없습니다. 하위 열이없는 상태에서 테이블을 그대로 유지 한 다음 계산 된 소문자 열을 포함하는 VIEW를 만듭니다.

소문자 양식이 필요할 때마다 VIEW를 쿼리합니다. 그러나 TABLE 만 업데이트하면 동기화 문제가 생기지 않습니다.

+0

나는 그것이 확실하다는 것을 거의 확신했다, 나는 단지 그것을 확인하고 싶었다. 명확성을 위해서 이것은 내 자신이 아닌 제 3의 DB이다. – RoughPlace

관련 문제