집 >데이터 베이스 >MySQL 튜토리얼 >관계형 데이터베이스 설계: DBMS
관계형 데이터베이스 설계는 효과적인 데이터베이스 시스템의 초석으로, 중복성을 줄이고 데이터 무결성을 유지하면서 데이터를 효율적으로 구성하는 데 중점을 둡니다. 이 문서에서는 분해, 정규화, 기능적 종속성 및 키에 대한 철저한 탐색을 제공하여 관계형 데이터베이스 설계 원칙을 완전히 이해할 수 있도록 해줍니다.
분해는 중복을 제거하고 일관성을 개선하며 성능을 최적화하기 위해 큰 관계(테이블)를 더 작고 의미 있는 관계로 나누는 프로세스입니다. 이는 정규화의 중요한 측면입니다.
손실 분해:
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
이를 다음과 같이 분해하면:
무손실 분해:
기능적 종속성(FD)은 한 속성(또는 속성 집합)의 값이 다른 속성(또는 속성 집합)의 값을 결정하는 관계에서 두 속성 간의 관계를 설명합니다. 관계형 데이터베이스 설계 및 정규화의 기본 개념입니다.
X와 Y를 관계 R의 속성 집합으로 둡니다. 기능적 종속성 X → Y는 R의 두 튜플(행)에 대해 튜플이 X 값에 동의하는 경우 다음을 의미합니다. 그들은 또한 Y의 가치에 동의해야 합니다.
학생 정보를 저장하는 테이블을 생각해 보세요.
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
여기서 학생ID → 이름, 전공은 학생ID에 따라 이름과 전공이 모두 고유하게 결정되기 때문입니다.
키는 테이블에서 레코드를 고유하게 식별하고 데이터 무결성을 적용하는 데 필수적입니다.
수퍼키:
후보 키:
기본 키:
외래 키:
복합 키:
고유 키:
정규화는 중복성과 종속성을 줄이고 데이터 무결성을 보장하기 위해 속성과 관계를 구성하는 프로세스입니다. 이는 연속적인 정규형
의 기준을 점진적으로 충족함으로써 달성됩니다.정의:
다음 기준을 만족하는 경우 관계는 제1정규형(1NF)에 있다고 합니다.
설명:
예:
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
정의:
다음과 같은 경우 관계는 제2정규형(2NF)입니다.
설명:
이 단계는 부분 종속성으로 인한 중복을 줄이고 데이터를 더 잘 구성합니다.
예:
학생 강좌 정보를 저장하는 테이블을 생각해 보세요.
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
이는 프라임이 아닌 속성(강사 및 부서)이 복합 키에 부분적으로 종속되므로 2NF를 위반합니다.
부분 종속성을 제거하려면 테이블을 두 개의 관계로 분해하세요.
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
정의:
다음과 같은 경우 관계는 제3정규형(3NF)입니다.
설명:
3NF에서는 전이적 종속성을 제거하여 중복성을 줄이고 데이터 일관성을 향상합니다.
예:
OrderID | Item --------------- 1 | Pen 1 | Notebook 2 | Pencil
후보 키: StudentID는 각 행을 고유하게 식별합니다.
이 구조는 중복성을 초래합니다. CS 부서의 HOD가 변경되면 여러 행을 업데이트해야 합니다.
전이적 종속성을 해결하려면 테이블을 두 개의 관계로 분해하세요.
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
정의:
관계는 BCNF(Boyce-Codd Normal Form)인 경우
3NF와 BCNF의 주요 차이점:
설명:
BCNF는 3NF보다 엄격하며 관계가 3NF를 충족할 수 있지만 BCNF를 위반하는 종속성으로 인해 여전히 중복성이 있는 상황을 해결합니다.
BCNF가 필요한 경우:
예:
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
기능적 종속성:
후보 키: CourseID
문제:
BCNF를 달성하려면 테이블을 두 가지 관계로 분해하세요.
OrderID | Item --------------- 1 | Pen 1 | Notebook 2 | Pencil
StudentID | CourseID | Instructor | Department ---------------------------------------------- S1 | C1 | Dr. Smith | CS S2 | C2 | Dr. Jones | EE S1 | C2 | Dr. Jones | EE
정의:
다음과 같은 경우 관계는 제4정규형(4NF)입니다.
설명:
4NF의 주요 목표는 레코드에 직접 관련되지는 않지만 동일한 키에 대한 의존성으로 인해 함께 나타나는 두 개 이상의 독립적인 속성이 레코드에 포함될 때 발생하는 다중 값 종속성을 제거하는 것입니다.
핵심 개념:
예:
학생, 학생이 듣는 강좌, 소속 클럽에 대한 정보를 저장하는 테이블을 생각해 보세요.
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
후보 키: 학생ID
다중 값 종속성:
학생ID가 강좌와 동아리를 독립적으로 결정하므로 이 표는 4NF를 위반합니다. 이로 인해 동일한 학생 ID가 코스와 동아리의 다양한 조합으로 여러 번 반복되므로 중복이 발생합니다.
테이블이 4NF를 준수하도록 하려면 테이블을 두 개의 테이블로 분해하여 다중 값 종속성을 제거해야 합니다.
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
이제 두 개의 다중 값 종속성이 별도로 처리됩니다.
정의:
관계는 PJNF(Projection-Join Normal Form)라고도 알려진 제5정규형(5NF)입니다.
설명:
5NF는 종속성 결합을 처리하며, 데이터 손실 없이 분해된 부분에서 모든 정보를 재구성할 수 있는 방식으로 데이터를 분해합니다. 5NF의 관계는 모든 중요한 조인 종속성이 후보 키에 의해 암시되는 방식으로 설계되었습니다.
간단히 말하면 5NF는 부적절한 분해로 인한 중복이 발생하지 않도록 하는 데 관심이 있습니다. 관계가 분해되고 나중에 다시 결합될 때 모든 원본 데이터를 손실이나 모호함 없이 계속 사용할 수 있음을 보장합니다.
예:
어떤 공급업체가 다양한 프로젝트에 어떤 부품을 공급하는지에 대한 정보를 저장하는 테이블을 생각해 보세요.
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
후보 키: (공급업체, 부품, 프로젝트)
종속성 조인:
위의 관계는 정보 손실 없이 더 작은 관계로 분해될 수 있기 때문에 조인 종속성을 갖습니다. 예를 들어 테이블은 세 가지 하위 관계로 분해될 수 있습니다.
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
테이블을 이러한 작은 관계로 분해하면 이 세 개의 작은 관계에 대해 자연스러운 조인을 수행하여 원래 테이블을 다시 만들 수 있습니다.
그러나 이 분해가 가능하기 때문에 5NF를 위반합니다. 5NF를 위반하는 이유는 특정 프로젝트에 대해 어느 공급업체가 어떤 부품을 공급하는지에 대한 정보가 여러 행에 걸쳐 중복 저장되기 때문입니다. 동일한 사실을 여러 번 저장하고 있어 불필요하며 불일치가 발생할 수 있습니다.
5NF를 달성하기 위해 정보 손실 없이 관계가 더 이상 분해될 수 없도록 테이블을 분해합니다.
OrderID | Item --------------- 1 | Pen 1 | Notebook 2 | Pencil
이 형식에서 관계는 데이터 손실 없이는 더 이상 분해될 수 없기 때문에 이제 5NF에 있습니다. 이 테이블은 원본과 동일한 정보를 나타내지만 각 속성이 후보 키에 완전히 종속되고 부적절한 분해로 인해 중복이 존재하지 않는 보다 정규화된 형식으로 나타납니다.
이 종합 가이드는 관계형 데이터베이스 설계를 마스터하여 효율적이고 일관되며 변칙 없는 데이터베이스 시스템을 보장하는 데 도움을 줍니다.
위 내용은 관계형 데이터베이스 설계: DBMS의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!