반응형 Back/DB5 DB JOIN 모음 (INNER, LEFT, RIGHT, OUTER) JOIN(조인)이란? 테이블이 둘 이상 있을 때 두 테이블을 연결해서 데이터를 조회하는 방법이다. 두 테이블을 연결하기 위해선 테이블들이 당연히 한 개 이상의 칼럼을 공유하고 있는 상태여야 한다. 이 공유는 기본키(PK), 외래키(FK)로 설정되어 있는 경우겠다. JOIN의 종류 - INNER JOIN : 교집합 A∩B - LEFT&RIGHT JOIN : 부분집합 - OUTER JOIN : 외부조인, 합집합 ㄴ 오라클의 경우 OUTER JOIN이 있지만, MYSQL에는 없기 때문에 LEFT JOIN과 RIGHT조인을 합쳐서 쓴다고 한다. - INNER JOIN (A∩B) SELECT A.ID, A.NAME, A.PHONENUM FROM A INNER JOIN B ON A.ID = B.ID; - LEFT .. 2022. 11. 4. DB 정규화(Normalization) & 비정규화(De-normalization) 정규화(Normalization)란? - 관계형 데이터베이스의 설계에서 중복을 최소화할 수 있도록 데이터를 구조화하는 과정을 정규화라고 한다. - 정규화는 DB의 논리적 설계 단계에서 수행한다. 정규화의 목적 - 데이터베이스 정규화의 목표는 이상현상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. - DB 구조 확장 시(데이터 삽입 시) 재구성을 최소화하기 위해서이다. - 효과적인 검색 알고리즘을 기대할 수 있다. 이상현상의 종류 이상현상의 개념 - 정규화를 거치지 않은 DB 데이터들이 불필요하게 중복됨으로써 릴레이션 관리 시 발생하게 되는 이슈이다. - 각 속성들 간에 존재하는 여러 가지의 종속 관계를 하나의 릴레이션에 표현하기에 이상현상이 발생하는 것이다. - 삭제 이상 (Del.. 2022. 11. 4. DB 영속성(Persistance)과 영속성 컨텍스트(Context) 영속성(Persistence)이란? DB에서 영속성이라 함은 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다. 이 영속성을 개발자는 보통 파일 시스템이나 관계형 DB, 객체지향적인 DB 등을 활용하여 구현한다. 데이터가 영속성을 갖지 않는다는 말은 그저 메모리 상에서만 존재하는 데이터라는 말과 같고 그렇게 되면 프로그램이 종료되었을 경우 데이터는 모두 사라지게 된다. 그래서 보통 데이터를 파일이나 DB에 영구히 저장해서 데이터에 영속성을 부여한다. 영속성 컨텍스트(Persistence Context) - JPA 영속성 컨텍스트는 Entity를 영구히 저장하는 환경이란 뜻으로, 애플리케이션과 DB의 사이에서 객체를 보관하는 가상 DB 역할을 한다고 볼 수 있다. 서비스 별로 하나의 Entity.. 2022. 11. 2. RDBMS와 NoSQL의 차이와 각각이 적합한 경우 먼저 스키마의 개념부터 간단히 알아보면, 스키마란? - DB의 구조와 제약 조건에 관한 명세 - DB를 구성하는 개체, 속성, 관계 및 데이터 조작 시 데이터 값들이 갖는 제약조건을 정의 - 내부, 외부(서브), 개념 스키마로 나눠짐 RDBMS RDBMS는 모든 데이터를 2차원 테이블 형태로 표현한다. - 장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 적합성을 보장한다. - 단점 : 시스템이 커질수록 쿼리가 복잡해져 성능 저하, Scale-out이 어렵다. (up은 가능) NoSQL 반면 NoSQL은 데이터 간의 관계를 정의하지 않는다. 즉 스키마에 구애받지 않는다. - 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있다. - Collection이라는 형태로 데이터를 관리한다. 그럼 어떤 .. 2022. 10. 29. [SQL] "ORA-02291: 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다" 오류 - 이슈 Spring-boot + mybatis + oracle로 프로젝트 작업 중에 위 오류가 발생했다. BOARD 테이블을 카테고리별로 나눴었는데, 이렇게 되면 BOARD 테이블의 자식테이블인 COMMENT, ATTACH 테이블은 부모 테이블이 여러 개인 상황이 발생하여 결국 BOARD 테이블들을 통합하고 컬럼으로 게시판 카테고리를 분류하자는 결론이 나왔다. 아직 프로젝트 경험이 엄청 많은게 아니라 현업에서는 보통 어떤 방식을 쓰는지 알기가 쉽지 않아 이 방법 또한 정답이고 문제가 없을 것이라고 단정 짓기는 어려우나 그건 그때 다시 고민해봐야겠다. - 문제 해결 결론은 자바 코드에서보다는, 테이블을 합치는 과정 중 기본키와 외래키를 설정하는 과정에서 부모인 BOARD 테이블의 기본키를 ATTACH나 .. 2022. 9. 15. 이전 1 다음