컴퓨터 과학/[프로그래머스] SQL DB Essentials

[1주차] 강의노트 RDB & ERD

계란💕 2022. 2. 26. 13:51

2022-02-26 프로그래머스 1주차 강의 

 

0. 지난 과제 리뷰(Ch 01 관계 대수)

 

  - 셀렉트를 먼저하고 JOIN을 나중에 해야 프로그램의 속도를 높여 최적화시킬 수 있다.

  - 무결성 제약 특징 중요하다.

  - 한 식에 조인의 개수가 적을 수록 좋다.

  - 같은 속성에 대한 조건이 두 개이면 한 번에 쓰는 게 아니라 두 식의 교집합으로 나타낼 수 있다.

   -> 왜냐하면 한 개의 투플에 속성의 값이 하나씩 있기 때문이다.

  - SQL은 접해본 적이 있어서 이해가 갔는데 관계대수식이라는 것은 처음 봤다.

  - 관계대수식를 바탕으로 SQL을 작성한다는 것을 알았다. 

  - 기본키와 외래키에 대한  개념은 컴활을 공부해서 알고 있는 내용이라 어렵지 않았다.

  - 그런데 조인에 대한 내용에 대해서 프로젝트, 셀렉트, 조인을 이용하여 식을 세우는 게 많이 헷갈렸다.

  - 평균을 구하는 식에서 프로젝트나 GROUP이 나오지 않을 때도 있다.

   -> 셀렉트에서 조건을 넣으면 기준을 나누는 GROUP이 필요없는 건가?

   -> 프로젝션을 하기 전에 기본키인(학번, 학수번호)를 꼭 포함한다. (AVG 같은 통계함수 이용할 때만??)

  - 과제에서 휴학생도 포함하라는 게 무슨 말인가 했으나 학생테이블을 Left Outer Join하라는 의미였다.

    -> 그러면 모든 학생의 튜플이 표시되기 때문이다.

 

0.1 느낀 점 

 

  - 지난 주에 내주신 과제를 공들여서 한 덕분에 기프티콘을 받게 됐다.

  - 매니저님과 교수님도 자세하게 피드백 해주셔서 수업을 이해하고 공부하는데 큰 도움이 됐다.

  - 앞으로의 남은 기간에도 충분히 이해할 수 있도록 집중해서 학습해야겠다.

  - 강의 내용에서 중요한 부분만 요약하여 공부하는 습관을 가져야겠다. 

 

 

1. 1주차 세션 리뷰

 

1.0  ERD란?

  - 아주 중요!

  - Relationship Type의 특성: 매핑(일대일, 일대다, 다대다) / 참여(전체, 부분)

    -> 등록하지 않은 학생(빨간 점)이 있으면 => 부분참여(단일선)

    -> 학생은 지도에 전체 참여 => 전체잠여(이중선)

    -> ERD는 개념적ERD(Classic Notation) / 논리적 ERD로 나뉜다.

 

1.1 논리적 ERD  ( 확장된 IE 표기법, IDEF1X )

  - 식별관계( 실선 ) /  비식별관계( 점선 ) 구분 가장 중요한 개념

  Ex) 팀, 선수 테이블

  - 선수 테이블에서 팀번호 + 백넘버를 해야 => PK 

      -> 팀번호는 선수 테이블에서 PK이자 FK

      -> 팀 테이블의 번호(PK) - 선수 테이블의 팀번호(FK)

 

  - 논리적 ERD의 공통점 (개념적ERD와 차이점)

    -> (중요) 테이블에 FK를 명시적으로 표현한다. 개념적 ERD에는 FK가 없다.

    -> 1(부모) : 다(자식)

    -> 다대다 매핑 허용하지 않는다. 

 

1.2 확장된 IE(Information Engineering) 표기법(MySQL)

  - Crow's foot 표기법(까마귀 발자국)

  - 작은 동그라미 부분참여, 안 쪽 vertical 바(person이 realation에 전체참여-mandatory ??) , 바깥 쪽 vertical 바(부분참여- optional )

  - 지점에 속하지 않는 직원은 없다.

  - PK속성: 노란 열쇠(PK), 주황 열쇠(PK/FK)

  - Non-PK속성: 주황 마름모: FK, 파란 마름모(일반 속성), 속이 찬 하늘/ 주황: NotNull제약

 

1.3 IDEF1X (SqlDBM)

  - 자식 테이블(일대다의 '다')에 작은 동그라미

  - 식별관계(실선) / 비식별관계(점선)

  - IE표기법과 다르게 아이콘이 없고 KEY를 구분하기에 명확하다.

  - 마름모: 부분참여

  - 자식이 부분/전체참여인지 구분하는 것이 중요하다.

  - 다

- 개념적 설계(클래식 표기법)과 논리적 설계의 명확히 다른 점: "FK 유무"(논리적 설계에만 있음)

 

1.4 테이블 만드는 방법(MySQL)

  new model -> name: testDB -> add diagram -> 모눈지 -> 테이블 클릭 -> name: offices 

  -> 속성: officeCode: int(PK) / name: varchar(45) , address: varchar  -> 일대다 만들기     -> mandaty: NotNull / Null

  ... 순으로  만든다.

 

 

 

본 게시글은 프로그래머스의 "학교 밖에서 듣는 전공 필수SQL/DB Essentials" 강의 내용을 토대로 업로드 했습니다.

(코드리뷰 개선 과정)

 

 

[스터디/2기] 학교 밖에서 듣는 전공필수 SQL/DB Essentials

⏰마지막 할인 중 2기 일정이 맞지 않다면 오픈 알림 신청하고 최저가에 수강하세요! 오픈 알림 신청 개발자에게 데이터베이스를 이해하는 능력은 필수! 데이터베이스의 기본 개념부터 ERD를 읽

programmers.co.kr

https://programmers.co.kr/learn/courses/13484