데이터모델링
데이터 모델링이란 구축할 DB 구조를 약속된 표기법에 의해 표현하고 설계해 나가는 과정을 의미
데이터모델링 단계
- 개념적 데이터 모델링
추상화된 DB구조를 그리는 것
- 논리적 데이터 모델링
각종 ERD 툴을 사용하여 구체적으로 데이터베이스 설계. 각 데이터의 타입, 관계, key등을 지정
- 물리적 데이터 모델링
실제 데이터베이스를 만드는 과정이고, SQL 작성이 여기에 해당
테이블들의 참조관계
1:n
n:1
1:1 - 1:1을 보장하기 위해서는 fk에 unique조건을 적용
n:m
만약 여러 author가 하나의 게시글을 수정할 수 있다면 n:m관계
한 게시글에 여러 저자를 저장해야하는데 author_id에 리스트가 들어갈 수 없으므로 문제가 있음
n:m 관계는 정규화에 위반될 가능성이 있음
연결테이블을 만들어 1:n, n:1 관계로 풀어주는 것이 일반적인 해결책
author_post와 같은 교차 테이블(Junction Table) 필요
optional / mandatory
관계가 있는 테이블에서 A 테이블이 있으면 꼭 B테이블이 있어야 하면 mandatory
not null을 사용하여 적용시킴
B테이블이 없어도 되면 optional
1:1 관계 분리 필요성
테이블을 나누면 프로그램도 나누기 때문에 영향도를 줄일 수 있음
→ 도메인의 명확한 분리
→ 유지보수성 상승
업그레이드된 board 테이블 설계
CREATE table author (
id int primary key auto_increment,
name varchar(255), email varchar(255) not null unique,
created_time datetime default current_timestamp);
CREATE table post (
id int primary key auto_increment,
title varchar(255) not null,
contents varchar(3000));
CREATE table author_post (
id int primary key auto_increment,
author_id int not null,
post_id int not null,
foreign key(author_id) references author(id) on delete cascade on update cascade,
foreign key(post_id) references post(id) on delete cascade on update cascade) ;
CREATE table author_address (
id int primary key auto_increment,
city varchar(255),
street varchar(255),
author_id int not null unique,
foreign key(author_id) references author(id));
정규화
- 1차 정규화(도메인 분해)
각 열에는 하나의 값만 있어야 함을 의미→ 하나의 컬럼에 여러 원자값이 존재시, 조회조건을 통한 조회 어려움 발생
- 2차 정규화(부분종속 제거)
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속된 상태를 의미
사실상 해당 테이블에 어울리지 않는 컬럼 분리 작업
- 3차 정규화(이행종속(transitive depency)제거)
기본키에 이행적 함수 종속이 되지 않아야 한다는 말은, 기본키가 아닌 다른 속성에 종속적인것이 문제가 되는 것. 이는 사실상 독립된 테이블로 분리되어야 할 성격의 컬럼들임을 의미.
Dump
# local에서 sql 덤프 파일 생성
mysqldump -u root -p board > dumpfile.sql
# 한글 깨질 때
mysqldump -u root -p board -r dumpfile.sql
# dump 파일을 github에 업로드
# 리눅스에서 mariadb 설치
sudo apt-get install mariadb-server
# mariadb 서버 시작
sudo systemctl start mariadb
# mariadb 접속 테스트
sudo mariadb -u root -p
# git clone 받기
git clone 리포지토리
# 덤프 파일을 통해 데이터베이스 복원
mysql -u root -p board < dumpfile.sql
'Database' 카테고리의 다른 글
Redis 설치 및 접속하기 (0) | 2024.05.24 |
---|---|
mariadb 사용자 관리와 프로시저 (1) | 2024.05.23 |
mariadb join, union, subquery, group by (1) | 2024.05.22 |
트랜잭션의 이해와 JOIN (0) | 2024.05.20 |
Database 데이터 타입과 제한 조건 (0) | 2024.05.17 |