RDMBS의 정규화
RDBMS의 정규화 - 데이터베이스 설계를 최적화하는 프로세스로, 중복 데이터를 제거하고 데이터 무결성을 유지하는 데 중점을 둠.
정규화는 여러 단계로 나뉘며, 각 단계는 다음 조건들을 충족해야 함.
제1정규형(1NF)
- 모든 레코드는 '유일한 키'에 의해 식별돼야 함. 이는 중복 데이터를 방지하며, 각 레코드를 유일하게 식별할 수 있는 기본 키를 설정함으로써 달성됨.
제2정규형(2NF)
- 제1정규형을 충족하고, 부분적 함수 종속성이 없어야 함. 즉, 테이블의 모든 속성이 기본 키에 완전히 종속돼야 함. 이는 데이터 무결성을 더욱 강화함.
제3정규형(3NF)
- 제2정규형을 충족하고, 이행적 함수 종속성이 없어야 함. 즉, 키가 아닌 모든 속성이 기본 키에만 직접적으로 종속돼야 함. 이는 불필요한 데이터 종속성을 제거하여 중복을 더욱 줄임.
이 외에도 BCNF, 제4정규형, 제5정규형 등이 있지만 대부분의 경우 제3정규형까지만 적용해도 충분.
정규화는 중복 데이터를 제거함으로써 디스크 공간을 절약하고, 데이터 무결성을 향상시킴. 그러나 너무 많이 정규화하면 오히려 쿼리 성능이 저하되므로, 성능과 무결성 사이에서 적절한 균형을 찾아야 함.
Primary Key, Foreign Key
Primary Key와 Foreign Key는 Spring 프레임워크에서 데이터베이스와 상호작용할 때 중요한 역할.
1. Primary Key (기본 키)
- 기본 키는 데이터베이스 테이블에 있는 각 레코드를 유일하게 식별하는 열(또는 열의 집합). Spring에서는 JPA (Java Persistence API)를 이용해 Entity 클래스에 @Id 어노테이션을 사용하여 기본 키를 정의.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
- 위의 코드에서 @GeneratedValue 어노테이션은 기본 키 생성 전략을 지정합니다. GenerationType.IDENTITY는 데이터베이스가 자동으로 ID를 생성하도록 합니다.
2. Foreign Key (외래 키)
- 외래 키는 한 테이블의 필드(또는 필드의 집합)가 다른 테이블의 기본 키를 참조하는 것. 이는 두 테이블 사이의 관계를 설정하고, 데이터 무결성을 유지하는 데 도움됨. Spring에서는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 등의 어노테이션을 사용하여 관계를 정의.
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// ...
}
- 위의 코드는 User와 Post 사이에 1:N 관계를 정의함. @ManyToOne 어노테이션은 Post와 User 사이에 다대일 관계를 정의하고, @JoinColumn 어노테이션은 외래 키로 사용할 열을 지정.
이 때, 외래 키는 레코드가 참조 무결성을 유지하도록 보장. 즉, 외래 키 값은 반드시 참조하는 테이블의 기본 키 값을 가진 레코드가 존재해야 함.