데이터베이스의 일대 다 관계

데이터베이스의 일대 다 관계는 표 A의 각 레코드가 표 B에서 많은 링크 된 레코드를 가질 수 있지만 표 B의 각 레코드는 표 A에서 하나의 해당 레코드 만 가질 수 있습니다. 데이터베이스는 가장 일반적인 관계형 데이터베이스 디자인이며 좋은 디자인의 핵심입니다.

교사와 그들이 가르치는 과목 간의 관계를 생각해보십시오. 교사는 여러 과목을 가르 칠 수 있지만 과정은 교사와 동일한 관계가 아닙니다.

따라서 Teachers 테이블의 각 레코드에 대해 코스 테이블에 많은 레코드가있을 수 있습니다. 이것은 일대일 관계입니다 : 교사 한 명과 여러 과목.

일대 다 관계를 수립하는 것이 중요한 이유

일대 다 관계를 나타내려면 적어도 두 개의 테이블이 필요합니다. 왜 보는지 보자.

아마도 우리는 가르친 이름과 과정을 기록하기 위해 교사 용 테이블을 만들었을 것입니다. 우리는 다음과 같이 디자인 할 수 있습니다.

교사 및 코스
교사 _ID 선생님 성함 코스
Teacher_001 카르멘 생물학
Teacher_002 베로니카 수학
Teacher_003 호르헤 영어

Carmen이 두 개 이상의 과목을 가르치는 경우에는 어떻게해야합니까? 이 디자인에는 두 가지 옵션이 있습니다. 다음과 같이 Carmen의 기존 레코드에 추가 할 수 있습니다.

교사 및 코스
교사 _ID Teacher _Name 코스
Teacher_001 카르멘 생물학, 수학
Teacher_002 베로니카 수학
Teacher_003 호르헤 영어

그러나 위의 디자인은 유연성이 없으므로 나중에 데이터를 삽입, 편집 또는 삭제할 때 문제가 발생할 수 있습니다.

이로 인해 데이터 검색이 어려워집니다. 이 디자인은 데이터베이스 정규화의 첫 번째 원칙 인 First Normal Form (1NF)을 위반하며 각 테이블 셀에 단일 데이터 조각이 들어 있어야한다고 명시되어 있습니다.

또 다른 디자인 대안은 단순히 Carmen의 두 번째 레코드를 추가하는 것일 수 있습니다.

교사 및 코스
교사 _ID Teacher _Name 코스
Teacher_001 카르멘 생물학
Teacher_001 카르멘 수학
Teacher_002 베로니카 수학
Teacher_003 호르헤 영어

이것은 1NF를 준수하지만 중복성을 도입하고 불필요하게 매우 큰 데이터베이스를 부 풀릴 수 있기 때문에 여전히 데이터베이스 디자인이 좋지 않습니다. 더 중요한 것은 데이터가 일치하지 않을 수 있다는 것입니다. 예를 들어 카르멘의 이름이 바뀌면 어떨까요? 데이터를 사용하는 누군가가 한 레코드에서 이름을 업데이트하고 두 번째 레코드에서 이름을 업데이트하지 못할 수 있습니다. 이 디자인은 1NF를 준수하는 2 차 표준 형식 (2NF)을 위반하며 데이터의 여러 부분을 여러 테이블로 분리하고 두 테이블 간의 관계를 생성하여 여러 레코드의 중복을 방지해야합니다.

일대 다 관계로 데이터베이스를 설계하는 방법

Teachers and Courses 테이블에서 일대 다 관계를 구현하기 위해 테이블을 두 개로 나누고 외래 키를 사용하여 테이블을 연결합니다.

다음은 Teachers 테이블에서 Course 열을 제거한 것입니다.

교사들
교사 _ID Teacher _Name
Teacher_001 카르멘
Teacher_002 베로니카
Teacher_003 호르헤

그리고 코스 테이블이 있습니다. 외래 키 Teacher_ID는 Teachers 테이블의 교사와 코스를 연결합니다.

행동
Course_ID Course_Name 교사 _ID
Course_001 생물학 Teacher_001
Course_002 수학 Teacher_001
Course_003 영어 Teacher_003

우리는 외래 키를 사용하여 Teachers와 Courses 테이블 간의 관계를 발전 시켰습니다.

이것은 우리에게 생물학과 수학이 카르멘에 의해 가르쳐지고 호르헤가 영어를 가르친다는 것을 말해줍니다.

이 디자인이 가능한 중복을 피하고 개별 강사가 여러 강좌를 가르치며 일대 다 관계를 구현하는 방법을 볼 수 있습니다.

데이터베이스는 일대일 관계와 다 대다 관계를 구현할 수도 있습니다.