본문 바로가기

Database

(7)
Database - Relationship - Terminologies and types Cardinality Ratio Constraint 관계가 있는 두 엔티티에 대해서 한 개체가 다른 개체와 어떤 관계에 있는가 나타내는 제약조건이다 그런데 주의할점은 이걸 ER 다이어그램으로 만들때 조금 헷갈리는게 있다. 이 예시에서 부모는 자녀가 둘 셋일수 있지만 자식은 부모가 하나 뿐이다. 1:M 관계인데, 1에 해당하는 parent 쪽에 1을 명시해주고, M에 해당하는 선 위에 M을 표시하면 된다 (이거 막상 해보면 은근히 헷갈린다!) Participation Constraint(참여 제약조건) 관계가 있는 두 엔티티에 대해 한 개체가 다른 개체에 얼마나 의존하는가 하는 개념이다. 예를들어, 학생이 대학에서 과목을 수강한다면, 학생은 A과목을 수강해도 되고, 안해도 된다. (물론 이러다간 유급당하지..
Database - Basics of ER Model 왜 이 강의를 수강하는지?(Udemy) from Database Management System from Scratch by Vignesh 1. 본인은 나름 싱가포르에서 어학연수 경험해봤기에 인도식 영어의 발음에 굉장히 익숙함 (인도식 억양에 굉장히 적응못하는 사람들이 은근 있음) 2. 컴공 다니는 느낌좀 나게 하려고 (이분은 화이트보드에 필기를 하신다. 학교에서 수업듣는것 같음) 3. 그동안 Mysql이나 Postgres도 깔짝깔짝 써봤지만 좀 깊게 들어갈 필요가 있을것 같다. 간단한 개요는 이렇고... 본인 역시 노트에 선생님이 화이트보드에 필기하신걸 받아적는데 그걸 그대로 올리기는 어려워서 한국어로 번역하고 구글링으로 살을 붙여 업로드 해보려 한다. Entity와 Attribute 데드바이 데이라이..
Index가 무엇인가? 그리고 장 단점 정리 두꺼운 책 맨 뒤(혹은 앞)에 있는 '색인' 이 이거라고 보면 된다. 뭐 예를들어 자바스크립트 책을 공부하는데 갑자기 함수를 공부하고 싶으면 색인(index)를 찾으면 된다. 1장 변수 12p 1.1 var의 정의 1.2 let의 정의.. 2장 함수 25p 2.1 함수 정의와 선언 2.2 콜백함수 미리 색인을 설정해 놓으면 25p로 바로 갈수 있는 원리와 비슷하다 또 다른 비유를 들자면, 도로 표지판이라고 보면 된다 내가 원하는 데이터를 찾기위해 떠나는 여정(?)이라고 할까? '저 서울에서 부산 가려고 하는데 어떻게 가요?' '아 일로 가면 대전으로 가고요, 대전에서 대구 가고요, 대구에서 부산가면 됩니다' 먼저, 우리가 어떤 정보를 조회하는 쿼리를 작성하면 내부적으로 한줄 한줄 조회하여 (full ta..
Postgresql 내부 살펴보기 내 DB는 어떻게 저장되는가? Mysql등을 쓰면서도 한번도 생각 안해본 주제이다. 어떻게 동작하는지 알면 최적화도 쉽게 할거라는 생각에서 이걸 공부하게 되었다. 먼저 포스트그레스가 설치된 폴더에서, data폴더에 base라는 폴더가 또 있다. 거기 들어가보면 왠 숫자들이 있고, 이것의 정체는 다음과 같다 우리가 만들었던 폴더들이 아래에 보인다. templete폴더는 어... 일종의 복사본 같은건데 이건 나중에 또 설명할 기회가 있으니 우선 패스. 그럼 내가 만들었던 instagram_clone폴더에 가면 8kb 단위의 수많은 파일들이 있다. 이게 바로 우리가 저장한 데이터 들인데... heap 파일이라고 부른다. 파일을 뜯어보면 users 테이블의 정보나 hashtag id, primary key, 그..
Instagram DB practice(1) (유데미 stephen grider 강사의 sql, postgresql 강의를 참고했습니다) DB 설계 자체는 그렇게 어렵지 않았다. 이전에도 미니프로젝트 등에서 몇번 해 봤기 때문에... (그런데 웃긴건 ORM을 몇번 썼다고 SQL을 다 까먹었더라... 그래서 지금 더 SQL쪽을 하고 있다) 사실 Instagram 전부를 했다기 보다는 그냥 포스팅, 유저정보 정도? 우선 내가 짜보고 강의를 통해 확인했는데, 두세가지 정도 알게된 사실이 있다. 1. created_at 과 updated_at 둘다 쓰지 않을때도 많다! - 사실 내가 DB 설계할때는 거의 이 두가지(생성날자, 업뎃날자)는 쌍으로 붙어 다녔는데 updated_at은 '좋아요' 기능 혹은 '해쉬태그' 기능에는 필요가 없다. 왜냐. 좋아요는 업..
COALESCE와 ::(double colon) 의미 COALESCE(병합) 은 어떨때 쓰는가? SQL은 굉장히 직관적이다 SELECT 는 말 그대로 선택이고 MAX는 최대값, JOIN은 합치기 등등.. 근데 유난히 이 COALESCE는 한국어로 병합인데 이건 좀 이해하기 힘들더라... 어쨋건... 이걸 쓰는 이유는 Null값을 다루기 위해서다. CREATE TABLE purchase_log ( purchase_id varchar(255) , amount integer , coupon integer ); INSERT INTO purchase_log VALUES ('10001', 3280, NULL) , ('10002', 4650, 500) , ('10003', 3870, NULL) ; 이 상태에서 할인가격을 구하려면 amount 에서 coupon을 빼야 할..
Check 키워드로 제약조건 설정(DB Validation) 하기 DB에서 Validation 설정하기 Validation은 이전에 Node와 Nest.js를 하면서 각종 라이브러리를 사용해봤다 (JOI나 express-validator, Nest Interceptor 등...) 그런데 DB에서 자체적으로 Check를 통해 Validation을 수행할수 있다는건 처음 알게 되었다. 그런데 사실 Validation이 중요한 작업이긴 한데... 사실 좀 귀찮은것도 사실이다. 하지만 그럼에도 DB에도 최대한 안전장치를 걸어두면 좋은 이유가 있다. 예를들어 Node.js를 사용하다가, Go로 개발할 일이 생겼다고 가정해보자. 그런데 실수로 Go로 개발한 부분이 Validation을 빼먹거나, 오류가 생기는 상황이 생긴다면? DB에 Validation에서 그런 상황을 막아주게 ..