관계형 데이터베이스 개요

HELLO_DINO·2022년 9월 22일
0

SQL전문가가이드

목록 보기
11/28

데이터베이스

데이터베이스란 넓은 의미로 일상적인 정보를 모아 놓은 자체.
일반적으로는 기업이나 조직, 개인이 필요에 따라 (예, 부가가치가 발생하는) 데이터를 일정한 형태로 저장해 놓은 것을 의미.

DBMS란 효율적인 데이터 관리, 예기치 못한 사건으로 인한 데이터 손상 회피, 필요한 데이터 복구를 위한 소프트웨어.

데이터베이스의 발전

  • 1960년대 : 플로우차트 중심의 개발 방법을 사용했으며 파일 구조로 데이터를 저장-관리함.
  • 1970년대 : 데이터베이스 관리 기법이 태동했던 시기였으며 계층형 데이터베이스, 망형 데이터베이스 같은 제품들이 상용화.
  • 1980년대 : 현재 대부분의 기업에서 사용되는 관계형 데이터베이스가 상용화됨. Oracle, Sybase, DB2와 같은 제품이 사용됨.
  • 1990년대 : Oracle, Sybase, Informix, DB2, Teradata, SQL Server 외 많은 제품이 더 향상된 기능으로 정보시스템의 핵심 솔루션으로 자리잡음. 인터넷의 급속한 발전에 맞춰 객체지향 정보를 지원하기 위해 객체 관계형 데이터베이스로 발전.

관계형 데이터 베이스

1970년 영국의 수학자였던 E.F.Codd 박사의 논문에서 처음으로 관계형 데이터베이스가 소개된 이후, IBM의 SQL 개발 단계를 거쳐 Oracle을 선발로 여러 회사에서 상용화한 제품을 내놓았다. 이후 관계형 데이스의 장점들이 알려지면서 기존의 파일 시스템과 계층형, 망형 데이터베이스를 대부분 대체하면서 주력 데이터베이스가 됐다.

관계형 데이터 베이스의 장점
데이터 불일치성 방지
동시성 관리와 병행 제어 제공
데이터 표준화로 인한 데이터 품질 확보 가능
보안 기능 제공
데이터 무결성 보장
데이터 회복 및 복구 기능 제공

SQL

SQL : 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터를 제어하기 위해 사용하는 언어.

SQL의 최초 이름은 SEQUEL이었기 때문에 '시큐얼'로 읽는 경우도 있지만, 표준은 SQL이므로 '에스큐엘'로 읽는 것을 권한다.

SQL 교육은 정확한 데이터를 출력하는 것이 목표이고, SQL 튜닝의 목적은 시스템에 큰 영향을 주는 SQL을 가장 효과적(응답시간, 자원 활용 최소화)으로 작성하는 것이 목표다.

관계형 데이터베이스는 수학의 집합 논리에 입각한 것이므로 SQL도 데이터를 집합으로 취급한다.

특정 데이터들의 집합에서 필요로 하는 데이터를 꺼내서 조회하고 새로운 데이터를 입력 수정 삭제하는 행위를 통해 사용자는 데이터베이스와 대화하게 된다. SQL은 이러한 대화를 가능하도록 하는 매개 역할을 한다.

SQL 명령어는 3가지 SAVEPOINT 그룹인 DDL, DML, DCL로 나눌 수 있다. TCL의 경우 굳이 나누면 일부에선 DCL로 분류하기도 하지만, 다소 성격이 다르다.

STANDARD SQL 개요

1970년: Dr. E.F. Codd 관계형 DBMS 논문 발표
1974년: IBM SQL 개발
1979년: Oracle 상용 DBMS 발표
1980년: Sybase SQL Server 발표(이후 Sybase ASE로 개명)
1983년: IBM DB2 발표
1986년: ANSI/ISO SQL 표준 최초 제정(SQL-86, SQL1)
1992년: ANSI/ISO SQL 표준 제정(SQL-92, SQL2)
1993년: MS SQL Server 발표(Windows OS, Sybase Code 활용)
1999년: ANSI/ISO SQL 표준 제정(SQL-99, SQL3)
2003년: ANSI/ISO SQL 표준 제정(SQL:2003)
2006년: ANSI/ISO SQL 표준 제정(SQL:2006)
2008년: ANSI/ISO SQL 표준 제정(SQL:2008)
2011년: ANSI/ISO SQL 표준 제정(SQL:2011)
2016년: ANSI/ISO SQL 표준 제정(SQL:2016)

