[SQLD] 관계형 데이터베이스의 개요

Shy·2024년 5월 19일

SQLD

목록 보기
9/23

데이터베이스

현대 사회는 정보화 사회로, 일상생활 속에서 많은 정보가 생성되고 이를 관리하는 것이 중요하다. 데이터베이스는 이러한 정보들을 체계적으로 모아둔 것이다. 특히 특정 기업이나 조직, 개인이 필요에 의해 데이터를 일정한 형태로 저장한 것을 의미한다. 예를 들어, 학교는 학생 정보를, 기업은 직원 정보를 관리하기 위해 데이터베이스를 사용한다.

초기에는 엑셀과 같은 소프트웨어로 데이터를 관리했지만, 데이터 양이 많아지고 여러 사람이 동시에 사용해야 할 필요성이 생기면서 한계가 나타났다. 중요한 데이터가 손상되거나 유실될 위험도 있다. 이를 해결하기 위해 효율적이고 안전한 데이터 관리를 제공하는 시스템인 DBMS(Database Management System)가 개발되었다.

1️⃣ 데이터베이스의 발전

  1. 1960년대: 플로우차트를 중심으로 데이터를 파일 구조로 저장하고 관리했다.
  2. 1970년대: 데이터베이스 관리 기법이 시작되었고, 계층형(Hierarchical) 데이터베이스망형(Network) 데이터베이스가 상용화되었다.
  3. 1980년대: 관계형 데이터베이스가 상용화되었고, Oracle, Sybase, DB2 같은 제품이 사용되었다.
  4. 1990년대: 관계형 데이터베이스가 더욱 발전하여, 객체 지향 정보를 지원하는 객체 관계형 데이터베이스가 등장했다. 많은 DBMS 제품들이 향상된 기능을 제공하게 되었다.

2️⃣ 관계형 데이터베이스(Relational Database)

1970년 E.F. Codd 박사가 논문에서 처음 소개한 관계형 데이터베이스는 이후 IBM의 SQL 개발과 Oracle 등의 상용화 과정을 거쳐 널리 사용되었다. 관계형 데이터베이스는 기존의 파일 시스템과 계층형, 망형 데이터베이스를 대체하면서 주력 데이터베이스가 되었다.

현재 대부분의 기업은 객체 지원 기능을 추가한 객체 관계형 데이터베이스를 사용하고 있지만, 핵심 데이터는 여전히 관계형 데이터베이스 구조로 저장되고, SQL 문장으로 관리된다. 관계형 데이터베이스와 SQL은 여전히 중요한 역할을 한다.

파일 시스템은 하나의 파일을 여러 사용자가 동시에 수정할 수 없기 때문에 데이터 관리가 어려웠다. 이를 해결하기 위해 원본 파일을 여러 개 복사해 사용하면 데이터의 불일치성이 발생한다. 반면, 관계형 데이터베이스는 정규화를 통해 데이터 중복을 피하고 동시성 관리, 병행 제어를 통해 여러 사용자가 동시에 데이터를 조작할 수 있습니다.

3️⃣ 관계형 데이터베이스의 장점

  1. 정규화: 합리적인 테이블 모델링을 통해 데이터 중복과 이상(Anomaly) 현상을 제거다.
  2. 동시성 관리: 여러 사용자가 동시에 데이터를 공유하고 조작할 수 있다.
  3. 메타 데이터 관리: 데이터의 성격, 속성, 표현 방법 등을 체계화하여 데이터 표준화와 품질을 확보한다.
  4. 보안 기능: 인증된 사용자만이 데이터에 접근할 수 있도록 보안 기능을 제공한다.
  5. 데이터 무결성: 다양한 제약 조건을 통해 실수로 인한 데이터 손상을 방지하고 데이터의 무결성을 보장한다.
  6. 장애 복구 기능: 시스템 장애 시에도 데이터를 보호하고 복구할 수 있는 기능을 제공한다.

관계형 데이터베이스는 현대 정보화 사회에서 효율적이고 안전한 데이터 관리를 가능하게 하는 중요한 기술이다. 정규화, 동시성 관리, 보안 기능 등을 통해 데이터를 체계적으로 관리하며, SQL을 통해 데이터 조작을 간편하게 한다. 관계형 데이터베이스와 DBMS는 기업의 데이터 관리에 필수적인 요소로 자리 잡고 있다.

SQL(Structured Query Language)

SQL은 관계형 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어이다. SQL의 원래 이름은 SEQUEL(Structured English QUEry Language)이었지만, 표준 명칭은 SQL로 통일되었다.

