문제

데이터베이스를 처음 접하고 간단한 질문에 화를 내지 않습니다. Google Google 및 수집 된 지식 정규화는 데이터의 중복성을 줄이고 성능을 향상시킵니다. 그러나 실제로, 나는 마스터 테이블을 다른 작은 테이블로 나누고, 그들 사이의 관계를 적용하고, 가능한 모든 노조, 하위 쿼리, 조인 등을 사용하여 데이터를 검색하는 정확한 이유를 이해하지 못했습니다. 단일 테이블을 사용하여 필요한대로 검색합니다. 나는 조금 혼란스러워.

도움이 되었습니까?

해결책

주된 이유는 데이터 반복을 제거하는 것입니다. 예를 들어 여러 주소가있는 사용자가 있고이 정보를 단일 테이블에 저장 한 경우 사용자 정보가 각 주소 항목과 함께 복제됩니다. 정규화는 주소를 자신의 테이블로 분리 한 다음 두 가지를 사용하여 키를 연결합니다. 이렇게하면 사용자 데이터를 복제 할 필요가 없으며 DB 구조가 약간 깨끗해집니다.

완전 정규화는 일반적으로 성능을 향상시키지 않으며 실제로는 종종 악화 될 수 있지만 데이터는 무료로 유지됩니다. 실제로 일부 특별한 경우에는 성능을 높이기 위해 특정 데이터를 제거했습니다.

다른 팁

정규화는 "정상"이라는 수학적 개념에서 비롯됩니다. 또 다른 단어는 "수직"입니다. 규칙적인 2 축 좌표계를 상상해보십시오. 위로 이동하면 y 좌표가 바뀌면 측면으로 이동하면 x 좌표가 변경됩니다. 따라서 모든 움직임은 옆으로 나와 위쪽으로 움직일 수 있습니다. 이 두 사람은 서로 독립적입니다.

데이터베이스의 정규화는 본질적으로 동일한 것을 의미합니다. 데이터를 변경하면 데이터베이스에서 하나의 정보 만 변경해야합니다. 이메일 데이터베이스를 상상해보십시오 : 메일 테이블에 신분증과 수신자 이름을 저장하지만 사용자 테이블도 이름을 ID에 연결하므로 사용자 이름을 변경하면 사용자 이름 만 변경하는 것이 아닙니다. 사용자 테이블뿐만 아니라이 사용자와 관련된 모든 단일 메시지에서도 변경해야합니다. 따라서 축 "메시지"및 축 "사용자"는 "수직"또는 "정상"이 아닙니다.

반면에 메일 테이블에 사용자 ID 만있는 경우 사용자 이름에 대한 모든 변경 사항은 모든 메시지에 자동으로 적용됩니다. 메시지 검색시 사용자 테이블에서 모든 사용자 정보가 수집되므로 ( 가입하다).

데이터베이스 정규화는 가장 간단하게 데이터 중복성을 최소화하는 방법입니다. 이를 달성하기 위해 특정 형태의 정규화가 존재합니다.

첫 번째 정상 형태는 다음과 같이 요약 될 수 있습니다.

  • 단일 테이블에는 반복 그룹이 없습니다.
  • 관련 정보에 대한 별도의 테이블.
  • 기본 키와 관련된 테이블의 모든 항목.

두 번째 정상 형태는 기본적으로 다른 제한을 추가합니다 후보 키의 일부가 아닌 모든 열은 모든 후보 키에 의존해야합니다. (후보 키는 표에 복제 할 수없는 최소 열 세트로 정의됩니다).

그리고 세 번째 정상 형태는 조금 더 나아갑니다. 후보 키의 일부가 아닌 모든 열은 다른 비 투사 키 열에 의존해서는 안됩니다. 다시 말해, 그것은 의존 할 수 있습니다 후보 키에서. 이것은 3NF가 키, 전체 키, 키에 의존한다는 말로 이어집니다.1.

위의 설명은 데이터베이스 이론가보다는 귀하의 질문에 맞게 조정되므로 설명은 반드시 단순화되어야합니다 (그리고 "요약 된"및 "기본적으로"와 같은 문구를 사용했습니다).

데이터베이스 이론의 분야는 복잡한 분야이며, 진정으로 이해하기를 원한다면 결국에는 과학에 도달해야합니다. 그러나 귀하의 질문의 관점에서, 이것이 적절할 것입니다.

정규화는 중복 데이터가 없도록하는 데 유용한 도구입니다 (두 중복 영역이 동기화되지 않으면 실제 문제가됩니다). 일반적으로 성능을 증가시키지 않습니다.

실제로 모든 데이터베이스는 3NF로 시작해야하지만 잠재적 인 문제를 알고 있고 완화하면 성능 이득을 위해 2NF로 떨어질 수 있습니다.

그리고 (명백히) 네 번째, 다섯 번째 및 여섯 번째와 같은 "더 높은"수준의 정규화 수준이 높지만 Boyce-Codd와 일부는 내 머리 꼭대기에서 기억할 수 없습니다. 대부분의 경우 3NF가 충분해야합니다.


1 Edgar Codd (또는 Christopher Date, 그 문제에 대한 Christopher Date)가 누구인지 모른다면 아마도 연구해야 할 것입니다. 아버지 관계형 데이터베이스 이론.

우리는 정규화를 사용하여 데이터 삽입, 삭제, 업데이트의 결과로 발생할 수있는 이상의 가능성을 줄입니다. 정규화가 반드시 성능을 향상시키는 것은 아닙니다.

인터넷에는 많은 자료가 있으므로 여기서 다시는 반복하지 않을 것입니다. 그러나 당신은 볼 수 있습니다정규화 규칙 이상(다른 사람)

위의 모든 것뿐만 아니라 그것은 단지 어떤 의미가 있습니다. 사용자가 있고 그들이 가지고있는 자동차 종류를 기록하고 싶다고 가정 해 봅시다.

누군가가 두 대의 차를 소유 할 때까지 모든 것을 하나의 테이블에 넣으면 괜찮습니다. 그 사람을 위해 두 줄이 필요 하고이 두 줄을 함께 연결할 수 있는지 확인하십시오. .

그리고 개가 얼마나 많은 개를 기록하고 싶다면? 혼란스러운 DUP가 많은 동일한 테이블? 고유 한 사용자를 관리하기 위해 자신의 사용자 정의 로직이있는 다른 테이블?

정상화는 이러한 많은 문제로부터 멀어지게합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top