Springboot

Spring boot/JPA / DB 기본 개념 테이블과 오브젝트 (1){join}

25G 2021. 6. 30. 17:49

관계형 DB는 기본적으로 테이블을 하나 들고 있다 즉 db는 테이블의 모임이다.

위테이블을 예로 들자면 id에 있는 데이터는 칼럼  빨간색 네모처럼 가로로 한 줄을 튜플 또는 래코드라고 한다. 근데 DB는 이 칼럼에는 오브젝트를 받지 못한다. 왜냐하면 데이터베이스 규칙의 원자성이라는 규칙이 있다. 최소 단위의 데이터 하나만 넣을 수 있다는 뜻이다. 

프로그래밍 언어는 오브젝트 저장이 가능한데 DB는 불가능하다. 그래서 프로그래밍 언어에서  db로 모델링할 때는 어쩔 수 없이 db에 프라이머리 키만 저장을 해놓는 것이다. 그래서 나중에 찾을 때는 프라이머리 키를 참조해서 db에서 찾는 것이다.

위 과정에서 구조가 모순되는 단점이 생겨버린다.

 

 

 

 

한 명이 여러 개의 글을 쓸 수 있지만 개시글입잡에서는 1명만이 개시글을 작성한 것이다.

 

위 관계는 1:N 관계이다 폴인키는 무조건 N 쪽으로 집어넣으면 된다.

 

영화관이라고 가정하자

여러 명이 사람에서 영화를 본다고 가정하면 N:N 관계이다.

이럴 때는 테이블을 1:N이 되도록 여러 개로 쪼개서 관리해야 하는 것이다. 왜냐하면

db에서 가장중요한것은 데이터의 *무결성(데이터가 일관성이 있다.을 지켜줘야 하기 때문이다

 

좀 더 쉽게 생각하면 오브젝트 관점에서 보면된다.

오브젝트가 가능하면 테이블로 만들수 있다

이때 오브젝트 단위로 설계를 잘 하면 테이블끼리도 연관관계를 가질수 있도록 짤 수 있는것이다.

 

서브 쿼리

비동기 프로그램

일의 순서가 없는 프로그램이다 동시다발적으로 일을 처리하는 시스탬 프로그램의 실행순서가 없다. 비동기 프로그램의 치명적인 단점은 프로그램이 끝나는 시간을 예측하기가 어렵다는것이다. 

그래서 비동기 프로그래밍이 어려운 이유다.

 

join(equal join, inner join, join 다 같은말임)

join은 두가지 이상의 태이블을 합쳐서 보는것이다.

 

 

동일조인

동일 조인 : 두가지 이상의 테이블을 합쳐서 보는것이다

EX)

회원정보                                                               게시글DB

user태이블의 u라는 이름과 user태이블에 합쳐질 post라는 태이블에 p라는 키를두고

두 태이블 사이에서 join하기 적합한 컬럼을 합쳐 주는것이다.

이너조인 : 이미 있는 데이터끼리만 합쳐서 보여주는것이다. 

좀더 가독성이 좋게 각 태이블의 아이디에 별칭을 부여해서 수정해 봣다. 

 

외부 조인 

 

이너조인은 이미 있는 데이터 끼리만 합쳐져서 보인다. 그렇게 되면 없는 데이터도 보고싶을때 사용하는 방법이 외부조인 OUTER join이다

 

위와같이 왼쪽에 user태이블을 다 나오게 하는것이 left outer join이라고 한다

위 데이터를 right outer join 을 하면

love의 정보가 사라져서 출력된것을 볼 수 있다. 

그래서 어떤정보가 왼쪽에 올지 어떤정보가 오른쪽에 가도 되는지에 대해서 구분할 줄 알아야한다.

 

위 태이블을 자바로 표현한다 치면 DAO패키지에 따로 오브젝트로 저장해야하는데 그 오브젝트를 velue object라고 한다 사실 생각만해봐도 엄청 귀찮은 작업이라고 할 수 있다 

위 귀찮은 작업들을 jpa가 또 다 해결해 준다.

다음포스팅에서 이어서 가겠습니다