티스토리 뷰
개념적 설계 : 현실세계의 물체를 사람이 이해할수 있는 개념으로 표현한것(ER다이어그램설계)
논리적 설계 : 개념적 설계를 바탕으로 특정DBMS가 지원하는 자료구조의 형태로(테이블) 표현한것
개념적 데이터 모델링이란 현실세계의 코끼리라는것을 개념적인 구조로 다시한번 나타낸 것이다.
코끼리를 세부적으로 관찰해보면 발은4개 귀는 2개 꼬리1개 등등이 있다.
개념적 데이터 모델링의 결과로 개념적 데이터 모델인 ER다이어그램을 많이 사용하고 있다.
논리적 데이터 모델링이란 개념적 데이터 모델링의 결과로 나온 ER다이어그램을 컴퓨터에 저장할수 있는 형태인 구조로 변환하는 과정이다.
ER다이어그램을 테이블의 형태로 변환하는 과정이라고 할 수 있다.(특정 DBMS에 종속적이다.DBMS가 테이블을 지원하는지?안하는지?)
하나의 릴레이션은 릴레이션 스키마와 릴레이션 인스턴스로 구성된다.
데이터베이스는 릴레이션들을 모아놓은것이므로 오른쪽과 같이 생각하면 된다.
ER다이어그램에서의 다중 속성을 테이블의 속성으로 변환할때에는
속성의 원자성때문에 불가능 하기 때문에 릴레이션을 하나 더 만들어서 연결해야 한다.
기본키는 null값을 가지거나 값이 자주 바뀌는것으로 선택하면 안된다.
외래키는 참조되는 테이블의 기본키 속성을 참조하는데
이때, 외래키의 이름과 기본키의 이름은 서로 달라도 되지만 도메인은 같아야 한다.
또한 외래키는 NULL값 또는 중복값을 가질수 있다.
기본키 : NULL값을 가지면 안된다.
외래키 : 참조할 수 없는 값을 참조하면 안된다.
복합 속성을 릴레이션으로 변환하는 예
1대다 관계에서는 관계의 속성을 n쪽으로 편입시키고 n쪽 릴레이션에 1쪽 기본키를 외래키로 참조하면 된다.
1대 다 관계에서 외래키가 n쪽에 들어간 이유는 1측 한 개의 인스턴스를 n측에서 중복적으로 참조할수 있기 때문이다.
외래키는 기본적으로 중복을 허용한다.
일대일 관계일 경우 논리적 설계
3가지 경우로 또 구분
1.두 개체 모두 1:1관계에 선택참여인 경우
2.두 개체중 하나만 1:1관계에 필수참여인 경우
3. 두 개체가 모두 1:1관계에 필수참여인 경우
왜 전체 참여하는 릴레이션 쪽에 외래키를 넣어야 할까?
여자측 릴레이션에는 혼인을 하지 않은 사람이 있을 수도 있다. 만약 여자 릴레이션에 남자번호라는 외래키가 있다고하면
혼인을 하지 않은 여자는 남자번호에 NULL값이 들어갈 것이다.
외래키에 NULL값이 있는게 이상한건 아니지만 굳이 이렇게 비효율적으로 짜는거보다 모든 남자가 혼인에 참여하기 때문에
남자 릴레이션에 여자번호를 외래키로사용하는것이 더 이상적이다.
1:1관계이고 서로 필수 참여일때는 가운데 있는 혼인이라는 릴레이션에 모든 속성을 몰아 넣으면 된다.
서로 필수 참여일때만 릴레이션을 합칠 수 있는 이유는 양측 개체에 카디널리티(튜플수)가 같기 때문이다.
둘중하나가 선택참여일 경우 A릴레이션에서는 카디널리티가 3이고 B릴레이션에서는 5인 경우가 가능하다.
왜냐면 A릴레이션이 관계에 선택 참여 한다고 했을때 A는 그 관계에 참여를 해도되고 안해도 되기 때문이다.
만약 A라는 사원이 홍길동,차장,이고 B,C,D라는 부하직원을 가진다 생각했을때
테이블로 바로 표현하기는 부적합 하다.그렇기 때문에 따로 릴레이션을 새로 하나 만들어서
A | B
A | C
A | D
이런식으로 사원번호라는 외래키와 부분키를 합쳐서 기본키로 사용하게 된다.(속성의 원자성 만족 시킴)
weak entity와 변환 방법이 비슷한듯?
'컴퓨터 공학과 졸업 > 데이터베이스' 카테고리의 다른 글
데이터베이스 정규화 - 1 (0) | 2017.11.30 |
---|---|
중간정리 (0) | 2017.10.21 |
SQL (0) | 2017.10.19 |
DMBS와 파일시스템 장단점 및 DBMS종류 (0) | 2017.10.16 |
관계대수 예제 2 ppt (0) | 2017.10.14 |
- Total
- Today
- Yesterday
- react hooks
- useEffect
- atomic design
- Polyfill
- storybook
- async
- mobx
- design system
- props
- computed
- typescript
- server side rendering
- Next.js
- react
- state
- es6
- Action
- type alias
- rendering scope
- javascript
- reducer
- webpack
- hydrate
- promise
- return type
- useRef
- Babel
- await
- reactdom
- reflow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |