일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Nest.js
- mongoose
- flask
- game
- AWS
- OCR
- 게임
- JavaScript
- nestjs
- typeORM
- Queue
- MongoDB
- jest
- 정렬
- react
- Bull
- 자료구조
- Python
- 공룡게임
- Express
- dfs
- Sequelize
- MySQL
- TypeScript
- cookie
- nodejs
- Dinosaur
- class
- GIT
- Today
- Total
포시코딩
1월10일 본문
정규화, 역정규화
정규화
RDBMS를 관리하는데 있어서 꼭 해야하는 일로 정규화를 꼽을 수 있다.
여러 곳에서 공통적으로 쓰이는 값에 대해 중복을 제거하고
테이블 간의 relation을 만들어 사용하는게 그 예인데
이럴 경우 단점으로 join을 많이 써야 하는 상황에서 데이터 조회의 비용을 증가 시킨다.
그래서 나오게 된 것이 역정규화이다.
역정규화
개념에 대해서는 몰랐지만 나도 모르게 써본적은 있다.
MongoDB를 처음 쓰게 되면서 배울 때
보통은 그룹 테이블에 유저 id만 명시해 해당 유저의 정보를 가져와야되는 상황에선
해당 id값으로 유저 테이블을 조회하거나 애초에 유저와 그룹 테이블간에 join을 해야 됐었는데
그냥 그룹 테이블에 유저 id를 넣을 때 유저의 기타 정보들 까지 다 때려 박는 형식으로 쓰는걸 추천받았었기 때문이다.
확실히 그룹 정보를 가져올 때 당연히 유저 정보도 쓰는 상황이 있기 때문에
join 같은걸 하지 않아도 필요한 정보가 그때마다 다 있어서 편하긴 했다.
갈수록 DB 용량에 대한 비용적 부담도 적어지고 있기 때문에 나쁜 방법은 아니라고 본다.
하지만 아직까지는 어떤 상황에서 정규화를 거쳐야 하고 어떤 상황에서 역정규화를 통해
데이터 조회 비용 감소 효과를 가져가야 하는지는 살짝 감이 안오긴 한다.
이 부분은 나에게 앞으로 공부하면서 알아가야할 숙제인 것 같다.
참고한 곳
https://jaenjoy.tistory.com/15
Python 문법
max(), min()
단순히 list의 최대값, 최소값 구하는 함수인건 알았는데
[[2, 1], [1, 2], [2, 0], [1, 3]]
이런 형태의 list에 대해서도 사용이 가능했다.
일단 쓰임새를 알게된건 각 변이 축과 평행한 직사각형의 좌표를 받았을 때인데
해당 직사각형의 네 꼭짓점 좌표에 대해 max를 구하면 1시 방향 좌표, min을 구하면 7시 방향 좌표를 얻게 된다는 것이다.
여기서 나는 궁금증이 생겼다.
좌표의 x, y에 대해서 어떤 기준으로 max와 min을 리턴하는 것일까
python 내장 함수에 대한 공식 문서가 부실해서
여러가지 테스트 끝에 하나의 추측을 얻을 수 있었는데
def solution(dots):
print(max(dots), min(dots))
solution([[2, 1], [1, 2], [2, 0], [1, 3]])
# [2, 1] [1, 2]
위 결론을 볼 때
x에 대해 먼저 정렬하고 같은 값 중에서 y에 대해 정렬하는 방식인 것 같다.
따라서 x중 제일 큰 수인 2에 대해 정렬하고 그 중에서도 y가 제일 큰 [2, 1]이 max가 된 것이고
x중 제일 작은 1에 대해 정렬 후 그 중에서도 y가 제일 작은 [1, 2]가 min으로 리턴 된 것이라고 볼 수 있겠다.
최대공약수(gcd) 복습
자꾸 까먹어서 나올때마다 생각안나면 복습할 생각이다.
gcd 반복문으로 구하기
def gcd(a, b):
while b > 0:
a, b = b, a%b
return a
gcd 재귀로 구하기
def gcd(a, b):
if b == 0:
return a
return gcd(b, a%b)
'TIL' 카테고리의 다른 글
1월12일 (0) | 2023.01.12 |
---|---|
1월11일 - MySQL, CSS (0) | 2023.01.11 |
1월9일 (0) | 2023.01.09 |
1월8일 - 이 날의 다짐을 잊지 말자 (0) | 2023.01.08 |
1월7일 - count, sort, sorted (0) | 2023.01.07 |