관계 차수
# 1:1 관계
- 두 개의 테이블 간에 각각 하나의 레코드만 매칭되는 관계
- 주로 기본키와 외래키를 연결해서 관계 설정
- 두 테이블 중 하나의 테이블에서만 외래키를 가질 수 있음
- 1:1 관계를 보조적인 테이블로 활용할 수 있음
- 1:1 관계를 사용하는 상황
1) 테이블의 컬럼 중 일부가 NULL 값을 가지는 경우
2) 특정 컬럼 값이 자주 변경되지 않는 경우
→ 1:1 관계를 사용하면 테이블의 정규화를 유지하면서도 데이터를 보다 효율적으로 관리 가능
# 정규화 (추후 따로 포스팅 예정)
: 데이터베이스 설계에서, 가능한 중복을 제거하고 데이터를 구조화하는 프로세스
→ 데이터의 일관성 & 유지보수성 & 검색 속도 개선
# 1:N 관계 (= N:1 관계)
- 한 테이블의 레코드가 다른 테이블의 여러 레코드와 매칭되는 관계
ex) 학교와 학생, 야구 팀과 야구 선수 등
- 주로 기본키와 외래키를 연결해서 관계 설정
- 관계 차수를 표현할 때, 특정 기준이 없다면 N:1보다는 1:N로 표현하는 것을 권장함
- 부모 테이블은 하나의 레코드가 자식 테이블에서 여러 번 참조될 수 있음
- 자식 테이블에서는 각 레코드가 부모 테이블에서 오직 하나의 레코드만 참조함
⇒ 1:N 관계
# N:M 관계
- 두 개의 테이블 간에 서로 다수의 레코드가 매칭되는 관계
- 중간에 연결 테이블을 만들어서 각각의 테이블과 1:N 관계로 연결함으로써 구현 가능
- 데이터 중복 최소화
- 데이터 일관성/정확성 유지
-- 예시
-- 학생 : 과목 = N : M 관계
CREATE TABLE student (
student_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
major VARCHAR(50) NOT NULL
);
CREATE TABLE subject (
subject_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
professor VARCHAR(50) NOT NULL
);
-- 연결 테이블 : 수강
-- 학생 : 수강 = 1 : N
-- 과목 : 수강 = 1 : N
CREATE TABLE enrollment (
enrollment_id INT PRIMARY KEY,
student_id INT NOT NULL,
subject_id INT NOT NULL,
FOREIGN KEY (student_id) REFERENCES student(student_id),
FOREIGN KEY (subject_id) REFERENCES subject(subject_id)
);
-- 서브쿼리와 JOIN을 이용해서 모든 컬럼 값 확인하기
SELECT *
FROM (SELECT *
FROM 연결테이블
LEFT JOIN 테이블1
ON 연결테이블.Key = 테이블1.Key) AS a
LEFT JOIN 테이블2
ON a.Key = 테이블2.Key;
'SQL' 카테고리의 다른 글
[SQL] 함수 (숫자, 문자열, 날짜/시간) (0) | 2023.03.08 |
---|---|
[SQL] 조인 (JOIN) (0) | 2023.03.08 |
[SQL] 기본키(PK)와 외래키(FK) (1) | 2023.03.07 |
[SQL] 인덱스 (0) | 2023.03.07 |
[SQL] WHERE 조건절 & 연산자 (0) | 2023.03.07 |