국내뿐 아니라 관계형 데이터베이스는 오브젝트 개념을 포함한 여러 새로운 기능들이 꾸준히 추가되고 있다.

대표적인 ANSI/ISO 표준 SQL의 기능은 다음 내용을 포함한다.

  • STANDARD JOIN 기능 추가(CROSS, OUTER JOIN 등 새로운 FROM절 JOIN 기능들)
  • SCALAR SUBQUERY, TOP-N QUERY 등의 새로운 SUBQUERY 기능들
  • ROLLUP, CUBE, GROUPING SETS 등의 새로운 리포팅 기능
  • WINDOW FUNCTION 같은 새로운 개념의 분석 기능들

E.F.Codd 박사의 논문에 언급된 연산자
일반 집합 연산자

일반 집합 연산자를 현재의 SQL과 비교하면 다음과 같다.
1. UNION 연산은 UNION 기능으로,
2. INERSECTION 연산은 INTERSECT 기능으로,
3. DIFFERENCE 연산은 EXCEPT(Oracle은 MINUS) 기능으로,
4. PRODUCT 연산은 CROSS JOIN 기능으로 구현됐다.

이는 관계형 데이터베이스 엔진 및 SQL의 기반 이론이 됐다.

UNION 연산은 합집합을 제공하고 공통 교집합의 중복을 없애기 위한 사전 작업으로 시스템에 부하를 주는 정렬 작업이 발생했다. 이후 UNION ALL 기능이 추가되어, 특별한 요구 사항이 없다면 공통집합을 중복해 그대로 보여 주기 때문에 정렬 작업이 일어나지 않는 장점이 있다.

INTERSECTION은 교집합으로 두 집합의 공통집합을 추출.

DIFFERENCE는 차집합이다. 대다수 EXCEPT를 사용하지만 Oracle은 MINUS를 사용한다.

PRODUCT는 CROSS(ANIS/ISO 표준) PRODUCT라고 불리는 곱칩합으로, JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합이다. 양쪽 집합의 M*N 건의 데이터 조합이 발생한다.

순수 관계 연산자

  1. SELECT 연산은 WHERE 절로 구현
  2. PROJECT 연산은 SELECT 절로 구현
  3. (NATURAL) JOIN 연산은 다양한 JOIN 기능으로 구현
  4. DIVIDE 연산은 현재 사용되지 않는다

순수 관계 연산자는 관계형 데이터베이스를 구현하기 위해 새롭게 만들어진 연산자다.

SELECT 연산은 SQL 문장에서는 WHERE 절의 조건절 기능으로 구현(SELECT 연산과 SELECT 절의 의미가 다름을 유의).

PROJECT 연산은 SQL 문장에서는 SELECT 절의 칼럼 선택 기능으로 구현

JOIN 연산은 WHERE 절의 INNER JOIN 조건과 함께 FROM 절의 NATURAL JOIN, INNER JOIN, OUTER JOIN, USING 조건절, ON 조건절 등으로 가장 다양하게 발전

DIVIDE 연산은 나눗셈과 비슷한 개념으로 왼쪽의 집합을 'XZ'로 나누었을 때, 즉 'XZ'를 모두 갖고 있는 'A'가 답이 되는 기능으로 현재 사용되지 않는다.

관계형 데이터베이스의 경우 요구 사항 분석, 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링 단계를 거치게 된다. 이 단계에서 엔터티 확정 및 정규화 과정, M:M(다대다) 관계를 분해하는 절차를 거치게 된다.
특히 정규화 과정의 경우 데이터 정합성과 데이터 저장 공간의 절약을 위해 엔터티를 최대한 분리하는 작업으로, 일반적으로 3차 정규형이나 보이스코드 정규형까지 진행하낟.

정규화를 거치면 하나의 주제에 관련된 엔터티가 여러 개로 나뉘게 된다. 이 엔터티들이 주로 테이블이 되는데, 이렇게 흩어진 데이터를 연결해 원하는 데이터를 가져오는 작업이 바로 JOIN이다.

테이블

위의 그림은 정리 하기 전과 후이다. 정리 전에는 알기 힘들어 도움이 되기 힘들다.