1️⃣ SQL의 특징

  1. 쉬운 학습: SQL 문법은 영어 문법과 유사하여 기초 단계 학습이 비교적 쉽다.
  2. 중요성: SQL은 데이터베이스 시스템에 큰 영향을 미치므로, 고급 SQL과 SQL 튜닝의 중요성이 크다.
  3. 표준화: 1986년부터 ANSI/ISO 표준으로 정의되어, 대부분의 관계형 데이터베이스가 이를 따른다. 이는 데이터베이스 간의 지식 재활용과 프로그램 이식성을 높여준다.

2️⃣ SQL 문법

SQL은 단순 스크립트가 아니라 독립된 개발 언어이다. 다른 프로그래밍 언어와 달리, SQL은 관계형 데이터베이스에만 접속하여 집합 논리에 기반한 데이터 조작을 수행한다.

예를 들어, “포지션이 미드필더(MF)인 선수의 정보를 검색”하는 SQL 문장은 선수 테이블이라는 큰 집합에서 조건을 만족하는 작은 집합을 추출하는 작업이다. 이렇게 데이터를 조회하고, 입력, 수정, 삭제하는 행위를 통해 사용자는 데이터베이스와 상호작용한다. SQL은 이러한 대화를 가능하게 하는 매개체이다.

3️⃣ 주요 SQL 명령어

  1. SELECT: 테이블에서 데이터를 조회하는 명령어이다.
  2. UPDATE: 테이블의 데이터를 수정하는 명령어이다.
  3. DELETE: 테이블에서 데이터를 삭제하는 명령어이다.
  4. INSERT: 테이블에 새로운 데이터를 추가하는 명령어이다.
  5. 테이블 관련 명령어: 테이블을 생성(CREATE), 수정(ALTER), 삭제(DROP)하는 명령어이다.
  6. 데이터 권한 제어 명령어: 데이터에 대한 권한을 제어하는 명령어이다.

4️⃣ SQL 명령어 분류

SQL 명령어는 크게 네 가지 그룹으로 나눌 수 있습니다.

  1. DDL (Data Definition Language): 데이터베이스 구조를 정의하는 명령어 (CREATE, ALTER, DROP 등)
  2. DML (Data Manipulation Language): 데이터베이스의 데이터를 조작하는 명령어 (SELECT, INSERT, UPDATE, DELETE 등)
  3. DCL (Data Control Language): 데이터베이스의 접근 권한을 제어하는 명령어 (GRANT, REVOKE 등)
  4. TCL (Transaction Control Language): 트랜잭션을 제어하는 명령어 (COMMIT, ROLLBACK, SAVEPOINT 등)

TABLE

현대 사회에서 데이터베이스는 많은 정보를 효율적으로 관리하고 활용하는 데 필수적이다. 특히, K-League와 같은 스포츠 리그에서 선수들의 정보를 체계적으로 관리하기 위해 데이터베이스를 사용하는 것이 중요하다. 이를 위해 선수 정보를 데이터베이스화하는 과정에서 테이블을 활용한다.

별도의 정리 작업을 하지 않은 위의 왼쪽 내용은 본인이 아니라면 알아보기도 힘들고 다른 사용자에게 큰 도움이 되지 않는다.

1️⃣ 테이블의 기본 개념

테이블은 데이터베이스에서 데이터를 저장하는 기본 단위이다. 모든 데이터는 테이블 형태로 저장되며, 테이블은 특정 주제와 목적에 따라 만들어지는 데이터의 집합이다. 테이블의 구조는 행(Row)과 열(Column)로 이루어지며, 각 행은 하나의 레코드(Record), 각 열은 하나의 속성(Attribute)을 나타낸다. 행과 열이 만나는 지점을 필드(Field)라고 한다.

2️⃣ 테이블의 구조

  • 행(Row): 데이터를 저장하는 수평적 단위로, 각 행은 하나의 레코드를 나타낸다.
  • 열(Column): 데이터를 저장하는 수직적 단위로, 각 열은 하나의 속성을 나타낸다.
  • 필드(Field): 행과 열이 만나는 지점으로, 하나의 데이터 값을 저장한다.

예를 들어, 선수 정보를 저장하는 테이블은 다음과 같은 열을 가질 수 있다.

  • 선수명
  • 소속 구단
  • 포지션
  • 생년월일
  • 몸무게
  • 등번호

각 열은 해당 속성에 대한 정보를 저장하고, 각 행은 특정 선수의 정보를 포함한다.

테이블의 예시

데이터베이스의 테이블 관리

