관계형 데이터베이스 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(20) NOT NULL, city VARCHAR(20) ); CREATE TABLE student( student_id INT PRIMARY KEY, student_name VARCHAR(50) NOT NULL, grade VARCHAR(3) NOT 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 [참조할 테이블명] (참조할 컬럼명)으로 관계를 맺어줌.
<결과 화면>
야구 선수와 야구팀의 관계
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(50) NOT NULL ); CREATE TABLE player( player_id INT PRIMARY KEY AUTO_INCREMENT, player_name VARCHAR(50) NOT 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(50) NOT 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(50) NOT NULL, hire_date DATE NOT NULL ); CREATE TABLE employee_position( employee_id INT PRIMARY KEY, position VARCHAR(50) NOT NULL, dismissal_date DATE, FOREIGN KEY(employee_id) PREFERENCES employee(id) ); | cs |
'프로그래밍 > Database' 카테고리의 다른 글
MySQL_JOIN 구문 INNER JOIN, LEFT JOIN, RIGHT JOIN (0) | 2023.03.10 |
---|---|
MySQL_preparedstatement LIKE 쓰는 법 (0) | 2023.03.10 |
MySQL_UPDATE 구문과 WHERE 조건절, UNIQUE 제약 (0) | 2023.03.08 |
MySQL_INSERT 구문과 제약 사항 (2) | 2023.03.08 |
MySQL_테이블 생성과 제약 사항 (0) | 2023.03.06 |