Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Archives
Today
Total
관리 메뉴

Super Coding Addict

EER다이어그램, Foreign Key, WHERE vs. HAVING 본문

Today I learned

EER다이어그램, Foreign Key, WHERE vs. HAVING

밍응애 2021. 1. 6. 23:41

어제 오늘 배움일기를 쓰질 못해서 조금이라도 남겨본다.

포트폴리오 만들고 이력서쓰고 수업끝나고 정신없이 취업준비하다보니 복습할 시간이 없었다..ㅠ_ㅠ

낼 수업전까지 새벽에 열심히 쿼리문 쳐보고 수업 들가야징...

나인투식스 수업은 언제나 적응이 안된다..@,@ 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절로 써줘야 한다.

 

캡쳐도 뜨고 꼼꼼히 쓰고 싶지만 피곤해서 이정도로 간단히 남기고 난 이제 꿈나라로!