데이터는 지금 이 순간에도 엄청난 양이 쌓여가는 중이다.
예를 들어 게임을 할 때에도 내가 이 게임을 얼마나 했는지, 몇시에 자주 하는지, 어떤 플레이 방식을 선호하는지 등의 수많은 데이터가 쌓이게 된다.
그런데 이렇게 데이터가 쌓이게 된다면 분명 어딘가에 저장이 되고 있을텐데 대체 어디에 저장되고 있는걸까?
데이터 베이스는
여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합.
이라고 정의할 수 있다.
앞서 말한 빠른 속도로 쌓이는 데이터는 바로 여기,
데이터 베이스에 쌓이고 있다고 보면 된다.
또한 데이터 베이스에는 여러 종류가 존재하는데
오늘은 그 중에서도 관계형 데이터베이스에 대해 알아보고자 한다.
관계형 데이터베이스는 서로간에 관계가 있는 데이터 테이블들을 모아둔 데이터 저장공간이다.
데이터 테이블은 여러개가 존재할 수 있는데, 각 테이블마다 저장된 데이터는 다 다른 특징을 갖게 된다.
게임을 예로 들자면 유저에 관한 데이터가 저장된 테이블, 그리고 아이템 구매내역에 관한 데이터가 저장된 테이블이 있을 것이다.
여기서 어떤 '유저'가 어떠한 '아이템을 구매'하게 된다면 유저 테이블과 구매내역 테이블 간에 관계가 성립하게 된다.
이러한 관계가 성립할 수 있는 테이블들을 한 곳에 모아둔 것이 바로 관계형 데이터베이스이다.
데이터 베이스를 설명하다보면 테이블이란 단어가 계속해서 나오는데, 여기서 말하는 테이블이란
행과 열로 구성된 데이터 모음
이라고 설명할 수 있는데 Row라고 하는 행과 Column(Field)이라고 하는 열로 구성되어 있는 만큼 엑셀과 굉장히 비슷하게 생겼다.
그리고 데이터 테이블을 구성하는 각 Column들은
Primary Key(PK) : 각 테이블마다 존재하는 고유의 id
Foreign Key(FK) : 서로 다른 테이블 간에 관계를 성립시키는 id
위의 두가지로 나눌 수 있다.
이해를 도울 간단한 예시로
1. 유저 정보 테이블
2. 아이템 구매 내역 테이블
위 두 개의 테이블이 있다고 했을 때, 유저 정보 테이블에서 유저의 계정은 PK이며 따라서 고유한 id가 된다.
만약 고유한 id가 아니라면 A라는 이름의 계정이 5개 있는 상황이 발생할 수 있고, 그렇게 되면 분명히 A가 아이템을 구매했는데 그 A가 5명 중에서 누군지 알 수 없는 상황이 발생하게 된다.
따라서 PK는 고유한 id여야 하며, 한 테이블마다 PK는 하나일 수 밖에 없다.
그렇다면,
아이템 구매내역 테이블에서 유저의 계정은 PK일까 FK일까? 또한 고유한 id일까?
아래의 구매내역 테이블을 예시로 들어보자.
Order_id | Order_Date | User_id | Champion | Item | Price |
---|---|---|---|---|---|
21011 | 2020. 11. 09 / 14:10 | A | Garen | Long_Sword | 350 |
21012 | 2020. 11. 09 / 14:18 | A | Garen | Cloth_Armor | 300 |
21013 | 2020. 11. 09 / 14:25 | B | Darius | Cloth_Armor | 300 |
위의 테이블을 보면, A라는 계정이 아이템을 두차례 구매하고 B라는 계정은 한차례 구매했다는 것을 알 수 있다.
이처럼 A가 아이템을 여러차례 구매했다면 구매내역이 여러번 남을 수 밖에 없고, 따라서 구매내역 테이블에 A의 계정은 여러번 저장 될 것이다.
즉, 구매내역 테이블에서 유저의 계정은 동일한 id가 중복해서 등장할 수 있다.
따라서 'FK이며, 고유하지 않은 id이다'가 정답이 된다.
그리고 구매내역 테이블에서는 Order_id, 즉 주문번호가 PK이며 고유한 id가 된다.
관계형 외에도 객체형, 문서형, 컬럼 패밀리형 등 데이터베이스의 종류는 다양하다.
이러한 관계형 외의 다른 데이터베이스는 비관계형 데이터베이스, 또는 NoSQL이라고도 불리는데 그 이유는 말 그대로 No SQL, SQL 언어를 사용하지 않는다는 뜻이다.
이런 다양한 데이터베이스 중에서도 관계형 데이터베이스가 주류로 사용되고는 하는데 그 이유는 다른 비관계형 데이터베이스에 비해 분류, 정렬, 탐색 속도가 빠르기 때문이다.
그리고 관계형 데이터베이스를 이용하기 위한 표준 언어인 SQL은 고도로 정교한 작업을 가능하게 해주기 때문에 데이터 무결성을 보장할 수 있고 신뢰성이 높다.
또한 towardsdatascience라는 업체가 여러 채용공고 사이트에서 Data Analyst를 지원할 때 꼭 필요로하는 스킬들을 조사하여 발표하였는데 1위가 SQL로 가장 많았고, 더 나아가 Data Engineer 부분에서도 1위, Data Scientist 부분에서는 3위를 기록하면서 데이터 분야에 있어서 필수적으로 익혀야할 스킬로 입지를 굳혔다.
주의할 것은, 관계형 데이터베이스가 주류로 쓰이고 있기 때문에 공부를 시작하는데 있어서 좋은 출발점이 되어 준다는 의미이며 비관계형 데이터베이스가 필요 없다는 의미는 아니라는 점이다. 비관계형 데이터베이스 또한 저마다의 장점을 바탕으로 분명한 사용처가 존재한다. 그렇기에 내가 일하고 싶은 분야에서 주로 사용하는 데이터베이스를 알아보고 거기에 맞춰서 커리큘럼을 스스로 조정해줄 필요성이 있다고 생각한다.