[SQL] 관계 차수

2023. 3. 7. 18:41·SQL
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'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
'SQL' 카테고리의 다른 글
  • [SQL] 함수 (숫자, 문자열, 날짜/시간)
  • [SQL] 조인 (JOIN)
  • [SQL] 기본키(PK)와 외래키(FK)
  • [SQL] 인덱스
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    git
    SQL
    tailwindcss
    java
    errorNote
    zapier
    vuejs
    php
    js
    jQuery
    Wordpress
    HTML
    CSS
    SpringBoot
    SEO
    Codeigniter
    면접
    티스토리챌린지
    Android
    C#
    cs
    SWAGGER
    Swing
    jsp
    http
    오블완
    개발일지
    typeScript
    Hotkeys
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[SQL] 관계 차수
상단으로

티스토리툴바