백엔드 심화
DBMS
데이터베이스 : 데이터를 효율적으로 관리하기 위해! 중복을 막고, 빠른 데이터 연산을 가능하도록 한다
DBMS 데이터베이스를 관리하는 시스템
오라클, MYSQL, MariaDB 엔진의 순위는 크게 바뀌지 않는다.
MYSQL이랑 MariaDB는 부모가 같아서 거의 비슷한 엔진이다.
RDBMS 데이터 간 관계
column 컬럼 > 속성, 세로줄
row 행 > 데이터, 가로줄
게시글 번호 (Pk) | 제목 | 내용 | 작성일자 | 수정일자 | 작성자 | 직업 | 생년월일 |
1 | 파묘 감독 | 천만영화 | 2024-02-22 | 2024-02-22 | 장재현 | 감독 | 810101 |
2 | 풍수사 | 최종보스 무찌름 | 2022-12-19 | 2022-12-19 | 최민식 | 배우 | 620530 |
3 | 무당 | 일본어 잘함 | 2020-03-01 | 2020-03-01 | 김고은 | 배우 | 910702 |
4 | 장의사 | 대통령도 염함 | 2019-04-05 | 2019-04-05 | 유해진 | 배우 | 700104 |
5 | 법사 | 엠지 힙함 | 2019-09-03 | 2019-09-03 | 이도현 | 군인 | 950411 |
6 | 예쁜 무당 | 백상 최우수 연기상 | 2024-05-07 | 2024-05-07 | 김고은 | 배우 | 910702 |
각 데이터는 유일성 uniqe를 만족해야 한다.
PK 기본키 : 해당 테이블의 각 행을 유일하게 구별할 수 있는 key 값
데이터 중복 해결 > 정규화
정규화 : 테이블을 쪼갠다. 중복 방지 > 성능 문제, 이상현상 발생 > 반정규화 > 데이터 일관성, 무결성 문제 발생 > …
실무에서는 3정규화까지만 사용된다
분리
사용자
사용자 번호 | 이름 | 직업 | 생년월일 |
1 | 장재현 | 감독 | 810101 |
2 | 최민식 | 배우 | 620530 |
3 | 김고은 | 배우 | 910702 |
4 | 유해진 | 배우 | 700104 |
5 | 이도현 | 군인 | 950411 |
게시글
게시글 번호 (Pk) | 제목 | 내용 | 작성일자 | 수정일자 | 사용자 번호 |
1 | 파묘 감독 | 천만영화 | 2024-02-22 | 2024-02-22 | 1 |
2 | 풍수사 | 최종보스 무찌름 | 2022-12-19 | 2022-12-19 | 2 |
3 | 무당 | 일본어 잘함 | 2020-03-01 | 2020-03-01 | 3 |
4 | 장의사 | 대통령도 염함 | 2019-04-05 | 2019-04-05 | 4 |
5 | 법사 | 엠지 힙함 | 2019-09-03 | 2019-09-03 | 5 |
6 | 예쁜 무당 | 백상 최우수 연기상 | 2024-05-07 | 2024-05-07 | 3 |
사용자 테이블 : 사용자번호 PK
게시글 테이블 : 사용자 번호 FK 외래키
외래키 Foreign key : A 테이블에서 B 테이블의 데이터를 사용하기 위해, B 테이블의 PK(되도록 후보키 이상)를 A 테이블의 FK로 사용한다.
정규화 장단점
중복을 최소화 했지만, 데이터 접근성에서 성능저하가 발생한다.
게시글 > 사용자 접근 가능하지만, 사용자 > 게시글 접근이 안된다.
데이터베이스 "테이블 간 어떤 관계를 가지고 있는지" 연관관계는 1:1, 1:N, N:M 관계가 있다
게시글, 사용자의 경우 `N:1`의 관계 VS `1:1`의 관계
분리 연관관계
- 게시글 > 사용자 데이터 확인 가능 : 연관 관계 파악
- 사용자 > 게시글 데이터 확인 불가능
현업? DBA 설계 전문가!
+ 구현을 들어가보면, SQL 꼬이거나, 너무 많거나, 길때 > 재설계
유튜버 채널 ERD 고려하기
사용자 1 > 채널 N = 1:n
채널 1 > 사용자 1 = 1:1
분리 연관 관계
- 채널 > 사용자 데이터 찾을 수 있음
- 사용자 > 채널 데이터 찾을 수 없음(X)
채널 번호 id | 채널명 | 구독자 수 | 영상 수 | 채널 주인 | 회원 id | 비밀번호 | 연락처 |
1 | 닷다라다나닷 | 1 | 11 | 채다희 | da | 1111 | 010-1111-1111 |
2 | 닿 | 20 | 22 | 채지희 | ji | 2222 | 010-2222-2222 |
3 | 닿망징창 | 33 | 30 | 채다희 | da | 1111 | 010-1111-1111 |
4 | 십오야 | 7000000 | 600 | 예슬피디 | yeah | 3333 | 010-3333-3333 |
5 | 신서유기 | 6666666 | 300 | 나영석 | na | 4444 | 010-4444-4444 |
회원 id는 독립적이다
채널 분리
채널 번호 id | 채널명 | 구독자 수 | 영상 수 | 회원 id |
1 | 닷다라다나닷 | 1 | 11 | da |
2 | 닿 | 20 | 22 | ji |
3 | 닿망징창 | 33 | 30 | da |
4 | 십오야 | 7000000 | 600 | yeah |
5 | 신서유기 | 6666666 | 300 | na |
회원
회원 id | 비밀번호 | 연락처 |
da | 1111 | 010-1111-1111 |
ji | 2222 | 010-2222-2222 |
yeah | 3333 | 010-3333-3333 |
na | 4444 | 010-4444-4444 |
MariaDB 실행
CUI로 사용하는 방법
mariadb에서 Workvbench 사용하는 방법에 대해 설명되어 있고
아래 사이트에서 다운받을 수 있다.
☑️ 배운 점
RDBMS 만들기, ERD 만들기
그동안은 만들어져 있는 테이블의 SQL 작성하기, SQL 에 따른 테이블 결과가 어떻게 되는지 릴레이션 형식으로 작성하기, 정규화 등만 학습 및 실습해 보았는데
맨 처음 설계는 처음 해보아서 재미있었다.
특히 DBMS를 GUI로 다루는 방법이 기대된다~!!
영화관에서 n번 관람한 파묘 백상 4관왕 축하해~!!ㅋㅋㅋㅋㅋ