백엔드 개발하며 작성한/데이터베이스
엔티티 연관관계 (식별/비식별, Cardinality, 선택/필수)
엔티티 간 연관관계를 얘기할 때에는, "엔티티 간 식별 관계" 와 "엔티티 간 연결되는 개체 수", "선택/필수 관계"를 이용해서 관계를 정의할 수 있다. 1. 부모, 자식 관계가 있는 엔티티 간 식별 여부를 정의하는 "식별 관계"2. 관계가 있는 엔티티 간 하나의 엔티티에서 다른 엔티티에 몇개의 개체와 대응되는 갯수를 의미하는 "Cardinality"3. 대응되는 개체의 필수 여부를 정의하는 "선택/필수 관계" 식별 관계와 비식별 관계먼저 엔티티 간 식별 관계이다.식별/비식별 관계는, 자식 개체가 부모 객체 없이도 식별될 수 있는지, 부모 객체 없이는 식별될 수 없는지를 의미한다. 식별 관계자식 엔티티가 부모 엔티티의 식별자 (PK)를 본인의 식별자 (PK)로 사용하거나복합키일 경우, 자신의 식별자에 ..
[ORM] 상속 관계 매핑
객체 지향 언어에서는 '상속' 관계가 존재합니다. 그러나 관계형 데이터베이스에는 상속이라는 개념이 없는데요, 그래도 가장 유사한 관계가 '슈퍼타입 서브타입 관계'라는 모델링 기법입니다. 그리고 이 '슈퍼타입 서브 타입 관계'라는 논리적 모델을 실제 물리 모델(테이블)로 구현할 때는 3가지 방법이 있습니다. 1. 각각의 테이블로 변환시키고 조인하는 방법 JPA에서는 '조인 전략' (Joined)이라고 부릅니다. 구체적으로 엔티티 각각을 테이블로 모두 만들고 부모 테이블의 기본키를 받아서 이를 기본키이자 외래키로 사용합니다. 그래서 조회할 때 조인을 자주 사용합니다. 주의할 점은 객체는 타입으로 하위 객체들을 구분할 수 있지만 테이블은 타입의 개념이 없으므로 따로 구분하는 컬럼을 부모 테이블에 추가해야합니다..
[ORM] 연관관계의 주인을 정해야하는 이유
추후 업데이트될 수 있는 포스팅입니다. Spring Boot에서 간단한 도메인을 만들다가 작성하는 포스팅입니다. 현재 데이터베이스로 관계형 데이터베이스를 쓰기 때문에 이를 객체와 매핑시키기 위해 JAVA 진영의 ORM 기술 표준인 JPA를 사용합니다. 객체가 연관관계를 다루는 방법과 테이블이 연관관계를 다루는 방법에는 차이가 있습니다. 객체는 객체의 주소를 참조해서 연관관계를 맺습니다. 그래서 도메인 A에서 도메인 B의 객체 주소를 참조하면, 도메인 A를 조회 시 B를 함께 조회할 수 있지만, B에서는 A의 존재를 모릅니다. 이는 다시 말해 단방향의 연관관계를 맺는 것이라 말할 수 있습니다. 각 필드를 참조하고 JPA가 연관관계를 맺은 것을 알 수 있도록 애너테이션을 붙여야합니다. 일대다 관계의 경우, ..
[ORM > JPA] 영속성 컨텍스트
EntityManagerEntityManager는 Entity(객체와 테이블이 매칭되는 개념)를 관리하는 역할을 합니다.EntityManagerFactory가 요청이 올때마다 생성하는 비용이 매우 크기 때문에, 대신 생성비용이 거의 없는 EntityManager가 생성됩니다.public interface EntityManagerFactory { /** * Create a new application-managed EntityManager. * This method returns a new EntityManager instance each time * it is invoked. * The isOpen method will return true on the returned..
[MySQL]날짜/시간 타입과 TIMESTAMP 칼럼 생성
MySQL의 날짜/시간 타입 MySQL의 날짜/시간타입으로는 DATE, DATETIME, TIME, TIMESTAMP가 있다. DATE 타입은 날짜만 포함하는 타입 YYYY-mm-dd 형식으로 입력 가능 1000-01-01부터 9999-12-31까지만 입력 가능 DATETIME 타입은 날짜와 시간을 모두 포함하는 타입 YYYY-mm-dd HH:MM:SS 형식 입력 가능 1000-01-01 00:00:00부터 9999-12-31 23:59:59까지 입력가능 TIME 타입은 시간만 포함하는 타입 HH:MM:SS 형식으로 입력 가능 -838:59:59부터 838:59:59까지 가질 수 있음 TIMESTAMP 타입은 날짜와 시간을 모두 포함하는 타입 YYYY-mm-dd HH:MM:SS 형식 입력 가능 1970-..
[MySQL Workbench] ERD를 SQL 코드로 변환하기
기존에 생성되어있던 DB가 있었는데 MySQL의 서버작동 문제로 재설치를 하게되면서 기존의 DB로 ERD를 생성해논 것을 다시 SQL코드로 변환시키고자 한다. 기존에 ERD 다이어그램이 있다면 1. 우선 ERD 를 불러온다. 왼쪽목록에서 두번째 것을 클릭하면 기존에 있던 모델들이 나온다. 해당하는 모델을 클릭한다. 2. 이 화면이 뜨면 기존에 만들어논 EER Diagram 이 한개 보인다. 이것을 클릭! 기존에 ERD 다이어그램이 없다면 1. 메인화면에서 왼쪽 두번째 목록을 누르면 해당 화면이 뜬다. + 버튼을 클릭! 2. Add Diagram을 클릭하면 빈 창이 뜨는데, 거기서 ERD를 만들어나가면 된다. 3. 완성된 ERD 다이어그램을 SQL 코드로 변환해보자. 4. 연결할 DB 의 정보들을 넣어준다..