programing

MYSQL 표준화

cafebook 2023. 8. 6. 10:21
반응형

MYSQL 표준화

MySQL의 정규화란 무엇이며 어떤 경우에 어떻게 사용해야 합니까?

저는 여기서 정규화를 일반적인 용어로 설명하려고 합니다.먼저 관계형 데이터베이스(Oracle, Access, MySQL)에 적용되는 것이므로 MySQL에만 적용되는 것은 아닙니다.

정규화는 각 테이블에 최소 필드만 있는지 확인하고 종속성을 제거하는 것입니다.직원 기록이 있고 각 직원이 부서에 소속되어 있다고 가정해 보십시오.부서를 직원의 다른 데이터와 함께 필드로 저장하면 문제가 발생합니다. 부서가 제거되면 어떻게 됩니까?모든 부서 필드를 업데이트해야 하며, 오류가 발생할 수 있습니다.그리고 일부 직원들이 부서(새로 할당된 부서)가 없는 경우에는 어떻게 해야 합니까?이제 null 값이 있습니다.

따라서 간단히 말해서 정규화는 null인 필드가 있는 것을 피하고 테이블의 모든 필드가 설명되는 데이터의 한 도메인에만 속하는지 확인하는 것입니다.예를 들어 직원 테이블에서 필드는 ID, 이름, 주민등록번호일 수 있지만 이 세 개의 필드는 부서와 관련이 없습니다.직원 ID만 해당 직원이 속한 부서를 설명합니다.따라서 이는 직원이 어느 부서에 속해 있는지가 다른 테이블에 있어야 한다는 것을 의미합니다.

여기 간단한 정규화 프로세스가 있습니다.

EMPLOYEE ( < employee_id >, name, social_security, department_name)

이것은 설명된 바와 같이 정규화되지 않습니다.정규화된 형태는 다음과 같을 수 있습니다.

EMPLOYEE ( < employee_id >, name, social_security)

여기서 Employee 테이블은 데이터 집합 하나만 담당합니다.그럼 직원이 어느 부서에 소속되어 있는지는 어디에 보관해야 하나요?다른 표에서

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

이것은 최적이 아닙니다.부서 이름이 변경되면 어떻게 합니까?(미국 정부에서는 항상 발생합니다.)그러므로 이것을 하는 것이 더 좋습니다.

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )

첫번째 정상적인 형태, 두번째 정상적인 형태, 세번째 정상적인 형태가 있습니다.하지만 당신이 DB 과정을 공부하는 것이 아니라면, 저는 보통 제가 이해할 수 있는 가장 정규화된 형태를 택합니다.

정규화는 MYSql 전용이 아닙니다.일반적인 데이터베이스 개념입니다.

정규화는 데이터베이스의 데이터를 효율적으로 구성하는 프로세스입니다.정규화 프로세스의 두 가지 목표는 중복 데이터를 제거하는 것(예: 동일한 데이터를 둘 이상의 테이블에 저장하는 것)과 데이터 종속성을 보장하는 것(관련 데이터만 테이블에 저장하는 것)입니다.이 두 가지 모두 데이터베이스가 사용하는 공간을 줄이고 데이터가 논리적으로 저장되도록 보장하기 때문에 가치 있는 목표입니다.

SQL의 일반적인 형식은 아래와 같습니다.

첫 번째 정규 형식(1NF): 관계가 단일 값 속성만 있는 경우 1NF라고 하며, 반복 또는 배열은 허용되지 않습니다.

두 번째 정규 형식(2NF): 관계가 1NF에 있고 모든 비키 속성이 기본 키에 따라 완전히 작동하는 경우 2NF에 있다고 합니다.

세 번째 정규 형태(3NF):관계가 2NF에 있고 전이 종속성이 없는 경우 3NF에 있다고 합니다.

Boyce-Codd 정규 형식(BCNF): 관계의 모든 결정 요인이 후보 키인 경우에만 관계가 BCNF에 있다고 합니다.

네 번째 정규 형식(4NF): 관계가 BCNF에 있고 다중값 종속성이 없으면 4NF에 있다고 합니다.