테이블은 데이터를 체계적으로 정리하여 관리할 수 있게 해준다. 예를 들어, 새로운 선수를 추가할 때는 테이블에 행을 추가하면 된다. 또한, 테이블 내 데이터를 쉽게 비교할 수 있다. 예를 들어, 선수들의 키나 몸무게를 기준으로 정렬하여 누가 가장 큰지, 누가 가장 무거운지를 쉽게 확인할 수 있다.

3️⃣ 정규화(Normalization)

모든 데이터를 하나의 테이블에 저장하면 데이터 중복과 비효율성이 발생할 수 있다. 이를 해결하기 위해 데이터를 여러 테이블로 분할하는 정규화 과정을 거친다. 정규화는 데이터의 중복을 줄이고, 데이터의 정합성을 유지하며, 데이터 입력/수정/삭제 시 발생할 수 있는 이상현상(Anomaly)을 방지한다.

4️⃣ 기본키(Primary Key)와 외래키(Foreign Key)

  • 기본키(Primary Key): 각 행을 유일하게 식별할 수 있는 하나 이상의 열로 구성됩니다. 예를 들어, 선수 테이블의 선수 번호가 기본키가 될 수 있습니다.
  • 외래키(Foreign Key): 다른 테이블의 기본키를 참조하는 열로, 두 테이블 간의 관계를 설정합니다. 예를 들어, 선수 테이블의 구단 코드는 구단 테이블의 기본키인 구단 코드를 참조하는 외래키입니다.

테이블은 관계형 데이터베이스에서 데이터를 저장하는 기본 단위로, 행과 열로 구성된 2차원 구조이다. 데이터를 체계적으로 관리하고 정리할 수 있으며, 정규화를 통해 데이터 중복을 줄이고 무결성을 유지할 수 있다. 기본키와 외래키를 활용하여 테이블 간의 관계를 설정하고, 데이터를 효율적으로 관리할 수 있다.

ERD(Entity Relationship Diagram)

ERD(Entity Relationship Diagram)는 데이터베이스의 구조를 시각적으로 표현한 다이어그램으로, 데이터베이스의 설계를 이해하고 문서화하는 데 매우 유용하다. ERD는 엔터티(Entity), 관계(Relationship), 속성(Attribute)이라는 세 가지 주요 구성 요소로 이루어져 있다.

1️⃣ 구성 요소

  1. 엔터티(Entity): 데이터베이스에서 저장되는 객체로, 사람, 장소, 사물 등을 나타냅니다. 예를 들어, “팀”과 “선수”는 엔터티이다.
  2. 관계(Relationship): 엔터티 간의 연관성을 나타낸다. 예를 들어, 팀과 선수 간의 “소속” 관계가 있다.
  3. 속성(Attribute): 엔터티가 가지는 특성이나 정보를 나타낸다. 예를 들어, 선수 엔터티는 이름, 소속 구단, 포지션 등의 속성을 가질 수 있다.

예시: 팀-선수 ERD

위와 같이, 팀과 선수 엔터티 간에는 “소속”이라는 관계가 있다. 이는 하나의 팀이 여러 명의 선수를 포함할 수 있으며, 한 명의 선수는 하나의 팀에 속한다는 의미한다.

K-리그 테이블 관계

K-리그의 테이블 간 양방향 관계는 다음과 같습니다:

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

ERD 표기법

ERD는 다양한 표기법을 사용할 수 있다. 대표적인 두 가지 표기법은 IE(Information Engineering) 표기법과 Barker 표기법이다.

  • IE 표기법
    • IE 표기법은 엔터티와 관계를 직관적으로 나타내는 데 사용된다.
  • Barker 표기법
    • Barker 표기법은 엔터티 간의 관계를 명확하게 나타내는 데 중점을 둔다.

예시: 사원-부서 ERD

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

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

이 관계를 ERD로 표현하면, 각 부서 엔터티가 여러 사원 엔터티와 관계를 맺고 있으며, 각 사원 엔터티는 하나의 부서 엔터티와 관계를 맺고 있는 구조를 시각적으로 확인할 수 있다.


ERD(Entity Relationship Diagram)는 데이터베이스 설계를 직관적으로 표현하는 도구이다. 엔터티, 관계, 속성으로 구성되며, 다양한 표기법을 사용해 데이터베이스 구조를 명확하게 나타낼 수 있다. K-리그나 회사 조직과 같은 실제 데이터베이스 구조를 ERD로 표현하면, 데이터 간의 관계와 구조를 쉽게 이해하고 관리할 수 있다.

profile
신입사원...

0개의 댓글