DATABASE

태태코딩 - DB 설계 입문/실전

태태코 2024. 12. 21. 17:31
반응형

1. 공부하는 법.

단순 듣기, 단순 코드따라치기가 아닌 , 자신만의 언어로 바꿔라 (ex 블로깅, 기록)

 

2. 파레토 법칙

현업에서 사용하는 20% 만 알아도 80%의 효과를 낼 수 있다.

자주사용하는 20%만 확실하게 알자 !  완벽주의 성향 --> 나.. 그렇게 공부했지만 너무 오래 걸렸다.. 실전에 적용해보자.

 

3. First wood

이해가 안되는 언어가 많을 수록 어려운 분야라고 생각한다.

효율적인 공부를 하기위해서는 이해가 안되는 언어일 수 록 가장 먼저 정리를 해야한다.

 

데이터베이스 모델링이란?

 

정의: 웹 서비스나 모바일 어플리케이션을 운영하면서 발생하는 데이터를 잘 분류해서 데이터를 저장해 놔야한다.

즉 : 데이터를 어떻게 분류해서 저장할 지를 설계하는 행위를 보고, 데이터베이스 모델링(Database modeling)이라고 표현한다.

 

데이터모델링을 왜 배워야하는지 ?

 

사람마다 옷장에 옷을 정리하는 방법은 다르다. 하지만 효율적으로 옷장에 옷을 저장하는 방법은 있다. 최소한 내가 옷을 꺼내 입을 때 편하게 찾을 수 는 있어야한다.

 

관계형 데이터베이스

1. 열과 행으로 나누어져있다.

 

2. PK: 특정 데이터를 식별하기 위한 값 ex) 쌍둥이나, 비슷한 사람들을 구별하기 위한 특정 요소(주민 번호)

현업에서 PK를 설정할 때: 주민번호, 이메일로 PK로 설정하는 방법을 볼 수 있다. 하지만, 바뀔 가능성이 존재한다.

 

PK가 바뀌게되면 특정 데이터를 식별하던 값이 바뀌어서 데이터를 관리하거나 사용하는 입장에서 혼돈이 올 수 있다.

즉: 주로 Auto Increment나 UUID로 설정을 많이한다.

 

3. FK:  두가지 개념에 대해서 저장을 할 때  한 가지 개념에 연관되는 다른 개념의 PK를 담아 두는 것 이때 담긴 PK가 FK라고한다.

즉 관계를 맺기 위한 쓰는 키이다.

 

무결성: 결점(모순되는 점)이 없도록 유지하는 특성

 

DB Naming 규칙

1. 테이블명, 컬럼명 -> 소문자로 작성

 

2. snack_case를 사용한다.

 

3. 축약어 사용하지 않는다.

 

4. sql문을 작성할 때 예약어만 대문자로 표현하라.(가독성을 위하여)

 

 

데이터베이스 설계 

"중복 없애기"

 

상황 1:

외래키를 바뀔 수 있는 속성을 넣으면, 조회 수정 삭제 시에 모순이 생기게 된다. 중복되는 데이터가 많을 수 록 그 작업은 더 어렵게 된다.

-> 이상현상

 

즉: 데이터 중복으로 인해 일어나는 현상이 이상현상이고 이를 줄이기위해 중복을 없애는 작업정규화라고 한다.

 

 

*DB 설계 전체 과정*

 

1. 저장해야 하는 데이터를 확인하자. 

ex) UI를 통해 대략적인 데이터를 확인하자.

 

 

2. 그룹핑해서 분류하기.

관련성 있는 것 끼리 분류하기.

 

그룹핑 된 하나의 그룹을 보고 -> Entity라고한다. => 약간 다르긴 한데 데이터베이스의 테이블이라고 보면 된다.

 

ex) 아이디, 패스워드, 이름, 이메일 -> 사용자.

       영화이름, 영화에 출연한 배우, 영화 사용시간 -> 영화

       게시글 제목, 게시글 내용, 게시글 생성시간 -> 게시글

 

 

3. 6가지 규칙 적용하면서 테이블 분리해나가기.

 

 

6규칙

 

규칙1 : 한칸에는 한가지 정보만 들어가도록 만들어라.

ex) 사용자 이름 | 이메일 : js123@example.com, jw123@example.com

count하거나 ,를 신경써야하기때문에 사용하면 안된다.

 

해결방안: 이메일을 테이블로 만들어서 분리해라.

한칸의 두가지 정보가 있을 경우 테이블을 새로 만들어서 1:N으로 만들어야한다는 것이다.

 

 

규칙2: 어떤 테이블에 FK를 넣어도 규칙1을 못지킬 때는 중간 테이블을 하나 더 만들어라.

위의 예시를 보았을 때 N에 FK를 넣었을 때 해결이 되었었는데. 안되는 경우가 있다. -> N:M

 

해결방안:  중간 테이블을 하나 더 만들면 된다. 

 

 

엔티티 관계 파악 방법:

 

1.A가 B를 | B가 A에 의해 

 

ex) 사용자가 이메일을 "소유한다"

       이메일은 사용자에 의해  "소유 되어진다."

 

     서비스의 관점에서 생각해야한다.

 

2. 하나의 A는 (하나의 or 여러개의) B를 | 하나의 B는 (하나의 or 여러개의) A에 의해

 

ex) 하나의 사용자는 여러개의 이메일을 소유한다.

       하나의 이메일은 한 명의 사용자에 의해 소유되어진다.

 

 

3.  관계 판단

예제: 사용자, 프로필



1.

사용자는 프로필을 가진다.

프로필은 사용자에 의해 소유된다.



2.

한명의 사용자는 하나의 프로필을 가진다

하나의 프로필은 한명의 사용자에 의해 소유된다



3.

1:1이다.

 

 

팁: 

1. 두가지의 관계의 동사를 찾는다 -> 소유한다, 가진다, 판다

 

2. 관계를 찾는다. 아래 방법 참고

하나의 A는 ? B

하나의 B는 ? A 의 수를 파악한 후 N:M을 설정한다.

 

 

팁: 

1. N쪽에 무조건 FK 가 들어가야한다.

 

2. 1:1 관계는 아무곳에 FK를 넣어도 된다.

 

3. FK의 중복은 중복으로 보지않는다.

 

 

가짜중복과 진짜 중복을 구별해라.

 

실제서비스에서 A데이터의 값을 수정하면 B의 값도 수정해야하는가? -> 데이터 중복을 찾는 방법

하나의 컬럼을 수정했을 때 같은 값을 가진 같은 컬럼의 값도 변경을 해야하는가??

 

숨은 중복을 찾아라 

하나의 데이터를 수정/삭제 할때 한 번의 수정을 더 해야할 경우를 말한다

ex) 합계가 컬럼안에 들어가서 하나의 테이블에 내용을 수정/삭제 했는데 다른 테이블의 합계를 같이 수정해줘야하는 경우

 

반응형

'DATABASE' 카테고리의 다른 글

태태개발일지 - 공유락, 베타락  (1) 2024.12.12
태태개발일지 - DB Lock  (1) 2024.10.23
태태개발일지 - Join  (3) 2024.10.13
태태개발일지 - DB 관계 데이터 모델링  (4) 2024.10.06
태태개발일지(sql)  (0) 2023.12.15