데이터베이스의 일대 다 관계는 표 A의 각 레코드가 표 B에서 많은 링크 된 레코드를 가질 수 있지만 표 B의 각 레코드는 표 A에서 하나의 해당 레코드 만 가질 수 있습니다. 데이터베이스는 가장 일반적인 관계형 데이터베이스 디자인이며 좋은 디자인의 핵심입니다.
교사와 그들이 가르치는 과목 간의 관계를 생각해보십시오. 교사는 여러 과목을 가르 칠 수 있지만 과정은 교사와 동일한 관계가 아닙니다.
따라서 Teachers 테이블의 각 레코드에 대해 코스 테이블에 많은 레코드가있을 수 있습니다. 이것은 일대일 관계입니다 : 교사 한 명과 여러 과목.
일대 다 관계를 수립하는 것이 중요한 이유
일대 다 관계를 나타내려면 적어도 두 개의 테이블이 필요합니다. 왜 보는지 보자.
아마도 우리는 가르친 이름과 코스를 기록하기위한 테이블을 만들었을 것입니다. 우리는 다음과 같이 디자인 할 수 있습니다.
교사 _ID | 선생님 성함 | 코스 |
---|---|---|
Teacher_001 | 카르멘 | 생물학 |
Teacher_002 | 베로니카 | 수학 |
Teacher_003 | 호르헤 | 영어 |
Carmen이 두 개 이상의 과목을 가르치는 경우에는 어떻게해야합니까? 이 디자인에는 두 가지 옵션이 있습니다. 다음과 같이 Carmen의 기존 레코드에 추가 할 수 있습니다.
교사 _ID | 선생_이름 | 코스 |
---|---|---|
Teacher_001 | 카르멘 | 생물학, 수학 |
Teacher_002 | 베로니카 | 수학 |
Teacher_003 | 호르헤 | 영어 |
그러나 위의 디자인은 유연성이 없으므로 나중에 데이터를 삽입, 편집 또는 삭제할 때 문제가 발생할 수 있습니다.
이로 인해 데이터 검색이 어려워집니다. 이 디자인은 데이터베이스 정규화의 첫 번째 원칙 인 First Normal Form (1NF)을 위반하며 각 테이블 셀에 단일 데이터 조각이 들어 있어야한다고 명시되어 있습니다.
또 다른 디자인 대안은 단순히 Carmen의 두 번째 레코드를 추가하는 것일 수 있습니다.
선생_신분증 | 선생_이름 | 코스 |
---|---|---|
Teacher_001 | 카르멘 | 생물학 |
Teacher_001 | 카르멘 | 수학 |
Teacher_002 | 베로니카 | 수학 |
Teacher_003 | 호르헤 | 영어 |
이것은 1NF를 준수하지만 중복성을 도입하고 불필요하게 매우 큰 데이터베이스를 부 풀릴 수 있기 때문에 여전히 데이터베이스 디자인이 좋지 않습니다. 더 중요한 것은 데이터가 일치하지 않을 수 있다는 것입니다. 예를 들어 카르멘의 이름이 바뀌면 어떨까요? 데이터를 사용하는 누군가가 한 레코드에서 이름을 업데이트하고 두 번째 레코드에서 이름을 업데이트하지 못할 수 있습니다. 이 디자인은 1NF를 준수하는 2 차 표준 형식 (2NF)을 위반하며 데이터의 여러 부분을 여러 테이블로 분리하고 두 테이블 간의 관계를 생성하여 여러 레코드의 중복을 방지해야합니다.
일대 다 관계로 데이터베이스를 설계하는 방법
Teachers and Courses 테이블에서 일대 다 관계를 구현하기 위해 테이블을 두 개로 나누고 외래 키를 사용하여 테이블을 연결합니다.
다음은 Teachers 테이블에서 Course 열을 제거한 것입니다.
선생_신분증 | 선생_이름 |
---|---|
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 테이블 간의 관계를 발전 시켰습니다.
이것은 우리에게 생물학과 수학이 카르멘에 의해 가르쳐지고 호르헤가 영어를 가르친다는 것을 말해줍니다.
이 디자인이 가능한 중복을 피하고 개별 강사가 여러 강좌를 가르치며 일대 다 관계를 구현하는 방법을 볼 수 있습니다.
데이터베이스는 일대일 관계와 다 대다 관계를 구현할 수도 있습니다.