카테고리 없음

[8주차] 데이터베이스 6 -10일차

hooooolly 2024. 8. 5. 09:21

 

2024/07/29
데이터베이스 6일 차

 

6일 차에는 MySQL에서 제공하는 내장함수와 데이터 타입을 알아보고 대용량의 동영상 파일과 텍스트 파일을 데이터베이스에 업로드, 로컬 컴퓨터의 저장소에 다운로드해 보았다.

집계 함수를 통해 피벗 테이블의 형태로 특정한 그룹의 값을 구해보는 쿼리를 사용하고 JSON 오브젝트를 생성해서 JSON 형태로 데이터를 저장해 보았다.

json_search, json_remove와 같은 내장 함수를 쓰기도 했는데 JSON 객체에 저장되어 있는 데이터를 배열처럼 인덱스를 지정해서 삭제, 수정, 입력을 할 수 있었다.

-- json 오브젝트 생성하기
select json_object('name', name, 'height', height, 'year', birthYear) as '키 180 이상인 회원'
from usertbl
where height >= 180;

-- json 내장 함수
-- @json 변수에 json 형태의 객체 저장
set @json = 
'{
	"usertblEX" : [
		{"name": "임재범", "year": 1963, "height": 182},
		{"name": "이승기", "year": 1987, "height": 182},
		{"name": "성시경", "year": 1979, "height": 186},
        {"name": "성시경", "year": 2001, "height": 186}
    ]
}';

-- json_valid() : 제이슨 형식인지 체크 -> 문자열이 json 형식이면 1 반환, 아니면 0 반환
-- json_valid() : 제이슨 형식인지 체크 -> 문자열이 json 형식이면 1 반환, 아니면 0 반환
select json_valid(@json);

