클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

관계형 데이터베이스와 오라클 데이터베이스 - 데이터베이스 구성 요소와 자료형 본문

알고리즘 및 자료 관리/데이터베이스

관계형 데이터베이스와 오라클 데이터베이스 - 데이터베이스 구성 요소와 자료형

huenuri 2024. 8. 21. 14:50
이번 장에서는 관계형 데이터베이스의 구성 요소에 대해서 자세히 알아보려고 한다. 그리고 오라클 데이터베이스에 대해서도 기본적인 내용을 학습해본다.

바로 시작해보자! 데이터베이스 공부도 조금씩 재미있어지고 있다.



 

1. 관계형 데이터베이스의 구성 요소

먼저 관계형 데이터베이스를 구성하는 주요 요소를 살펴본다. 개념적인 구성 요소를 간단히 살펴본 후 나머지 장에서 자세한 내용과 사용법을 익혀나간다.

 

테이블

관계형 데이터베이스는 기본적으로 데이터를 2차원 표 형태로 저장하고 관리한다. 이 표 형태의 데이터 저장 공간을 테이블(table)이라고 한다. 테이블ㄹ은 2차원 형태이므로 가로줄과 세로줄로 구성된다. 이때 가로줄을 행(row), 세로줄을 열(column)이라고 부른다.

 

 

행은 저장하려는 하나의 개체를 구성하는 여러 값을 가로로 늘어뜨린 형태이다. 예를 들어 대학교에서 사용하는 학생 관리 프로그램에서 학생 데이터를 관할 경우 다음과 같이 학생을 구성하는 여러 값을 나열할 수 있다.
이때 테이블을 구성하는 하나의 행은 여러 값으로 이루어진 학생 한 명의 데이터를 의미한다.

실무에서는 행을 로우라고 많이 부른다

 

 

열은 저장하려는 데이터를 대표하는 이름과 공통 특성을 정의한다. 예를 들어 다음과 같이 각 학생의 데이터를 구성하는 학번과 이름, 그 외에 필요한 정보를 정의해 두면 각 학생의 정보를 통일성 있게 저장할 수 있다.
열은 저장 정보의 종류와 저장 가능한 값의 최대 길이 그리고 값을 중복을 허용하지 않는 등의 저장 조건과 범위를 지정할 수 있다.

실무에서는 열을 칼럼이라고 많이 부른다

 

 

 

관계형 데이터베이스와 테이블

 

관계형 데이터베이스에서 관계란 행과 열의 특성에 맙추어 데이터를 저장한 테이블 하나하나를 의미한다. 여러 테이블의 구성과 관계를 잘 규정하고 관리하는 것이 관계형 데이터베이스에서 데이터를 관리하는 핵심이다.

 

테이블, 행, 열

 

관계형 데이터베이스에서 테이블은 관계, 행은 튜플(tuple) 또는 레코드(record), 열은 속성을 의미하는 애트리뷰트(attribute) 또는 필드(field)라고 한다.

 

특별한 의미를 지닌 열, 키

키는 단어 뜻 그대로 '열쇠'라는 의미에서 비롯된 용어이다. 어떤 문에 꼭 맞는 열쇠가 하나씩 있듯이 수많은 데이터를 구별할 수 있는 유일한 값이라는 뜻이다. 키는 하나의 테이블을 구성하는 여러 열 중에서 특별한 의미를 지닌 하나 또는 여러 열의 조합을 의미한다.

종류별로 데이터를 구별하거나 테이블 간의 연관 관계를 표현할 때 키로 지정한 열을 사용한다. 키는 기본키(primary key), 후보키(candidate key), 외래키(foreign key), 복합키(composite key) 등으로 구분할 수 있다.

 

기본키

 

기본키는 여러 키 중에서 가장 중요한 키로서 한 테이블 내에서 중복되지 않는 값만 마질 수 있는 키이다.

 

기본 키의 속성

  1. 테이블에 저장된 행을 식별할 수 있는 유일한 값이어야 한다.
  2. 값의 중복이 없어야 한다.
  3. NULL 값을 가질 수 있다.

 

중복되지 않는 유일한 값이라는 특성을 가졌기 때무에 하나 또는 여러 열의 조합으로도 만들 수 있다.
예를 들어 다음과 같이 학생을 관리하는 학생 정보 테이블이 있다고 가정해보자. 학생별로 특정 서비스를 제공하려면 각 학생을 구별할 수 있는 데이터가 반드시 필요하다. 이들 중 한 열을 기본키로 지정한다.