데이터는 관계형 데이터베이스의 기본 단위인 테이블 형태로 저장된다.
모든 자료는 테이블에 등록되고, 원하는 자료를 꺼내 올 수 있다.
테이블은 어느 특정한 주제와 목적으로 만들어지는 일종의 집합이다.

선수, 팀, 팀연고지, 포지션, 등번호, 생년월일, 키, 몸무게가 각각의 칼럼이 된다.
해당 테이블은 반드시 하나 이상의 칼럼을 가져야 한다.

위의 표 중에서 하나의 행이다. 이는 이청용 선수에 대한 정보를 모아서 하나의 행으로 데이터화해 테이블에 저장한 것이다.

자료들은 삭제하지 않는 한 지속적으로 유지되고, 우리가 입력하지 않는다면 테이블은 본래 만들어졌을 때부터 갖고 있던 속성을 그대로 유지하면서 존재한다.

테이블은 데이터를 저장하는 객체로서 관계형 데이터베이스의 기본 단위이다. 관계형 데이터베이스에서는 모든 데이터를 칼럼과 행이라는 2차원 구조로 나타낸다. 세로 방향을 칼럼, 가로 방향을 행이라고 한다. 칼럼과 행이 겹치는 하나의 공간을 필드라고 한다.

모든 데이터를 하나의 테이블로 저장한지 않는다. 위의 그림과 같이 복수의 테이블로 분할 저장한다.
분할된 테이블은 그 칼럼의 값에 의해 연결된다. 이렇게 테이블을 분할해 데이터의 불필요한 중복을 줄이는 것을 정규화라고 한다. 데이터의 정합성 확보와 데이터 입력 수정 삭제 시 발생할 수 있는 이상현상을 방지하기 위해 정규화는 관계형 데이터베이스 모델링에서 매우 중요한 프로세스다.

다른 테이블의 기본키로 사용되면서 테이블과의 관계를 연결하는 역할을 하는 컬럼을 외부키라고 한다.

ERD

팀 정보와 선수 정보간 어떤 의미의 관계가 존재하며, 다른 테이블과도 어떤 의미의 연관성이나 관계를 갖고 있다. ERD로 이를 직관적으로 표현할 수 있다.

ERD의 구성 요소는 엔터티, 관계, 속성이다. 현실 세계의 데이터는 모두 이 3가지 구성 요소로 표현 가능하다.

아래 그림은 앞으로 사용하게 될 케이리그의 테이블 관계이다.

케이리그 테이블 간의 양방향 관계는 다음과 같다.

  • 하나의 팀은 여러 명의 선수를 포함할 수 있다.
  • 한 명의 선수는 하나의 팀에 꼭 속한다.
  • 하나의 팀은 하나의 전용 구장을 꼭 가진다.
  • 하나의 운동장은 하나의 홈팀을 가질 수 있다.
  • 하나의 운동장은 여러 게임의 스케줄을 가질 수 있다.
  • 하나의 스케줄은 하나의 운동장에 꼭 배정된다.

아래 그림은 부서-사원 테이블 간의 관계를 나타낸 ERD이다.

사원-부서 테이블 간의 양방향 관계는 다음과 같다.

  • 하나의 부서는 여러 명의 사원을 보유할 수 있다.
  • 한 명의 사원은 하나의 부서에 꼭 소속된다.

데이터 유형

데이터 유형은 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준이다. 즉 특정 칼럼을 정의할 때, 선언한 데이터 유형은 그 칼럼이 받아들일 수 있는 자료의 유형을 규정한다. 따라서 선언한 유형이 아닌 다른 종류의 데이터가 들어오려고 하면 데이터베이스는 에러를 발생시킨다.

데이터 유형과 거불어 지정한 크기도 중요한 역할을 한다. 선언 당시에 지정한 데이터의 크기를 넘어선 자료가 입력되면 에러를 발생시킬 수 있기 때문이다.

테이블의 칼럼이 갖고 있는 대표적인 4가지 데이터 유형을 정리했다.

CHAR 유형과 VARCHAR 유형의 차이점.

CHAR는 비교할 때 공백을 채워서 비교한다. VARCHAR는 아니다.

VARCHAR(40)으로, 40바이트가 지정되더라도 실제로 'PARKJISUNG'으로 데이터가 입력되는 경우 11바이트 공간만을 차지한다. 고정된 길이의 문자열이 아니라면 VARCHAR 유형을 적용하는 것이 바람직하다.

0개의 댓글