Super Coding Addict
EER다이어그램, Foreign Key, WHERE vs. HAVING 본문
어제 오늘 배움일기를 쓰질 못해서 조금이라도 남겨본다.
포트폴리오 만들고 이력서쓰고 수업끝나고 정신없이 취업준비하다보니 복습할 시간이 없었다..ㅠ_ㅠ
낼 수업전까지 새벽에 열심히 쿼리문 쳐보고 수업 들가야징...
나인투식스 수업은 언제나 적응이 안된다..@,@ 4시쯤 되면 정줄을 놓기 시작하는데 이때 연습문제를 풀어서 다행이다.
국비교육을 들으면서 DBMS로 썼던 오라클로 기본적인 SQL문은 뗐는데
오라클과 거의 유사한 MySQL로 수업을 차근차근 듣다보니 역시 난 아직도 배울 게 많다는 생각이 든다.
딱 세 개만 올리자면,
MySQL 워크벤치에서 EER다이어그램으로 table을 create하는 방법과
외래키에 대한 배움,
마지막으로 쿼리문에서 WHERE절과 HAVING절의 차이다.
여태껏 다이어그램은 웹에 무료로 배포된 서비스들을 이용해서 마우스광클로 그렸었는데...
DB 설계를 할 때 물리적 모델링을 MySQL 워크벤치에서 지원하는 다이어그램 기능으로 아주 쉽게 할 수 있다.
[File] - [New Model]에 들어가서, 상단에 +Add Diagram을 하면 요로코롬 다이어그램을 그릴 수 있다.
관계선을 잘 그려주면 FK까지 알아서 잘 작성해준다..... 세상에나...
그다음 [Database] - [Forward Engineer]를 하면 이 다이어그램을 기반으로 테이블을 만들고 스키마를 설정한다..!
물론 거꾸로 기존에 있는 DB를 불러와 다이어그램으로 나타내주기 때문에 테이블간 관계를 살펴볼 수도 있다.
오늘은 좀 더 심화적인 기능들을 살펴보았는데 group by, having 등까지 진도를 나갔다.
플젝을 하면서 DB테이블 설계를 할때도 Primary Key와 Foreign Key를 설정해놨는데 그렇게 복잡한 테이블간 관계가 없었기에 이 키들의 본질을 잊고 있었다.
핵심은 바로 '무결성 제약'이다. 어떤 테이블의 FK키는 다른 테이블의 PK이며, FK가 있는 테이블에 데이터를 삽입할 때 어떤 컬럼의 데이터가 PK가 있는 테이블에 존재하지 않는다면 에러가 난다.
가령 고객 테이블이 있고 주문 테이블이 있다면, 고객 테이블의 user_id와 주문 테이블의 user_id가 있다면 주문테이블의 user_id는 FK로서 고객 테이블의 user_ud를 참조한다.
상식적으로 주문을 하는 고객이 반드시 존재하고, 이때 비회원주문을 고려하지 않고 회원만 주문이 가능하다면 바로 고객테이블에서 반드시 그 고객정보인 user_id가 있어야 하는 것이다.
마지막으로 WHERE절과 HAVING절의 차이이다.
GROUP BY로 특정컬럼의 같은 데이터들끼리 row들을 묶어줄 수 있는데, 이 때 조건을 주고 싶다면 이 두 가지 절의 차이를 고려해야 한다.
GROUP BY전에 일어나는 조건이라면 GROUP BY절 앞에 WHERE절로 써줘야 하지만, GROUP BY로 row들을 묶어준 후 줘야하는 조건이라면 GROUP BY절 뒤에 HAVING절로 써줘야 한다.
캡쳐도 뜨고 꼼꼼히 쓰고 싶지만 피곤해서 이정도로 간단히 남기고 난 이제 꿈나라로!
'Today I learned' 카테고리의 다른 글
별찍기 롱타임노씨!!! [파이썬ver] (0) | 2021.01.13 |
---|---|
MySQL 연습문제 풀기 (0) | 2021.01.10 |
호스팅을 마치며 (0) | 2021.01.04 |
무료 SSL 인증받기 (0) | 2021.01.03 |
카페24(cafe24)에 Spring 프로젝트 Tomcat 호스팅하기 (1) | 2021.01.01 |