From Entity Sets to Relations
엔티티 세트를 릴레이션으로 변경할 때는 관계는 신경쓰지 않고 변경함
- Stars(name, address)
- Movies(title, year, length, genre)
- Studios(name, address)
From E/R Relationships to Relations
관계 세트를 릴레이션으로 변경할 때는 관계를 맺은 두 엔티티 세트의 키를 어트리뷰트로 새로운 릴레이션을 만듦. name을 starName과 studioName으로 변경한 이유는 명확성을 위해서임.
- StarsIn(starName, title, year)
- Owns(title, year, studioName)
관계가 다대일인 경우에는 '다'에 해당하는 릴레이션에 '일'의 키를 외래 키 컬럼을 만들어 새로운 릴레이션을 만들지 않을 수도 있음
- Movies(title, year, length, genre, studioName)
'일'의 키를 '다'의 릴레이션에 넣어줄 수도 있지만 그러면 심각한 데이터 중복이 발생하게 되므로 반드시 '일'에서 '다'에 넣어주도록 해야 함
Multiway Relationships
- 이런 경우엔 각 엔티티 세트의 키를 Contracts라는 릴레이션의 속성으로 사용함. 가져올 때 명확하게 알 수 있는 이름으로 명명함
- Contracts(starName, title, year, studioOfStarname, producingStudioName)
- Stars와 Studios의 관계, Movies와 Studios의 관계가 있으므로 각각의 name을 넣어줘야 함
Handling Weak Entity Sets
- Studios(name, addr)
- Crews(number, studioName)
- Unit-of(number, studioName, name) → studioName과 name이 동일하여 하나 삭제 → Crews와 동일해짐 → 필요없는 릴레이션
Converting Subclass Structures to Relations
상속 관계를 변환하는 방법에는 세 가지가 있음
E/R 스타일 변환
- Movies(title, year, length, genre)
- Murder-Mysteries(title, year, weapon)
- Cartoons(title, year)
- Voices(title, year, name)
- 장점- title이 Tangled인 영화를 찾으려고 하면 Movies에서만 찾아도 됨
- 단점 - weapon이 bat인 영화의 genre를 찾으려고 하면 Movies와 Murder-Mysteries를 자연 조인하여 생성된 릴레이션에서 찾아야 함
객체지향적 관점
- 엔티티 세트 하나하나를 하나의 객체로 보고 변환함
- 따라서 순수한 Movies, Cartoon인 Movies, Murder-Mysteries인 Movies, Cartoons이면서 Murder-Mysteries인 Movies로 나뉨
- Movies(title, year, length, genre)
- MoviesC(title, year, length, genre)
- MoviesMM(title, year, length, genre, weapon)
- MoviesCMM(title, year, length, genre, weapon)
- 장점 - 찾고자 하는 데이터를 특정 릴레이션에서 바로 찾을 수 있음
- 단점 - 위 릴레이션에서 title로 데이터를 찾으려 하면 모든 릴레이션을 검색하게 됨(자식은 부모의 특성을 물려받기 때문에). 그래서 어플리케이션 레벨에서 처리가 필요함
Null 값 사용
- 상속과 연관된 모든 엔티티 세트를 하나로 합치고 없는 속성을 null로 채우는 방법
- Movies(title, year, genre, length, weapon)
- 단점 - 자식 엔티티 세트의 속성이 많아지는 경우 합쳐진 다음 null로 채워지는 부분이 매우 많아짐
Uploaded by Notion2Tistory v1.1.0