DB 4

[SQL] SELECT문의 실행 순서

SELECT문은 다음과 같은 순서로 작성되어야 한다.  1. SELECT  2. FROM  3. WHERE  4. GROUP BY  5. HAVING  6. ORDER BY  7. LIMIT    그러나 다음과 같은 순서로 실행된다.  1. FROM: 대상으로 하는 테이블  2. WHERE: 조건을 만족하는 행  3. GROUP BY: 대상을 기준으로 묶어 하나의 행으로 보여줌  4. HAVING: GROUP BY에서 묶어진 값들 중에서 조건을 만족하는 그룹  5. SELECT: 모든 또는 선택한 열을 조회                    (SELECT 절에서 AS를 설정하므로 이를 기점으로 AS 처리된 이름 사용 가능)  6. ORDER BY: 열을 기준으로 기준에 따라 오름차순 또는 내림차순 정렬 ..

DB/SQL 2024.07.28

[JPA] Soft Delete와 @SQLDelete

데이터베이스에서 데이터를 삭제할 때 정책에 따라 Hard Delete와 Soft Delete로 나눌 수 있다. Hard Delete는 물리 삭제, Soft Delete는 논리 삭제로도 부른다. 물리 삭제는 데이터베이스 상에서 완전히 제거하는 것이고, 논리 삭제는 데이터를 남겨두되 컬럼을 별도로 만들어서 삭제 여부를 확인하는 것이다. 보통 삭제일시 컬럼의 null 여부 또는 삭제여부 컬럼의 true와 false 값을 확인한다. 논리 삭제의 경우에는 데이터를 삭제하지 않으므로 결과적으로는 특정 컬럼을 update 한다. 이때 @SQLDelete 라는 어노테이션을 유용하게 사용할 수 있다. 이 어노테이션은 데이터를 삭제하는 로직을 작성하면, 데이터를 삭제하는 대신에 미리 설정한 특정 컬럼의 값을 변경해준다. ..

DB/JDBC & JPA 2024.01.31

[JPA] @CreatedDate와 @LastModifiedDate

어떤 정보를 관리할 때 데이터의 생성된 날짜와 수정된 날짜를 저장해야되는 경우도 있다. 일일이 저장할 수도 있겠지만, 이 어노테이션을 이용하면 별도의 코드 없이도 자동으로 저장하게 할 수 있다. @CreatedDate는 데이터의 생성일을, @LastModifiedDate는 데이터의 마지막 수정일을 저장한다. 이 어노테이션들은 다음과 같이 사용할 수 있다. import jakarta.persistence.Entity; import jakarta.persistence.EntityListeners; import java.time.LocalDateTime; import org.springframework.data.annotation.CreatedDate; import org.springframework.data..

DB/JDBC & JPA 2024.01.29

[데이터베이스] 정규화와 반정규화

정규화(normalization)란 ERD 내에서 중복을 찾아 제거해 나가는 과정이다. 관계형 데이터베이스에서 동일한 정보는 한 곳에서만 관리해야 한다. 동일한 정보가 여러 곳에 중복하여 존재하면 정보가 일관되지 않는 등 여러 문제가 발생한다. 이론적으로는 5차 정규화까지 있지만, 대부분 3차 정규화까지만 실행한다. 정규화된 데이터 모델은 일관성, 정확성, 단순성, 비중복성, 안전성 등을 보장한다. 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다. 정규화를 잘할 수 있게 되는 것도 중요하지만 정규화가 필요 없도록 모델링을 하는 것이 더 바람직하다. 실제로 정규화를 잘 이해하고 있는 설계자는 정규화를..

DB 2023.12.21