본문 바로가기
MySQL

[SQL] 관계 차수

by 스응 2023. 3. 7.
728x90
728x90

관계 차수

#  1:1 관계

  - 두 개의 테이블 간에 각각 하나의 레코드만 매칭되는 관계

  - 주로 기본키와 외래키를 연결해서 관계 설정

  - 두 테이블 중 하나의 테이블에서만 외래키를 가질 수 있음

  - 1:1 관계를 보조적인 테이블로 활용할 수 있음

 

  - 1:1 관계를 사용하는 상황

      1) 테이블의 컬럼 중 일부가 NULL 값을 가지는 경우

      2) 특정 컬럼 값이 자주 변경되지 않는 경우

      → 1:1 관계를 사용하면 테이블의 정규화를 유지하면서도 데이터를 보다 효율적으로 관리 가능

 

      # 정규화 (추후 따로 포스팅 예정)

          : 데이터베이스 설계에서, 가능한 중복을 제거하고 데이터를 구조화하는 프로세스

            → 데이터의 일관성 & 유지보수성 & 검색 속도 개선

 

#  1:N 관계 (= N:1 관계)

  - 한 테이블의 레코드가 다른 테이블의 여러 레코드와 매칭되는 관계

      ex) 학교와 학생, 야구 팀과 야구 선수 등

  - 주로 기본키와 외래키를 연결해서 관계 설정

  - 관계 차수를 표현할 때, 특정 기준이 없다면 N:1보다는 1:N로 표현하는 것을 권장함

 

  - 부모 테이블은 하나의 레코드가 자식 테이블에서 여러 번 참조될 수 있음

  - 자식 테이블에서는 각 레코드가 부모 테이블에서 오직 하나의 레코드만 참조함

    ⇒ 1:N 관계

 

반응형
728x90

 

#  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;

 

 

 

320x100
반응형

'MySQL' 카테고리의 다른 글

[SQL] 함수 (숫자, 문자열, 날짜/시간)  (0) 2023.03.08
[SQL] 조인 (JOIN)  (0) 2023.03.08
[SQL] 기본키(PK)와 외래키(FK)  (0) 2023.03.07
[SQL] 인덱스  (0) 2023.03.07
[SQL] WHERE 조건절 & 연산자  (0) 2023.03.07

댓글