NULL은 특정 열 값이 존재하지 않는다는 의미이다.

 


보조키

보조키는 대체키(alternate key)라고 부르며 후보키(candidate key)에 속해 있는 키이다. 그리고 후보키 중에서 기본키로 지정되지 않은 열이다.

후보키는 기본키가 될 수 있는 모든 키를 의미한다. 즉, 기본키 역시 후보키에 삭한다. 이 후보키 중에서 기본키로 지정되지 않은 키를 보조키 또는 대체키라고 한다.

위의 테이블을 살펴보면 유일한(중복되지 않은) 데이터를 가지고 있고 빈 값(NULL)이 없는 열(학번, 아이디, 주면등록번호)은 기본키가 될 수 있는 후보키이다.

 

외래키

외래키는 특정 티이블에 포함되어 있으면서 다른 테이블의 기본키로 지정된 키를 의미한다.

외래키는 외부키로도 부른다. 하지만 실무에서는 외부키나 외래키보다 포린키(foriegn key)라고 보르는 경우가 더 많다.

 

다음 테이블를 살펴보면학과 정보 테이블은 학과 코드, 학과 이름, 개설 날짜, 대학 구분, 대표 전화번호 등의 열로 구성되어 있다. 열 중에 학과 정보 테이블의 기본키인 '학과 코드'가 있다. 이 학과 코드가 바로 학생 정보 테이블과 학과 정보 테이블을 이어주는 '외래키' 역할을 한다.

 

예를 들어 성춘향이라는 학생이 학과 대표 전화번호를 알아내기 위해서는 다음의 과정이 이루어진다. 학과 코드를 통해 학과 정보 테이블을 찾아가고, 그 안에 대표 전화번호를 찾을 수 있다.
언뜻 보면 외래키는 테이블을 두 개 따로 나누어 데이터를 사용하므로 번거로워 보일 수 있다.

 

이처럼 함께 붙여버리면 어떨까 하는 생각을 할 수도 있다.

 


하지만 같은 학과의 데이터가 학생 정보 테이블에 저장되면 똑같은 내용의 학과 데이터가 저장되기에, 엄청난 양의 중복 데이터가 저장되는 현상이 벌어진다.

 

중복 데이터를 주의해야 하는 이유

 

처음에는 얼마 되지 않더라도 시간이 지날수록 데이터 중복에 따른 처리 비용이 증가하게 된다. 저장 공간 크기와 관리는 비용과 밀접한 관련이 있기 때문에 데이터 중복은 어쩔 수 없는 상황이 아닌 이상 반드시 피해야 한다.

엑셀에 익숙한 사람은 다음과 같이 학과 정보와 관련된 내용을 병합하는 방법을 생각할 수도 있다.

관계형 데이터베이스에서는 엑셀처럼 여러 행을 걸쳐 특정 열을 병합하는 것이 기본적으로 불가능하다. 하지만 외래키를 사용하면 이러한 병합과 유사한 효과를 없을 수 있어 데이터 중복을 최소화할 수 있다.

 

 

응용 프로그램 개발과 외래키

 

외래키는 데이터의 중복을 피하기 위해 테이블 사이의 관계를 규명하기 위한 필수 요소이다. 하지만 실무에서 데이터베이스를 활용하여 응용 프로그램을 만들 때 데이터의 구조 및 설계를 너무 엄격하게 정의하면, 응용 프로그램의 제작과 테스트 진행에 걸림돌이 되기도 한다.
따라서 테이블 사이의 관계에서 개념적으로 외래키가 필수인 상황일지라도 외래키를 따로 정의하지 않고, 테이블 사이를 느슨하게 설계하여 이를 응용 프로그램 영역에서 처리하는 경우도 종종 발생한다.

 

복합키

복합키는 여러 열을 조합하여 기본키 역할을 할 수 있게 만든 키를 뜻한다. 복합키를 만들 때 적게는 2~3개, 많게는 10개가 넘는 열을 조합하기도 한다. 왜냐하면 하나의 열만으로 행을 식별하는 것이 불가능해 2개 이상의 열 값을 함께 사용해야 하는 경우가 발생하기 때문이다.
예를들어 학생들의 수강 과목데이터를 생각해보자. 과목 정보 테이블을 다음과 같은 열로 구성한다고 가정한다.

 

