2012-09-19 3 views
0

1NF를 파악하려고하는데 다음 테이블이 1NF인지 아닌지 궁금합니다. first_name, last_name 및 full_name 열이 반복 될 수 있으므로 user_id 및 first_name, last_name 및 full_name 열이있는 새 테이블로 이동해야하므로 no로 가정 할 것입니다. 아래 그림은 참조 용 데이터베이스의 스크린 샷입니다.첫 번째 정규형과 성과 이름

http://imgur.com/kerlB

+0

1NF 일 수 있지만 데이터에 따라 적용 할 수없는 경우도 있습니다.모든 xxxx_name 필드는 Nullable이 아니며 일부 culture는 * firstname/lastname을 가질 수 없습니다. 또한 : Ludwig van Beethoven은 무엇을 채워야합니까? – wildplasser

+0

이것은 내가 최근에 발견 한 것입니다. 알림 주셔서 감사. – jason328

+0

그것은 당신이 가고 싶은 깊이에 달려 있습니다. 이름은 실제로 이름 구성 요소가 혼합되어 있으며 시간이 지남에 따라 바뀔 수 있습니다. 어떤 사람들은 성을 가지고 있고, 어떤 이들은 성을 가지고 있으며, 어떤 이들은 성을 바꿉니다. –

답변

1

확실히 될 수 있습니다.

현재 디자인에서 말하는 것은 1 등분 인 경우 하나의 "엔터티"(사람이라고 부르기 만 함)가 하나의 사용자 레코드에만 연결된다는 것입니다.

이름 필드를 별도의 테이블로 이동하면 기본적으로 하나의 "사람"이 하나 이상의 사용자 레코드와 연결될 수 있으며 이름을 업데이트 할 때 이름 필드를 변경해야한다는 것을 의미합니다. 그들의 "사용자"모두에게 동일하게 변경

이 같은 구조가 필요한 경우, 테이블이 보일 것 같이 더 많은 :

user_id|username|password|email|person_id 

하고 각 "사람"

에 대해 별도의 테이블을 것
person_id|first_name|last_name|full_name 

첫 번째 법선은 데이터를 복제하지 않습니다. 그냥 이름을보고, 당신은 아주 잘 "Bob"또는 "앨리스"라는 이름을 가진 많은 사람들이있을 수 있습니다. 그 데이터가 반복해서 반복되기 때문에 테이블에 중복 데이터가 있다고 말하는 것과 같지 않습니다. 요점은 각 레코드가 원자 적이어야한다는 것입니다.

+0

신난다, 고마워! 테이블에 대한 제안은 그것을 이해하는 데 도움이 될 것입니다. – jason328

3

1NF는 중복성이 아니라 원 자성에 대한 것입니다 (이것이 더 높은 정상적인 형태에 관한 것입니다). 본질적으로 모든 속성이 원자 일 경우 테이블은 1NF입니다.

분명히 테이블이 1NF에 있는지 여부는 "원자"로 정의하는 것에 따라 다릅니다. "원 자성"이 실제로 의미하는 것은 논쟁의 여지가 있지만 실용적인 사례 별 접근법을 사용하여 간단히 묻습니다.

문제의 맥락에서 나는 풀려고 노력하고 있습니다. 값의 일부에 액세스하는 것이 의미가 있습니까? 아니면 항상 전체 값에 액세스합니까?

나는 항상 전체 내용에 액세스하면 그 특정 상황에서 원자 적입니다.

예를 들어, first_namelast_name을 별도로 액세스하려고하므로 full_name은 1NF를 위반 한 이유가 될 수 있습니다. 그러나 이름과 성을 따로 따로 액세스 할 필요가 없다는 것을 알고 있다면 이고 full_name은 여전히 ​​1NF를 위반하지 않을 수 있습니다.

"액세스"


는 값 널리 여기 상당히 이해되어야한다. 그것은 분명히 데이터베이스에서 읽는 것을 의미 할 수도 있지만 제약 조건에서 사용하거나 인덱싱하는 것을 의미 할 수도 있습니다 ...

관련 문제