2021.12.07 TIL

서승원·2021년 12월 7일
0

TIL

목록 보기
32/68

Entity( 엔티티 )
테이블에 주소록을 만든다고 하면 일련번호, 이름, 전화번호 , 주소, 등의 필드를 만들어서 한 레코드마다 데이터를 입력할 것이다. 이 많은 정보들 중에 반드시 있어야할 정보, 없어도되는 정보를 구분해서 자료형에 덧붙여 NULL, NOT NULL로 구분해 입력하게 된다.
필드 중에서 레코드와 레코드를 구분하는 기준이 되는 필드를 PRIMARY KEY ( PK) 라고 한다. 주소록에서 본다면 일련번호, 대한민국 국민의 정보로 본다면 주민번호, 학생의 정보로 보면 학번 등이 이에 해당할 것이다. 다른 사람과 중복되지않는 유일한 정보, 반드시 있어야하는 정보이다. 이것이 PK가 가져야할 3가지 조건에 해당된다.
1. NOT NULL - 생략할 수 없다.
2. NO DUPLICATE : 중복될 수 없다. "레코드를 구분하기 위해서"
3. NO CHANGE : 변경할 수 없다. ( 필수는 아니지만 강력하게 권장 )
한 레코드마다 다른 레코드와 구분할 기준이 되는 PRIMARY KEY 를 가진 테이블은 그 PK를 중심으로 테이블이 구성되게 된다. 이런 경우를 대부분 Entity ( 엔티티) 라고 한다. 엔티티는 추상명사에 해당되고 단일한 성격의 PK를 가지며 2개 이상의 속성으로 표현되는 독립된 테이블로 구성된다.
엔티티라는 개념이 사용될 때는 관계(Relation)과 함께 나오게 되는데 이런 데이터베이스를 관계형데이터베이스(R-DB)라고 한다.

그림으로 나타내면 다음과 같은 E-R Diagram 이라는 방식으로 나타낸다. 회원과 게시글이라는 엔티티가 각각 ID, 번호라는 PK를 가지며 이 두 테이블은 2 개 이상을 갖고, 독립적인 테이블이다. 두 엔티티가 서로의 속성을 이용해 의미가 있는 동작을 하는 것을 관계라고 한다. 예를 들면 어느 회원이 게시글을 작성하거나, 수정하거나, 추천하게 되는 일이다. 서로의 속성으로부터 데이터를 새로 만들거나 , 수정하거나, 삭제한다.

엔티티와 서브쿼리 예제
서브쿼리는 하나의 문장의 동작 결과를 이용해서 다른 문장과 연속해서 동작하는 형태다.
학생, 과목 두 엔티티와 연결된 관계인 수강을 이용해 서브쿼리를 만들고 select해보며 엔티티 간, 관계 간의 상호작용을 알 수 있었다.

입력돼있는 성적과 학생/과목의 속성들을 이용해서 특정 주소지에 사는 학생들의 특정 과목의 성적을 알기 위해 StudentT 테이블로 부터 특정 주소지에 사는 학생들의 학번(stId) 를 SELEECT 한다. 그럼 그 SELECT 문장을 WHERE 조건문의 조건에 그대로 사용하여 ScoreT 테이블로부터 해당 조건에 부합하는 데이터를 얻을 수 있다.
서브쿼리는 괄호 안에 들어가서 원하는 조건에 맞는 데이터를 산출 하고, 10101, 10103 이라는 값을 출력해주고, WHERE 조건문의 조건이 되는 식으로 동작한다.


서브쿼리를 중첩해서 사용할 수도 있다. 수학 과목에서 최저점을 받은 학생들이 사는 동네를 알기 위해서 , ScoreT 테이블로부터 subId가 MAT1인 score의 MIN값을 얻어낸다.
그리고 두 테이블 간 공통되는 정보인 stId를 얻어내기 위해 subId가 MAT1이며, score가 MIN값인 레코드의 stId 를 얻어낸다.
마지막으로 얻어낸 stId를 이용해서 StudentT 테이블로부터 addr을 SELECT 하면 2번의 서브쿼리를 이용해서 원하는 정보를 얻어낼 수 있다.

profile
2년차 백엔드 개발자, crimy

0개의 댓글