MySQL

(DB)관계 차수란? -15

mynote6676 2025. 5. 13. 19:27

학습 목표

-관계형 데이터베이스에서 관계 차수(Relation Degree)의 개념 이해

-1:1, 1:N , N:M 관계의 특징과 설계 방법 학습

 

관계차수란

더보기

관계 차수 (Relation Degree)는 관계형 데이터베이스에서 두 테이블 간의 관계 복잡성을 나타내는 개념입니다.

관계는 테이블 간의 데이터 연결 방식을 정의하며, 주로 1:1(일대일), 1:N(일대다), N:M(다대다)로 나뉩니다.

 

 

혼동 주의 (용어 정리)

-테이블 차수 : 테이블 내컬럼 수 (예 :  tb_user의 컬럼 수 = 3)

-관계 차수: 두 테이블 간의 관계 유형 (예: 1:1, 1:N, N:M)

2. 1:1 (일대일) 관계 예시

더보기

사람(Person)테이블과 여권(Passport)테이블이 있다고 가정합니다.

 

사람(person)테이블과 여권( Passport ) 테이블이 있다고  가정합니다.

-1:1 관계는 한 테이블의 레코드가 다른 테이블의 단 하나의 레코드와 연결되는 관계로, 특정 테이블 속성을 분리하거나

선택적 데이터를 별도로 관리할 때 사용됩니다.

 

use school;

create tavle tb_person(
	person_id int auto_increment,
	name varchar(50) not null,
	primary key(person_id)
);

create table tb_passport(
	passport_id int auto_increment, 
    passport_number varchar(20) not null, 
    person_id int unique, 
    primary key(passport_id),
    foreign key(person_id) references tb_person(person_id)
);

insert into tb_person(name) values('홍길동'), ('김영희'), ('이철수');

insert into tb_passport(passport_number, person_id) 
values('p1234', 1), ('p2222', 2), ('p3333', 3);

select * from tb_passport;



3. 1:N (일대다) 관계 예시

더보기

고객(Customer) 테이블과 주문(Order) 테이블이 있다고 가정합니다.

 

 

-- 1 : N 관계 예시 
create table tb_customer(
	customer_id int auto_increment, 
    name varchar(50) not null, 
    primary key(customer_id)
);

create table tb_order(
	order_id int auto_increment, 
    product_name varchar(50) not null, 
    customer_id int, 
    primary key(order_id), 
    foreign key(customer_id) references tb_customer(customer_id)

 

 

4. N:M (다대다) 관계 예시

더보기

 

학생(student) 테이블과 **수업(course)**이 있다고 가정 합시다.

  • N:N (다대다) 관계는 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결되고, 반대로도 여러 레코드가 연결되는 관계입니다.

핵심 개념

  • 한 명의 학생은 여러 개의 수업을 수강할 수 있다.
  • 하나의 수업도 여러 명의 학생이 수강할 수 있다.
  • 이럴 땐 중간 테이블(보통 수강(student_course) 같은 이름)이 필요해요

N:M 관계를 테이블 2개로만 표현하는 것은 불가능합니다. 하지만 억지로 만들어 봅시다.

 

정리

관계형 데이터베이스에서는 N:M 관계를 직접 2개 테이블로 표현할 수 없습니다. 이를 해결하기 위해 중간 테이블(교차 테이블)을 사용해야 합니다. 중간 테이블은 두 테이블의 기본 키를 외래 키로 포함하며, 두 엔터티 간의 관계를 매핑합니다

중간 테이블 이름 짓기 권장사항

두 테이블 이름을 조합해 만든다 (가장 일반적)

예: student_course, user_role, author_book

  • 어떤 두 테이블의 관계인지 명확하게 드러남
  • 테이블을 보지 않고도 연결 목적이 보임

업무 용어에 따라 의미 있는 이름을 줄 수도 있다 (선택적)

  • enrollment (student + course 관계 = 수강)
  • subscription (user + newsletter 관계 = 구독)
  • assignment (employee + task 관계 = 할당)

 

CREATE TABLE tb_student (
  student_id INT AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (student_id)
);

CREATE TABLE tb_course (
  course_id INT AUTO_INCREMENT,
  title VARCHAR(50) NOT NULL,
  PRIMARY KEY (course_id)
);

CREATE TABLE tb_student_course (
  student_id INT,
  course_id INT,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES tb_student(student_id),
  FOREIGN KEY (course_id) REFERENCES tb_course(course_id)
);

-- tb_student 데이터 삽입
INSERT INTO tb_student (name) VALUES
('홍길동'),
('김영희');

-- tb_course 데이터 삽입
INSERT INTO tb_course (course_id, title) VALUES
(101, '자바'),
(102, '데이터베이스');

-- tb_student_course 데이터 삽입
INSERT INTO tb_student_course (student_id, course_id) VALUES
(1, 101), -- 홍길동: 자바
(1, 102), -- 홍길동: 데이터베이스
(2, 102); -- 김영희: 데이터베이스
  • N:M 관계 설계:
    • 중간 테이블의 기본 키는 두 외래 키의 조합으로 설정.
    • FOREIGN KEY 제약 조건으로 데이터 무결성 보장.

5. 관계 차수 개념 정리

더보기

관계 차수는 관계형 데이터베이스에서 두 테이블 간의 관계를 나타냅니다.

- 1:1 (일대일) : 한 레코드가 다른 테이블의 한 레코드와 매칭(예 : 사람과 여권)

- 1:N (일대다) : 한 레코드가 다른 테이블의 여러 레코드와 매칭(예 : 고객과 주문)

- N:1 (다대일) : 여러 레코드가 한 테이블의 한 레코드와 매칭(1: N의 반대 관점)

- N:M (다대다) : 여러 레코드가 서로 여러 레코드와 매칭, 중간 테이블 필요(예: 학생과 수업)