프로그래밍 일기 — 데이터베이스

데이터베이스의 여러 방언에 대해 알아보았습니다.

SQL은 데이터베이스를 활용해 다양한 작업을 할 수 있게 해주는 쿼리언어입니다. 그런데, SQL도 여러 목적에 따라 5개의 방언으로 나뉘어집니다. 마치, 한국어가 경상도, 충청도, 제주도, 전라도 등의 지역에 따라 언어가 조금씩 다른 것처럼 말이죠.

DDL은 데이터베이스의 구조와 객체를 정의하는 언어로써, 직접적인 데이터를 다루지는 않습니다. DQL은 데이터 스키마사이의 관계를 정의하는 방언입니다. DML은 데이터를 조작하는 명령어들의 집합으로써 아마 일반적인 사용자들이 가장 많이 활용하는 "표준어"라 할 수 있습니다. DCL은 데이터베이스에 대한 접근을 제한하는 보안 제어 목적의 언어라 할 수 있죠. 마지막으로 TCL은 데이터베이스에 여러 데이터 쿼리 작업을 한 번에 수행할 수 있게 해주며, 하나라도 작업이 실패시에는 전체 Transaction을 실패하게하여 데이터베이스의 안정성과 신뢰성을 높여주는 언어입니다.

SQL안에서도 그 목적에따라 명령문들을 다른 범위에 언어들로 구분하는 것은, 사용자로 하여금 특정 명령문이 어떠한 목적인지를 떠올리게하기에, 명령문들을 서로 효과적으로 구별하고 적재적소에 활용할 수 있게하는데 도움이됩니다. 앞으로도 특정 명령문이 어떠한 SQL의 방언으로 그룹되는지 떠올리면서, 각 상황에 따라 어떠한 명령문이 필요한지 조금 더 잘 상기할 수 있을 것 같다는 생각이 들었습니다. 이렇게 SQL을 다시 한번 여러 갈래로 세부적으로 그룹화 해놓은데에는 분명 이유가 있고, 그 이유는 SQL을 배우는 사람이 조금 더 효율적으로 쿼리 언어를 학습하여 활용하도록 하는 것이라는 생각이들어 감사하다는 마음이 들었습니다.

SQL의 여러 방언에 대해 정리해본 글을 공유합니다.

프로그래밍 일기 — 데이터 베이스 — Part 1

데이터의 정규화(Normalization)에 대해 학습했습니다.

데이터의 정규화란, 서로 의존성을 갖는 즉, 테이블 내에서 1대 다, 다 대1 등의 관계를 갖는 데이터를 별도의 테이블로 분리하여 두 테이블 사이에 기본키(Primary Key)와 외래키(Foreign Key)개념을 적용해 서로 관계를 짖는 과정을 말합니다. 이렇게하면 데이터베이스의 관리가 용이해지고, 한 테이블안에서 데이터끼리 복잡한 관계를 갖거나, 쓸떼없이 여러 컬럼이 생겨 메모리를 남용하는 것을 막을 수 있어 데이터베이스의 신뢰성을 높여줍니다.

먼저 여러 개의 나뉘어진 필드 값을 하나로 통합하여 테이블의 구조를 효율적으로 변경하는 것이 첫 번째 정규화(First Normal Form)이며, 이후 필드끼리 의존성을 갖는 것을 별도의 테이블로 분리하여 기본키/외래키로 관계를 정의한 것이 두 번째 정규화(Second Normal Form)입니다. 마지막으로 최대한 모든 테이블이 서로 관계를 테이블내에서가 아닌 테이블 밖에서만 키를 통해 정의할 수 있도록 분리된 상태에 이르면 세 번째 정규화(Third Normal Form)을 만족하게됩니다. 그 이상의 정규화(BNCF 등)는 일반적인 상황에서 거의 활용되지 않는 편입니다.

이렇게 데이터베이스의 정규화를 통해 데이터베이스의 관리를 용이하게하고 신뢰성을 높일 수 있지만, 모든 상황에서 이 방식을 적용할 수 있는 것은 아닙니다. 테이블내에서의 의존성을 없애기위해 모든 의존성을 갖는 필드를 별도의 테이블로 분리하면 지나치게 많은 테이블이 생겨날 수도 있기 때문입니다. 테이블이 너무 많으면 관계 표현이 복잡해지고, 데이터베이스가 참조해야하는 테이블이 많아지므로 성능에 영향을 줄 수 있습니다. 가장 좋은 것은 “변경이 잦은” 데이터에 정규화를 적용하는 것입니다.

데이터베이스가 별거 아닌 저장소 처럼 보여도, 나름 데이터의 인벤토리입니다. 실제 물류 세계에서 인벤토리를 관리하는 것이 굉장히 복잡하고 상당한 노하우를 요구하는 것처럼, 데이터베이스를 관리하는 것도 깊게 들어가면 정말 고도화된 분야라는 것을 알 수 있습니다. 조회하려는 데이터가 미묘할수록 SQL이 Subquery를 사용하면서 점점 더 복잡해 질 수 있는 것처럼, 데이터베이스를 관리하고, 데이터를 조회하는 것 역시 굉장히 전문화된 세계입니다. 괜히 DBA라는 직군이 IT에 존재하는 것이 아니라는 생각이 들었습니다.

데이터베이스의 정규화를 공부하며 정리한 글을 공유합니다.

프로그래밍 일기 — 데이터베이스 — Part 2

1 Like