-- json_search() : 문자열을 검색해서 위치 반환
select json_search(@json, 'one', '성시경'); -- 하나의 필드만 리턴 -> \"$.usertblEX[2].name\"
select json_search(@json, 'all', '성시경'); -- 성시경이 있는 모든 필드 위치 리턴 -> [\"$.usertblEX[2].name\", \"$.usertblEX[3].name\"]

-- json_insert, json_replace, json_remove() 
select json_insert(@json, '$.usertblEX[0].date', '2024-07-29'); 
select json_replace(@json, '$.usertblEX[3].name', '임영웅');
select json_remove(@json, '$.usertblEX[0]');

 

 

 

2024/07/30
데이터베이스 7일 차

 

데이터베이스 수업도 이제 얼마 남지 않은 7일 차!

오늘은 내장 함수와 뷰, 인덱스에 대해 공부했다.

주요 내장 함수로는 아래와 같은데 모두 아주 자주 쓰는 함수들이기 때문에, 항상 잘 익혀두도록 하자.

 

그리고 Null 값과 함부로 논리 연산을 하거나 집계 함수를 통해 연산을 하게 되면 원치 않는 결과가 나오기 때문에 Null을 가장 신경 쓰며 쿼리문을 작성해야겠다고 생각했다!

 

뷰의 경우, 가상의 테이블을 만드는 것은 조인이 많이 필요한 테이블을 미리 정의할 수 있어 편리한 것만 알고 있었는데 이 외에도 여러 장점들이 있다는 것을 알게 되었다.

자주 사용하는 복잡한 질의를 뷰로 미리 정의해서 간단히 작성할 수 있고, 민감한 정보를 제외한 테이블을 사용할 수 있어 암호화가 가능하며, 사용자가 필요로 하는 정보만 뷰로 가공해서 사용할 수 있어 논리적 독립성을 제공한다는 장점을 알 수 있었다.

하지만 삽입, 삭제, 갱신 연산에서 많은 제약이 있다는 점과 인덱스 생성이 어려운 점에서 뷰를 사용할 수 있는 테이블에 제한이 있을 것이라고 생각한다.

 

MySQL 공식 문서 보러 가기! ->

 

MySQL :: MySQL 8.0 Reference Manual :: 14 Functions and Operators

Chapter 14 Functions and Operators Expressions can be used at several points in SQL statements, such as in the ORDER BY or HAVING clauses of SELECT statements, in the WHERE clause of a SELECT, DELETE, or UPDATE statement, or in SET statements. Expressions

dev.mysql.com

 

2024/07/31
데이터베이스 8일 차

 

오늘은 모델이란 무엇인지, 데이터 모델이란 무엇인지부터 시작해서 스타벅스 홈페이지를 보고 ERD를 통해 개념적 모델링을 하는 시간을 가졌다.

우선 기업에서 가장 중요시하는 것은 데이터 그 자체란 점과 데이터가 어떻게 흘러가는지에 대해 파악을 하는 것이 가장 먼저 해야 되는 것임을 알게 되었다

그래서 데이터 모델이란 결국 데이터를 어떻게 구성하고 조직화해서 (추상화) 데이터를 효율적으로 저장하고 관리할 것인지를 정의 내리는 방법이란 것이다.

개발자는 항상 데이터를 중심으로 기업과 사용자가 필요한 정보를 저장하고 전달하는 것을 고민해야 한다는 것을 깨달았다.

그럼 어떤 방법으로 저장하는 것이 유리하고 좋은 데이터 저장법이 되는지 정말 많은 고민을 하게 된다.

리소스, 응답 시간과 같은 서비스 측면에서도 데이터 모델의 구조에 따라 좋을 수도, 나쁠 수도 있기 때문에 뛰어난 백엔드 개발자라면 데이터 모델링에 많은 시간과 공을 들여야 한다고 깨닫게 되었다.

 

 

 

 

2024/08/1
데이터베이스 9일 차

 

새로운 달을 맞이하며 9일 차를 시작해 본다.

오늘은 데이터 모델링의 3가지 단계를 알아보면서 관계형 데이터베이스에서 발생할 수 있는 이상에 대해 알아보고, 이상을 최대한 줄이기 위한 방법에 대해 알아보았다.

데이터 모델링에는 개념적 설계, 논리적 설계, 물리적 설계로 이어지는 과정을 거치며 데이터베이스의 테이블(릴레이션)로 생성하게 된다.

이상이란 관계형 데이터베이스에서 데이터 삽입, 삭제 및 수정과 관련하여 발생할 수 있는 불일치 또는 오류를 말하는데 이상이 있으면 데이터베이스의 정상적인 동작을 방해하거나 데이터의 무결성과 일관성을 저해할 수 있기 때문에 개발자는 반드시 이상을 처리해야 한다.

이상은 여러 함수적 종속성(Functional Dependency, 릴레이션에서 속성 간의 관계)을 따지고 재설계해서 제거할 수 있는데, 이렇게 데이터베이스를 구조화하는 설계의 과정을 정규화(Normalization)이라고 한다. 

정규화를 통해 데이터 삽입 이상, 수정 이상, 삭제 이상을 최소화할 수 있고 데이터의 무결성과 일관성을 유지할 수 있기 때문에 데이터베이스 모델링 과정에서 정규화는 필수적이라 할 수 있다.

이 외에도 정규화를 거치면 데이터의 논리적 구조가 더 간결해져서 데이터를 검색할 때 효율적이고 유지보수성이 높아지는 장점이 있다.

그래서 오늘은 제1 정규형, 제2 정규형, 제3 정규형을 알아보고 각 단계에서 함수적 종속성을 제거해 보는 실습을 가졌다.

 

 

2024/08/2
데이터베이스 10일 차

 

정규화 : 관계형 데이터베이스의 설계에서 중복을 최소화하기 위해 데이터를 구조화하는 프로세스

목표 : 데이터 간의 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 목표를 둔다

특징 : 하나의 테이블에 중복된 데이터가 최소화(없도록) 되도록 한다

HOW : 엔티티 타입을 도출하고 상호 종속적인 관계를 갖는 엔티티의 속성과 타입을 정리한다. 정규화 과정을 이용하여 엔티티의 데이터를 분석한다. 데이터를 검증하기 위한 더미 데이터를 삽입하고 데이터를 가장 잘 표현할 수 있는 엔티티 타입을 정의한다.

정규화 과정 :  1 - 2 - 3 - BCNF - 4 - 5 (3 정규화가 끝나면 안티패턴은 해결된다)