본문 바로가기

23년 1학기 학교공부/데이터베이스

[DB] 관계형 데이터베이스와 SQL

목차

    728x90
    반응형
    SMALL

    📁 관계형 데이터베이스

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

     

    현재 기업에서 사용하고 있는 대부분의 데이터베이스는 기존 관계형 데이터베이스에 객체 지원 기능을 추가한 객체 관계형 데이터베이스를 사용하고 있지만, 현실적으로 기업의 핵심 데이터는 대부분 관계형 데이터베이스 구조로 저장이 되고, 관계형 데이터베이스를 유일하게 조작할 수 있는 SQL 문장에 의해 관리되고 있으므로 관계형 데이터베이스와 SQL의 중요성은 아무리 강조해도 지나치지 않다.

     

    관계형 데이터베이스는 정규화를 통한 합리적인 테이블 모델링을 통해 데이터 이상(Anomaly) 현상을 제거하고 데이터 중복을 피할 수 있으며, 동시성 관리, 병행 제어를 통해 많은 사용자들이 동시에 데이터를 공유 및 조작할 수 있는 기능을 제공하고 있다.

     

     

     

    📁 SQL(Structured Query Language)

    SQL의 문법이 영어 문법과 흡사하기 때문에 SQL 자체는 다른 개발 언어에 비해 기초 단계 학습은 쉬운 편이지만, SQL이 시스템에 미치는 영향이 크므로 고급 SQL이나 SQL 튜닝의 중요성은 계속 커지고 있다.

     

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

     

    1986년부터 ANSI/ISO를 통해 표준화되고 정의된 SQL 기능은 벤더별 DBMS 개발의 목표가 된다. 구체적인 용어는 다르더라도 대부분의 관계형 데이터베이스에서 ANSI/ISO 표준을 최대한 따르고 있기 때문에, SQL에 대한 지식은 다른 데이터베이스를 사용하더라도 상당 부분 기존 지식을 재활용할 수 있고, ANSI/IS0 SQL-99, SQL-2003 이후 기준이 적용된 SQL이라면 프로그램의 이 식성을 높이는 데도 공헌한다(함수는 차이가 많음).

     

    SQL 문장은 단순 스크립트가 아니라 이름에도 포함되어 있듯이, 일반적인 개발 언어처럼 독립된 하나의 개발 언어이다. 하지만 일반적인 프로그래밍 언어와는 달리 SQL은 관계형 데이터베이스에 대한 전담 접속(다른 언어는 관계형 데이터베이스에 접속할 수 없다) 용도로 사용되며 세미콜론(;)으로 분리되어 있는 SQL 문장 단위로 독립되어 있다.

     

    관계형 데이터베이스는 수학의 집합 논리에 입각한 것이므로, SQL도 데이터를 집합으로 취급한다. 예를 들어 ‘포지션이 미드필더(MF)인 선수의 정보를 검색한다’고 할 경우, 선수라는 큰 집합에서 포지션이 미드필더인 조건을 만족하는 요구 집합을 추출하는 조작이 된다.

     

    이렇게 특정 데이터들의 집합에서 필요로 하는 데이터를 꺼내서 조회하고 새로운 데이터를 입력/수정/삭제하는 행위를 통해서 사용자는 데이터베이스와 대화하게 된다. 그리고 SQL은 이러한 대화를 가능하도록 매개 역할을 하는 것이다. 결과적으로 SQL 문장을 배우는 것이 곧 관계형 데이터베이스를 배우는 기본 단계라 할 수 있다

     

     

    📁 SQL 종류

    # 데이터 조작어(DML, Data Manipulation Language) : 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다.

     

    EX)

    - SELECT : 데이터베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어. RETRIEVE라고도 한다.

    - INSERT, UPDATE, DELETE : 데이터베이스의 테이블에 들어있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 

     

     

    # 데이터 정의어(DDL, Data Definition Language) : 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들

     

    EX) CREATE, ALTER, DROP, RENAME

     

     

    # 데이터 제어어(DCL, Data Control Language) : 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어

     

    EX) GRANT, REVOKE

     

     

    # 트랜잭션 제어어(TCL : Transaction Control Languages) : 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션)별로 제어하는 명령어

     

    EX) COMMIT, ROLLBACK

     

     

     

    📁 TABLE

    테이블(TABLE)은 데이터를 저장하는 객체(Object)로서 관계형 데이터베이스의 기본 단위이다.

     

    모든 자료는 SQL을 이용해 테이블에 등록되고, 테이블로부터 원하는 자료를 꺼내올 수 있다.

     

    테이블은 어느 특정한 주제와 목적으로 만들어지는 일종의 집합이다.

     

     

    📁 TABLE 구조

     

    # TABLE : 행과 열의 2차원 구조를 가진 데이터의 저장 장소이며, 데이터베이스의 가장 기본적인 구성요소이다.

    # 열 / 칼럼(Column) : 테이블에서 세로방향으로 이루어진 하나하나의 더이상 나눌 수 없는 특정 속성

    # 행 / 로우(Row) / 레코드(Record) : 테이블에서 가로방향으로 이루어진 연결된 데이터

     

     

     

    📁 TABLE 관계

     

    # 정규화(Normalization) : 테이블을 분할하여 데이터의 정합성을 확보하고, 불필요한 중복을 줄이는 프로세스

    # 기본키(Primary Key) : 테이블에 존재하는 각 행을 한가지 의미로 특정할 수 있는 한 개 이상의 칼럼

    # 외부키(Foreign Key) : 다른 테이블의 기본 키로 사용되고 있는 관계를 연결하는 칼럼

     

     

     

    📁 ERD(Entity Relationship Diagram)

    ER다이어그램 : 테이블 간 서로의 상관관계를 그림으로 도식화한것. ERD라고 한다.

     

    ERD의 구성요소는 개체(Entity), 관계(Relationship), 속성(Attribute) 3가지이다.

    현실세계의 데이터는 위 3가지 구성요소로 모두 표현 가능하다.

     

     

    예시는 다음과 같다.

    고전적 ERD(속성이 많은 경우 비효율적)

     

    위 ERD는 팀과 선수 간에는 "소속"이라는 관계가 맺어져있음을 나타낸다.

     

     

     

    728x90
    반응형
    LIST