SQL공부도 시작했다. 이거는 아이패드로 안할거다. 너무 힘들다. 적는 거...파이썬 책이 끝나면 아이패드로 정리할 수 있을 거 같다.
데이터 베이스
DBMS
테이블
SQL
'데이터의 집합'이라고 할 수 있다. 일상생활 대부분의 정보가 저장되고 관리되는 곳이다.
데이터를 운영/관리하는 프로그램을 통칭한다. DBMS는 2가지의 조건이 있다. 첫 번째는 대용량의 데이터를 관리할 수 있어야한다.
두 번째는 여러 사용자와 공유할 수 있어야한다.
따라서 엑셀은 DBMS라고 할 수 없다.
DBMS에는 여러 종류가 있으며 다음과 같다. 소프트웨어 각각의 사용 방법과 특징이 다르지만 어떤 것을 사용해도 무방하다.
컴퓨터 발명 이전: 종이에 펜으로 기록
컴퓨터 발명 이후: 엑셀과 같은 스프레드시트 프로그램을 사용. 파일(file)이라는 형태로 저장해 필요할 때마다 열어서 사용할 수 있었다. 하지만 엑셀의 경우 저장한 파일은 한 번에 한 명의 사용자만 열어서 작업할 수 있고, 대용량 데이터를 다루기에는 문제가 있다. 이 때문에 여러명이 각자의 파일을 만들어서 작업할 수 밖에 없었다.
DBMS의 대두와 보급: 앞에 언급한 파일의 단점을 보완하면서 대량의 데이터
를 효율적으로 관리
하고 운영
하기 위해서 등장한 것이 DBMS이다. 1973년에 에드거 프랭크 커드(E.F Codd)라는 학자가 최초로 DBMS의 이론을 정립했다. 그 후 많은 DBMS 제품이 만들어졌다.
DBMS에서 사용되는 언어를 SQL(Structured Query Language,구조화된 질의언어)
라고 한다. 이 SQL을 통하여 DBMS의 중요한 정보를 입력, 관리하고 추출할 수 있다.
계층형 DBMS(Hierarchical DBMS)
는 가장 먼저 등장한 DBMS개념이다. 각 계층은 트리(tree)
형태를 가진다. 이 계층형DBMS의 문제는 처음 구성을 완료한 후 이를 변경하기가 상당히 까다롭다는 문제가 있다. 또한 다른 구성원을 찾아가는 것이 비효율적이다. 지금은 사용하지 않는 형태이다.
망형 DBMS(Network DBMS)
는 계층형 DBMS의 문제점을 개선하기 위해 등장했다. 하위에 있는 구성원들끼리도 연결된 유연한 구조이다. 하지만 망형 DBMS를 잘 활용하려면 프로그래머가 모든 구조를 이해해야만 프로그램이 작성 가능다하는 단점이 존재한다. 이 역시 지금은 거의 사용하지 않는 형태다.
관계형 DBMS(Relational DBMS)
는 줄여서 RDBMS
라고 부른다. RDBMS의 데이터베이스는 테이블(table)
이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)
과 행(row)
으로 이루어져있다. RDBMS에서는 모든 데이터가 테이블에 저장된다. 현재 사용하는 대다수의 DBMS가 이 RDBMS이기 때문에 DBMS라하면 보통 RDBMS를 의미한다.
SQL(Structured Query Language,구조화된 질의언어)
은 관계형 데이터베이스에서 사용되는 언어로, '에스큐엘' 또는 '시퀄'로 읽는다.
SQL은 국제표준화기구에서 SQL에 대한 표준을 정해서 발표하며 이를 표준SQL
이라고 한다. DBMS를 만드느 회사에서는 되도록 표준SQL을 준수하되, 각 제품의 특성을 반영한 SQL을 사용한다.
각 회사마다 변경된 SQL을 오라클은 PL/SQL
,SQL Sever는 T-SQL
, MySQL은 SQL
로 부른다.
이 책에서는 표준 SQL위주로 설명한다.
설치의 경우 따로 내용을 정리할 정도는 아닌것 같다. 혹시 나중에 다시 다 지우고 깔일이 있을지도 모르니, 주소를 남긴다.
❗ 추가내용
- SQL은 programing language가 아닌 domain-specific language이다.
- domain-specific language: 도메인 특화 언어로 특정한 도메인을 적용하는데 특화된 컴퓨터 언어를 의미한다. SQL이나 CSound등이 있으며, 내부 DSL과 외부 DSL로 구분 가능하다.
내부 DSL: 특수한 목적을 위해 제한된 방법으로 호스트 언어를 사용하는 방식으로, 사용하던 도구를 그대로 이용할 수 있고 처리 결과를 쉽게 예측할 수 있다.
외부 DSL: 호스트 언어가 아닌 다른 언어에서 생성된 DSL이다. 대부분 자체적인 문법을 가지지만 기존 언어의 문법을 쓰는 예도 있다. 또한, 외부 DSL개발자는 DSL의 형식을 자유롭게 정할 수 있다.
즉 DSL은 특정 영역의 문제 해결을 위하여 그 영역에 맞는 특화된 도구라고 할 수 있다. Programing laguage처럼 시스템이나 소프트웨어를 구동시키기 위한 언어가 아닌 것이다.