다섯 번째 정규 형식(5NF): 관계의 모든 조인 종속성이 관계의 후보 키에 의해 암시되는 경우에만 관계가 5NF라고 합니다.

도메인 키 일반 양식(DKNF):우리는 관계가 모든 수정 이상이 없는 경우 DKNF에 있다고 말합니다.삽입, 삭제 및 업데이트 이상이 수정 이상 아래에 있음

바다표범도

데이터베이스 정규화 기본사항

중복을 제거하여 데이터의 일관성을 유지하는 기술입니다.따라서 동일한 정보가 둘 이상의 테이블에 저장된 데이터베이스는 정규화되지 않습니다.

데이터베이스 표준화에 대한 위키백과 문서를 참조하십시오.

(관계형 데이터베이스에 대한 일반적인 기술이며 MySQL에만 국한되지 않습니다.)

응용프로그램에 대한 데이터베이스 스키마를 작성할 때 서로 다른 테이블에 있는 둘 이상의 열에 정보가 저장되지 않도록 해야 합니다.

DB의 모든 테이블은 응용프로그램의 중요한 엔터티를 식별하므로 고유 식별자는 해당 테이블의 필수 열입니다.

이제 스토리지 스키마를 결정하는 동안 이러한 엔티티(테이블), 즉 일대일, 일대일, 다대다, 다양한 유형의 관계가 확인되고 있습니다.

  1. 일대일 관계의 경우(예:학생은 클래스에서 고유한 순위를 가집니다. 같은 테이블을 사용하여 두 테이블의 열을 저장할 수 있습니다.
  2. 일대일 관계의 경우(예:한 학기에 여러 개의 과정이 있을 수 있음), 외부 키가 상위 테이블에 작성되고 있습니다.
  3. 다대다 관계의 경우(예:교수는 많은 학생들을 돌보고 그 반대의 경우도 마찬가지입니다. 세 번째 테이블을 작성해야 합니다(두 테이블의 기본 키를 복합 키로 사용). 두 테이블의 관련 데이터가 저장됩니다.

이러한 시나리오를 모두 처리하면 DB 스키마가 4NF로 정규화됩니다.

관계형 데이터베이스 설계 분야에서 정규화는 데이터베이스 구조가 범용 쿼리에 적합하고 데이터 무결성 손실을 초래할 수 있는 특정 바람직하지 않은 특성(삽입, 업데이트 및 삭제 이상)이 없도록 하는 체계적인 방법입니다.에프.F.관계형 모델의 발명가인 Codd는 1970년에 정규화의 개념과 현재 우리가 최초의 정규화된 형태로 알고 있는 것을 소개했습니다.Codd는 1971년에 두 번째와 세 번째 정규 형태를 정의했습니다. [3] 그리고 Codd와 Raymond F.보이스는 1974년에 보이스-코드드 정상 형태를 정의했습니다.더 높은 정규 형태는 이후 몇 년 동안 다른 이론가들에 의해 정의되었으며, 가장 최근은 2002년에 크리스 다테, 휴 다웬 및 니코스 로렌초스에 의해 도입된 여섯 번째 정규 형태입니다. [5]

비공식적으로 관계형 데이터베이스 테이블(관계의 컴퓨터화된 표현)이 세 번째 정규 형태(3NF)일 경우 "정규화"로 설명되는 경우가 많습니다.대부분의 3NF 테이블은 삽입, 업데이트 및 삭제 이상이 없습니다. 즉, 대부분의 경우 3NF 테이블은 BCNF, 4NF 및 5NF(일반적으로 6NF는 아님)를 준수합니다.

데이터베이스 설계 지침의 표준 부분은 설계자가 완전히 정규화된 설계를 작성해야 한다는 것입니다. 선택적 비정규화는 성능상의 이유로 나중에 수행될 수 있습니다.그러나 데이터 웨어하우스 설계에 대한 차원 모델링 접근 방식과 같은 일부 모델링 분야에서는 비정규화 설계, 즉 대부분 3NF를 준수하지 않는 설계를 명시적으로 권장합니다[8].

편집: 출처: http://en.wikipedia.org/wiki/Database_normalization

언급URL : https://stackoverflow.com/questions/1258743/normalization-in-mysql

반응형