15.부록 (erd.yah.ac) - 간단하게 다이어그램을 만들어주는 웹사이트
16.논리적 데이터 모델링
- 데이터 모델링을 여러사람이 분업한다면 최고의 실력자는 개념적 데이터 모델링에 배치해야된다. 개념적 데이터 모델링은 순서상으로 논리적 앞에 있지만 그것은 제일 쉽기 때문이 아닌 제일 어렵고 중요하기 때문이다. 개념적 모델링이 잘되어있다면 논리적 모델링은 기계적인 일이다. 개념적 모델링이 업무에서 개념을 뽑아내는 일이라면 논리적 데이터 모델링은 그렇게 뽑아낸 개념을 관계형 데이터 베이스 패러다임에 어울리게 데이터 형식을 잘 정리정돈 하는 것. 이과정에서는 구체적인 데이터베이스 제품의 특성이나 성능과 같은 것은 크게 신경쓰지 않는다. 대신 관계형 데이터 베이스 패러다임에 어울리는 가장 이상적인 모습으로 개념을 잘 정리정돈하는 것이 포 인 트.
- Mapping rule
:erd을 통해 표현한 내용을 관계형 데이터 베이스에 맞는 형식으로 전환할때 사용해볼수있는 방법. 이 방법론에 따라서 하게 되면 덜 고민하고 빠짐없이 처리할수있어 사용함.
17.테이블과 컬럼 생성
- ER MASTER : ERD에서 그린 그림을 관계형 데이터 모델로 전환하는 작업
- Er master이라고 하는 도구를 쓸것임. 우리는 종이나 엑셀 혹은 구글스프레드시트 이용해라
- Er master은 이클립스라는 도구에 설치되는 software라서 우린 종이에따가 해라.
- Open tutorial이라는 사이트에 대한 데이터 베이스 모델링을 해서 open tutorials라고 적었고 얘는 데이터 베이스 제품을 선택할수있게 함. Mysql을 선택하면 나중에 물리적 데이터 모델링을 할때 sql을 우리한테 줄때 mysql에 맞는 sql을 주는것임
- 저자
author라고 하고 Logical name에다가는 저자, 일종의 도움말을 추가
그다음 제일 먼저 author의 id값을 지정하고 이 id는 프라이머리 키 값이고 행이 추가될때마다 자동으로 1씩 증가되기 때문에 auto increment를 지정했다. 그런 logical name에는 저자 아이디,라고하고 type은 int
어떤 속성에다가 여러가지 제약조건 ex) 여기 들어오는 데이터는 정수여야된다 문자길이는 얼만큼까지 허용한다. 유니크해야된다 —>라는 여러가지 제약조건을 뭐라하고 하냐면 바로바로 그컬럼에 대한 도메인을 설정한다.라고함. 도메인은 영역, 즉 그 컬럼에 들어갈 데이터가 어떤 범위안에 있는 데이터나 들어갈수있도록 경계를 지어주는 느낌!
- 엔트리와 속성까지 테이블과 컬럼으로 맵핑하는 작업을 끝냈다.
18.관계의 처리
- relationship을 PK/FK로 바꾸는 것을 해볼것임
- 가장중요한 부분은 cardinality 즉 몇대몇이냐를 따져보는게 젤 중요!
- 순서대로하는데 제일 간단한 관계가 1:1 그다음 1:n 다음 n:m
1) 1:1 관계 가 없어서 원래 er 다이어그램에다가 휴면기능을 넣어볼것임! 휴면상태가 된 저자목록을 추가 함.
- erd로 표현한 이걸 관계형 데이터 모델에 표현해보자! 우선 휴면자라고하는 표를 만들것임. 휴면 id를 primary key로 할건데 잘생각해보면, 휴면id는 독자적인 id값을 가질필요없이 author id 값과 같은 값을 주면된다. 굳이 자기 id값을 auto increment를 하지않아도 되는 상황이면 안하는게 좋기때문에, 또한 프라이머리키값은 이 데이터베이스에서 가장 성능이 좋은 키이기 때문에 인덱스 이기 때문에
- author와 dormant(휴면자)이 두개의 테이블에서 foreign key를 가져가야될까요 이게 1:N관계에서는 n쪽에 foreign키를 주면되는게 너무 쉽게 생각되거든 근데 1:1관계에서는 누구에게 줄건지가 애매하다.
휴면저자는 저자가 누군지알아야됨. 그러나 저자는 휴면저자가 누군지 몰라도 된다 즉 휴면저자는 저자에게 의존하고 있다. 그래서 혼자서도 잘지낼수있느 저자는 부모테이블 혼자서는 잘 지낼수없는 의존하고 있는 테이블은 자식 테이블이라고 할 수 있다. 그런 맥락에서 저자테이블의 프라이머리 키 휴면저자에 foreign키를 설치하면 됨.
- 첫번째로 부모테이블 클릭하고 자식 테이블 클릭하면 이때 reference column 이라는 부모테이블의 저자 id라고 하는 컬럼과 자식 테이블의 domant의 휴면id라고 하는 값이 서로 연결된다. foreign키는 author_id 값이 가짐.
- author와 dormant 사이가 몇대몇 관계인지 지정해야됨. Author에게 dormant는 없을수도있다. 그럼 optional임. 그래서 multiplicity를 0,1로 설정 (0아니면 1) 그리고 dormant행에게 authors는 반드시 있어야되니 1이라고 지정. 이렇게 해서 1:1 관계를 맺는 방법을 살펴봄.
19.1:N 관계의 처리
- 댓글과 글, 저자와 댓글일때 우리 ERD에서 1:N관계를 지님
- 이것을 표로 표현하면 보는 것처럼 어떤 댓글이 만들어지기 위해서는 그 댓글을 어떤 저자가 썼고 어떤 토픽에 속해있는 댓글인지에 대한 정보가 필요하다.
- 커멘트에다가 컬럼을 2개를 추가해야됨. primary key를 가지고 있는 topic을 먼저클릭하고 comment를 클릭하면 그러면 자동으로 컬럼이 추가되고/// author을 클릭하고 comment를 클릭하면 컬럼 추가. 그다음 두개의 foreign키를 갖게 된 상황
- topic과 comment는 , 토픽에게 코멘트는 옵션(0,n). 코멘트에게 토픽은 필수 저자는 댓글을 안쓸수도 있다.(0.n)지정
- 1:N관계는 젤 쉽다. 1:1은 누가 프라이머리 키를 가질건지 때문에 헷갈리는데 n:m은 아주어렵다. 담시간에 알려줄것임
20.N:M 관계의 처리 (하루정도는 이걸위해서 비워놔도될만한..이거 알면 db 중급자..)
저자와 글 (1명의 저자가 여러개 글 쓸수있고, 하나의 글을 여러명의 저자가 쓸수있기때문)
kim이라는 사람은 mysql과 sql server, oracle이라는 글을 lee는 mysql과 sql server글을 작성함.
Topic 에 author 정보를 적는다. Author_id가 1,2가 되어버리면 join을 할수가없다. 그래서 이상한건 노랑색으로 표시
author에 topic을 적는다. kim이라고 하는 사람이 작업한건 모든 토픽타고 lee는 1.3 park은 없다 그럼 이것도 마찬가지로 join도 할수없고 여러가지 문제를 지니게됨.
- 📌 그럼 어떡하냐!!!!!!! author도 아니고 topic도 아닌 중재자가 필요함!!! 새로운 테이블을 만들것임. 그 테이블은 각각의 저자가 어떤글을 썼나 각각의 글은 누가 저자인가라는 것을 연결시켜주는 맵핑 테이블을 만들거다. 그 테이블은 write라고 칭할 것임. 여기는 author_id, topic_id를 열에 적고 맵핑해줌 그럼 이문제가 해결됨! 1번이 1,2,3했다 2번이 1,3했다라고.. 이런 맵핑 테이블을 작성하게 되면 이 두개의 테이블이 결합 되었을 때 의미가 있는 정보 예를 들면 각각의 저자가 그 글을 언제 수정하기 시작했는가와 같은 정보를 추가할수있게 된다. Ex) created ..
- 이 결과를 erd와 스키마에도 반영을 담시간에 하겠다.
21.N:M관계의 처리 (정정한다!!!)
-이전시간에 n:m처리하기 위해 맵핑 테이블만들어 작업하는것을 해봄 이제 erd를 반영해야되는데 반영할 필요가 없다. 딱보면 다대다 관계여서 선수들은 딱 보면 작성이라는 부분이 이거 맵핑 테이블 되겠구나 라는 것을 알기 때문에 우린 스키마 부분만 반영하면 된다.
- write라는 테이블 생성 후 relationship을 맺어줌. author는 write(author먼저 클릭후 write), topic은 write에게 foreign key를 맺어주고 이 이름을 topic_id와 author_id로 이름을 바꿔준뒤 primary key로 지정을 해주면 이제 foreign key 면서 primary key인 관계가 된다. 그리고 언제 작성했는지 알려주는 작성일을 추가하고 type은 datatime.
- 이건 topic 과 author의 맵핑 테이블을 만든것이구 이 테이블의 관계를 한번 따져보자. 저자는 작성을 안할수도 있으니 옵션이 되어야되고 작성을 했다면 저자는 반드시 있어야되니까 필수. 그래서 이부분은 (0,n)까지해서 옵션.
- topic이 있다면 write도 있어야하고 write가 있다면 topic도 있어야되기 때문에 write와 topic은 양쪽 다 필수이다. 따라서 write(1..N) - - - (1) topic 관계가 된다.
- N:M 관계를 해결하는 것까지 살펴봄. 쉽게 잘 이해는 안갈것임… 축하햄
'STUDY > SQL' 카테고리의 다른 글
MySQL 데이터베이스 한번에 끝내기 (0) | 2021.05.09 |
---|---|
[생활코딩] 관계형 데이터 모델링 (26-32강의 : 물리적데이터 모델링/역정규화) (0) | 2021.05.09 |
[생활코딩] 관계형 데이터 모델링 (22-25강의 : 정규화) (0) | 2021.05.09 |
[생활코딩] 관계형 데이터 모델링 (8-14강의 : 개념적 모델링) (0) | 2021.05.09 |
[생활코딩] 관계형 데이터 모델링 (1-7강의 :ERD) (0) | 2021.05.09 |