만약 같은 과목을 여러 교수가 가르친다면 어떤 열을 기본키로 지정해야 할까? 과목 정보 테이블에서 과목 코드를 기본키로 정한다면, 같은 과목 코드(C3655)에 담당 교수가 다른 경우(이순신, 김유신)가 생긴다.
그렇다고 담당 교수를 기본키로 정한다면 한 교수(이몽룡)가 서로 다른 과목(E0134, E0021)을 가르치는 경우에 테이블 행을 정확히 구분하는 것이 불가능하다.

바로 이때 각 과목별 과목 코드와 담당 교수 열을 조합하여 하나의 키로 지정한다면 과목 정보 테이블의 행을 정확히 구분하는 것이 가능하다. 즉 '과목 코드 + 담당 교수'가 기본키 역할을 하게 된다.

다양한 키는 결국 관계형 데이터베이스에서 테이블 행을 구분하기 위해, 여러 테이블 간의 관계를 정의하기 위해 사용한다는 점을 기억하자.



 

2. 오라클 데이터베이스

오라클 데이터베이스는 대표적인 사용 관계형 데이터베이스 제품이다.

 

오라클 데이터베이스와 버전

 

오라클 데이터베이스는 오라클 사가 만든 DBMS 제품이다. 오라클 사는 전세계 소프트웨어 시장에서 윈도우와 마이크로소프트 사 를 포함해 세 손가락 안에 꼽힐 정도로 큰 기업이다.

 

 


현재 21c 버전까지 출시되어 있는데 이 책에서는 18c 기준으로 진행하고 있다. 대부분의 기업에서 현재 출시된 것보다 낮은 11g를 사용하는데, 그 이유는 데이터베이스를 한번 구축하면 버전 업그레이드가 쉽지 않기 때문이다. 이런 이유로 현재 사용하고 있는 버전에 큰 문제가 없다면 기존 데이터베이스 버전을 그대로 유지하는 경우가 많다.

 

자료형

 

데이터베이스에 저장하는 데이터느 ㄴ다양한 형태를 가지고 있다. 숫자만으로 표현 가능한 데이터도 있고 여러 가지 문자를 포함한 데이터도 있다.

자료형은 테이블을 구성하는 열에 지정한다. 예를 들어 NUMBER(4)로 지정한 열이 있다면 네 자리 숫자만 저장할 수 있다.

  • 스칼라형 : 하나의 자료형에 맙춰 한 종료의 데이터를 저장할 수 있는 자료형

자료형은 여러 종류가 있으며 한번에 여러 데이터를 저장할 수 있는 VARRAY, NESTED TABLE 같은 컬력션형(collection)도 있다. 가장 많이 사용하는 자료형은 VARCHAR2, NUMBER, DATE이다.

 

객체

객체는 오라클 데이터베이스 내에서 데이터를 저장하고 관리하기 위한 논리 구조를 가진 구성 요소이다.

 

 

PL/SQL

 

오라클 데이터베이스를 포함한 여러 관계형 데이터베이스에서 데이터를 관리하기 위해 복잡한 기능이 필요할 때 기존 SQL만으로 이를 구현하는 것은 다소 한계가 있다.
오라클 데이터베이스는 데이터 관리를 위해 별도의 프로그래밍 언어를 제공하는데 이를 PL/SQL(Procedural Language extension to SQL)이라고 한다.

보통 오라클 데이터베이스 프로그래밍이라고 하면 SQL문과 PL/SQL을 사용하여 프로그램을 제작하는 것을 의미한다. PL/SQL을 사용하면 변수, 조건문, 반복문 등 프로그래밍 언어에서 제공하는 요소를 사용하여 데이터를 관리할 수 있다.


 

 

2장 학습을 마치고

1장보다 분량이 많아서 조금더 시간이 걸렸다. 이제 데이터베이스에서 어떤 것들을 다루는지 아주 기초적인 개념은 잡을 수 있었다. 노션에서도 왜 데이터베이스하면서 표를 만드는 것이 가장 기본인지도 알게 되었다. 기본키, 후보키, 대체키, 보조키, 외래키 등은 정말 중요한데 헤깔리기 쉬우므로 한번 더 복습해봐야겠다.

데이터베이스에서도 프로그래밍 언어가 사용된다는 걸 어제 수업을 통해 볼 수 있었는데 정말 신기했다. 다음 장에서는 오라클 프로그램을 설치하고 실습을 들어가는데, 그 전에 첫날 이론 수업을 들어보려고 한다.
수업이 2주나 밀려있어서 정말 열심히 공부해야 한다.