본문 바로가기

프로그래밍/Database

MySQL_관계 차수 1 : N 차수, 1 : 1 차수

반응형

관계형 데이터베이스 RDBMS 

: 릴레이션(Relation)이라는 용어는 관계형 데이터베이스에서 데이터의 저장 및 관리를 위한 개념으로, 테이블과 동일한 개념을 의미한다. 관계형 데이터베이스에서는 테이블을 여러 개 만들고, 이들 간의 관계를 설정하여 데이터를 구성한다.
 

관계 차수 종류

1 : 1 관계
- 두 개의 테이블 간에 각각 하나의 레코드만 매칭되는 관계
- 보통 기본키와 외래키를 사용하여 연결
 
1 : N 관계
- 한 테이블의 레코드가 다른 테이블의 여러 레코드와 매칭되는 관계
- 보통 외래키를 사용하여 연결
 
N : 1 관계
- 다른 테이블의 여러 레코드가 한 테이블의 레코드와 매칭되는 관계
- 보통 외래키를 사용하여 연결
 
N : M 관계
- 두 개의 테이블 간에 다수의 레코드가 매칭되는 관계
- 중간에 연결 테이블을 만들어서 각각의 테이블과 연결함으로써 구현
 
 

1 : N 차수

ex) 학교와 학생의 관계, 야구 선수와 야구팀의 관계
(관계 차순을 표현할 때 기준을 따로 두지 않는다면 N쪽 다수 쪽을 뒤로 표현하는 것이 좋다.)

학교와 학생 테이블 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE school(
    school_id INT PRIMARY KEY,
    school_name VARCHAR(20NOT NULL,
    city VARCHAR(20)
);
 
CREATE TABLE student(
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50NOT NULL,
    grade VARCHAR(3NOT NULL,
    school_id INT,
    FOREIGN KEY(school_id) REFERENCES school(school_id)
);
 
INSERT INTO school(school_id, school_name, city)
VALUES 
    (1'서울대학교''서울'),
    (2'고려대학교''서울'),
    (3'연세대학교''서울'),
    (4'한양대학교''서울');
        
SELECT * FROM school;
 
INSERT INTO student(student_id, student_name, grade, school_id)
VALUES 
    (1'홍길동''1학년'1),
    (2'김유신''2학년'2),
    (3'이순신''1학년'3),
    (4'유관순''3학년'1),
    (5'안중근''2학년'4);
SELECT * FROM student;
cs

→ FOREIGN KEY를 이용하여 REFERENCES [참조할 테이블명] (참조할 컬럼명)으로 관계를 맺어줌.
 

<결과 화면>

SELECT * FROM school
SELECT * FROM student

 

야구 선수와 야구팀의 관계

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- 야구 팀과 야구 선수 관계 1 : N
CREATE TABLE team(
    id INT PRIMARY KEY AUTO_INCREMENT,
    team_name VARCHAR(50NOT NULL
);
 
CREATE TABLE player(
    player_id INT PRIMARY KEY AUTO_INCREMENT,
    player_name VARCHAR(50NOT NULL,
    team_id INT,
    FOREIGN KEY(team_id) REFERENCES team(id)
);
 
INSERT INTO team(id, team_name)
VALUES
    (1'LG 트윈스'),
    (2'NC 다이노스'),
    (3'두산 베어스');
 
INSERT INTO player(player_id, player_name, team_id)
VALUES
    (1'허경민'1),
    (2'김하성'2),
    (3'최원준'3);
    
SELECT * FROM team;
SELECT * FROM player;
cs

 

 

1 : 1 차수

: MySQL에서 1 : 1 관계는 두 개의 테이블 간에 1 : 1 대응 관계가 있는 경우에 사용된다.

  1 : 1 관계를 사용하는 경우는 보통 테이블의 칼럼 중 일부가 NULL 값을 가지거나, 특정 칼럼의 값이 자주 변경되지 않는 경우이다. 

ex) 회원 정보와 회원 등급 정보

→ 회원 정보를 저장하는 테이블과 회원 등급 정보를 저장하는 테이블 각각의 기본키(PRIMARY KEY)와 외래키(FOREIGN KEY)를 연결하여 관계를 설정할 수 있다. 두 테이블 중 하나의 테이블에서만 외래키를 가질 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- 회원 정보와 회원 등급 정보 1 : 1 관계로 설계
 
CREATE TABLE `member` (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50NOT NULL,
    email VARCHAR(100), 
    address VARCHAR(100)
);
 
CREATE TABLE member_grade(
    member_id INT PRIMARY KEY,
    grade VARCHAR(10),
    point INT,
    FOREIGN KEY(member_id) PREFERENCES member(id)
);
 
-- 직원 정보와 직위 정보를 저장하는 테이블 설계 
CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50NOT NULL,
    hire_date DATE NOT NULL
);
 
CREATE TABLE employee_position(
    employee_id INT PRIMARY KEY,
    position VARCHAR(50NOT NULL,
    dismissal_date DATE,
    FOREIGN KEY(employee_id) PREFERENCES employee(id)
);
 
cs
반응형