관계 데이터베이스의 언어

  • 관계 대수의 배경 : 먼저 SQL이란 Structure Query Language의 약자로, 데이터베이스에서 질의를 위해 사용되는 언어입니다. 과거에는 이 SQL문 대신 관계 대수라는 것을 이용하였습니다. 관계 대수는 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초이면서, SQL을 구현하고 최적화하기 위해 오늘날 DBMS의 내부 언어로서도 사용됩니다.
  • 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어

- 관계 해석 (Relational calculus) : 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인지는 명시하지 않는 선언적인 언어

- 관계 대수 (Relational algebra) : 어떻게 질의를 수행할 것인가를 명시하는 절차적 언어

  •  SQL (Structure Query Language)

- 상용 관계 DBMS들의 사실상의 표준 질의어

- 사용자는 SQL을 사용하여 관계 데이터베이스에 릴레이션을 정의하고, DB의 정보를 검색하고, 관계 데이터베이스를 갱신하는 등 여러 가지 무결성 제약조건들을 명시할 수 있다.



  관계 대수의 특징

  • 기존의 릴레이션들로부터 새로운 릴레이션을 생성한다.
  • 릴레이션이나 관계 대수식의 결과 릴레이션에 연산자들을 적용하여 보다 복잡한 결과 릴레이션을 점차적으로 만들 수 있다.
  • 기본적인 연산자들의 집합으로 이루어진다.
  • 산술 연산자와 유사하게 단일 릴레이션이나 두 개의 릴레이션을 입력으로 받아 하나의 결과 릴레이션을 생성한다.
  • 결과 릴레이션은 또 다른 관계 연산자의 입력으로 사용될 수 있다.



  관계 연산자들의 종류와 표기법


분류

연산자

표기법

단항 또는 이항

필수적인 연산자

실렉션 (Selection)

단항

프로젝션 (Projection)

단항

합집합 (Union)

이항

차집합 (Difference)

이항

카티션 곱 (Cartesian Product)

이항

편의를 위해 유도된 연산자

교집합 (Intersection)

이항

세타 조인 (Theta Join)

이항

동등 조인 (Equijoin)

이항

자연 조인 (Natural Join)

*

이항

세미 조인 (Semijoin)

이항

디비전 (Division)

이항


  • Selection 연산자

- 한 릴레이션에서 실렉션 조건(Selection Condition 또는 Predicate)을 만족하는 투플들의 부분 집합을 생성하는 연산자. - 투플이 여러 개 있으나 중복 투플은 존재할 수 없다.

- 결과 릴레이션의 차수는 입력 릴레이션의 차수(열의 수)와 같다.

- 결과 릴레이션의 카디날리티(행의 수)는 항상 입력 릴레이션 것보다 작거나 같다.

- 실렉션 조건은 보통 릴레이션의 임의의 컬럼과 상수, 비교연산자[ =, <>, <=, <, =>, > ], 부울 연산자[ AND, OR, NOT ]를 포함한다.


  • Projection 연산자

- 한 릴레이션의 애트리뷰트들의 부분 집합을 구하는 연산자

- 결과로 생성되는 릴레이션은 스키마에 명시된 애트리뷰트들만 가진다.

- 결과 릴레이션에는 기본 키가 아닌 애트리뷰트에 한하여 중복된 투플들이 존재할 수 있다.



  • 집합 연산자

- 릴레이션이 투플들의 집합이기 때문에 기존의 집합 연산이 릴레이션에 적용된다.

- 합집합(Union), 교집합(Intersection), 차집합(Difference) 연산자

- 집합 연산자의 입력으로 사용되는 두 개의 릴레이션은 합집합 호환이어야 한다.

- 합집합 호환 (Union Compatible) : 집합 연산의 조건으로, 정의는 아래와 같다.

- 두 릴레이션 R1(A1, A2, ..., An)R2(B1, B2, ..., Bm)이 합집합 호환일 필요 충분 조건은 n=m이고, 모든 1<=i<=n에 대해 domain(Ai)=domain(Bi)

- 쉽게 말해, 컬럼 수가 동일해야 하고 스키마에서 정의한 컬럼의 데이터 타입이 동일해야 한다.

- 프로젝션 연산의 결과도 릴레이션이므로 합집합 호환이 된다면 두 결과 릴레이션은 집합 연산이 가능하다.

  • Union 연산자

- 두 릴레이션 RS의 합집합 R S R 또는 S에 있거나 RS 모두에 속한 투플들로 이루어진 릴레이션이다.

- 결과 릴레이션에서 중복된 투플들은 제외된다.

- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 애트리뷰트의 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.



  • Intersection 연산자

- 두 릴레이션 RS의 교집합 R S RS 모두에 속한 투플들로 이루어진 릴레이션이다.

- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.



  • Difference 연산자

- 두 릴레이션 RS의 차집합 (R - S) R에는 속하지만 S에는 속하지 않은 투플들로 이루어진 릴레이션이다.

- 결과 릴레이션의 차수는 R 또는 S의 차수와 같으며, 결과 릴레이션의 애트리뷰트 이름들은 R 또는 S의 애트리뷰트들의 이름과 같다.



  • Cartesian Product 연산자

- 카디날리티가 i인 릴레이션 R(A1, A2, ..., An)과 카디날리티가 j인 릴레이션 S(B1, B2, ..., Bm)의 카티션 곱 R S 는 차수가 (n+m)이고, 카디날리티가 (i*j)이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며, RS의 투플들의 모든 가능한 조합으로 이루어진 릴레이션이다.

- 카티션 곱의 결과 릴레이션의 크기는 매우 클 수 있으며, 사용자가 실제로 원하는 것은 카티션 곱의 결과 릴레이션의 일부인 경우가 대부분이므로 카티션 곱 자체는 유용한 연산자가 아니다.



  • 조인 연산자

- 두 개의 릴레이션으로부터 연관된 투플들을 결합하는 연산자

- 관계 데이터베이스에서 두 개 이상의 릴레이션들의 관계를 다루는데 매우 중요한 연산자이다.

  • 세타 조인 (Theta Join) 과 동등 조인 (Equijoin)

- 두 릴레이션 R(A1, A2, ..., An)S(B1, B2, ..., Bm)의 세타 조인의 결과는 차수가 (n+m)이고, 애트리뷰트가 (A1, A2, ..., An, B1, B2, ..., Bm)이며, 조인 조건을 만족하는 투플들로 이루어진 릴레이션이다.

- 세타 조인 조건은 { =, <>, <=, <, >=, > } 중 하나이다.

- 동등 조인 조건은 세타 조인 중에서 비교 연산자가 =인 조인이다.



  • 자연 조인 (Natural Join)

- 동등 조인의 결과 릴레이션에서 조인 컬럼의 중복을 제외한 조인

- 여러 가지 조인 연산자들 중에서 가장 자주 사용된다.

- 실제로 관계 데이터베이스에서 대부분의 질의는 실렉션, 프로젝션, 자연 조인으로 표현 가능하다.



  • Division 연산자

 차수가 (n+m)인 릴레이션 R(A1, A2, ..., An, B1, B2, ..., Bm)과 차수가 m인 릴레이션 S(B1, B2, ..., Bm)의 디비전 R  S는 차수가 n이고, S에 속하는 모든 투플 u에 대응하는 투플 tu(투플 t와 투플 u가 결합한 것)가 R에 존재하는 투플 t들의 집합



  

  관계 대수의 한계

  • 관계 대수는 산술 연산을 할 수 없다.
  • 정렬을 나타낼 수 없다.
  • 데이터베이스를 수정할 수 없다. -> 레코드 삽입, 삭제, 수정이 불가능
  • 프로젝션 연산의 결과에 중복된 투플을 나타내는 것이 필요할 때가 있는데 이를 명시하지 못한다.
 

  추가된 관계 대수 연산자

  • 집단 함수

질의 : 모든 사원들의 급여의 평균은 얼마인가?


  • 그룹화

질의 : 각 부서별 사원들의 급여의 평균은 얼마인가?


  • 외부 조인

- 상대 릴레이션에서 대응되는 투플을 갖지 못하는 투플이나 조인 컬럼에 널값이 들어 있는 투플들을 다루기 위해서 조인 연산을 확장한 조인이다.

- 두 릴레이션에서 대으오디는 투플들을 결합하면서, 대응되는 투플을 갖지 않는 투플과 조인 컬럼에 널값을 갖는 투플도 결과에 포함시킨다.







  관계 데이터 모델의 성공 요인

  • 간단한 테이블(릴레이션)을 사용한다.
  • 중첩된 복잡한 구조가 없어서 초보 사용자도 쉽게 이해할 수 있다.
  • 집합 위주로 데이터를 처리하므로 여러 테이블을 보여줄 수 있다.
  • 표준 데이터베이스 응용에 대해 좋은 성능을 보인다.
  • 다른 데이터 모델에 비해 이론이 잘 정립되어 있다.
  • 관계 데이터베이스는 설계와 효율적인 질의 처리 면에서 뛰어난 장점을 가진다.

 

  관계 데이터 모델의 특징

  • 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성한다.
  • 선언적인 질의어를 통한 데이터 접근이 가능하다.
  • 응용 프로그램들은 데이터베이스 내의 레코드들의 어떠한 순서와도 무관하게 작성된다.
  • 사용자는 원하는 데이터만 명시하고, 데이터를 찾는 방식은 명시할 필요가 없다.
  • 논리적으로 연관된 데이터를 연결하기 위해서 링크나 포인터를 사용하지 않는다.

 

  용어

  • 릴레이션(relation) 또는 테이블(table) : 2차원의 테이블 (스프레드 시트와 유사하다.)
  • 레코드(record) 또는 투플(tuple) : 릴레이션의 각 행
  • 애트리뷰트(attribute) : 릴레이션에서 이름을 가진 하나의 열
  • 카디날리티(cardinality) : 투플()들의 수, 자주 변경된다. 0을 가질 수 있다.
  • 차수(degree) : 애트리뷰트()들의 수, 자주 변경되지 않는다. 유효한 최소 차수는 1이다.

 

  도메인(domain)

  • 한 애트리뷰트(컬럼)에 나타날 수 있는 값들의 집합
  • 각 애트리뷰트의 도메인의 값들은 각각 단일값(원자값)을 가진다.
  • 프로그래밍 언어의 데이터 타입과 유사하다.
  • 동일한 도메인이 여러 애트리뷰트에서 사용될 수 있다.
  • 복합 애트리뷰트나 다치 애트리뷰트(배열)은 허용되지 않는다.
  • 형식 : CREATE DOMAIN 컬럼명 타입


EMPNO

EMPNAME

TITLE

DNO

SALARY

2106

홍길동

대리

2

2,000,000

3426

이순신

과장

3

2,500,000

3011

유관순

부장

1

3,000,000

1003

안중근

대리

1

2,000,000

3427

장발장

사원

3

1,500,000



위의 릴레이션에서 EMPNAME, EMPNO, DNO 도메인을 각각 정의하면,


CREATE DOMAIN EMPNAME CHAR(10)


 

CREATE DOMAIN EMPNO INTEGER


 

CREATE DOMAIN DNO INTEGER


 

 

  널값(null value)

  • 알려지지 않거나 적용할 수 없는 데이터의 경우 널값을 사용한다.
  • 널값은 숫자 도메인의 0이나 문자열 도메인의 공백 문자 또는 공백 문자열과는 다르다.
  • DBMS들마다 널값을 나타내기 위해 서로 다른 기호를 사용한다.
  • 예를 들어, 사원 릴레이션에 새로운 사원에 관한 투플을 입력하는데 신입사원의 DNO(부서번호)가 결정되지 않았을 경우 널값을 사용한다.

 

  릴레이션 스키마(Relation Schema 또는 Table Schema)

  • 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합
  • 릴레이션을 위한 틀(framework), 내포(intension)라고도 한다.
  • 기본 키 애트리뷰트에는 밑줄이 표시된다.
  • 형식 : 릴레이션이름(애트리뷰트1, 애트리뷰트2, ... 애트리뷰트N)
  • ex) EMPLOYEE(EMPNO, EMPNAME, TITLE, DNO, SALARY)

 

  릴레이션 인스턴스(Relation Instance)

  • 릴레이션에 어느 시점에 들어 있는 투플들의 집합
  • 시간의 흐름에 따라 계속 변한다.
  • 대부분 릴레이션에는 현재 인스턴스()만 저장된다. , 과거의 값은 저장되지 않는다.
  • 외연(extension)이라고도 한다.

 

* 관계 데이터베이스 스키마는 하나 이상의 릴레이션 스키마들로 이루어지고, 인스턴스는 릴레이션 인스턴스들의 모임으로 구성된다.

 

  릴레이션의 특징

  • 릴레이션 자체는 투플들의 집합이다.

  • 각 릴레이션은 오직 하나의 투플 유형만 포함한다. 예를 들어, 부서 릴레이션에 사원 데이터가 올 수 없다.

  • 한 애트리뷰트 내의 값들은 동일한 타입의 투플 값이므로 모두 같은 유형이다.

  • 애트리뷰트 및 투플들의 순서는 중요하지 않다.

  • 완전히 동일한 투플이 두 개 이상 존재하지 않는다. by 집합론

  • 한 투플의 각 애트리뷰트는 단일값을 가진다. {8, 9}와 같은 다치 애트리뷰트는 허용되지 않는다.

  • 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유하다. , 다른 릴레이션 간의 컬럼 이름이 중복될 수 없다.


  릴레이션의 키(Key)

  • 각 투플들을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임이다.

  • 수퍼 키(Super key) : 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나 이상의 애트리뷰트들의 집합이다투플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있다.

ex) 신용카드 회사의 고객 릴레이션에서 (신용카드번호, 주소) 또는 (주민등록번호, 이름) 또는 (주민등록번호)가 수퍼키가 될 수 있다.

  • 후보 키(Candidate Key) : 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임이다모든 릴레이션에는 최소한 한 개 이상의 후보 키가 있다후보 키도 두 개 이상의 애트리뷰트로 이루어질 수 있으며 이런 경우 복합 키(Composite Key)라고 부른다.

ex) (신용카드번호, 주소)는 신용카드 회사의 고객 릴레이션의 후보 키가 아니지만 (신용카드번호)는 후보 키가 된다. 주소의 경우 중복될 수 있으므로 고유 식별자라 보기 힘들다.


ex) (학번, 과목번호)가 후보 키인 것은 학번이나 과목번호 각각으로는 레코드를 구별하기 어려우므로 두 속성을 합쳐서 식별자 역할[복합 키]을 부여한다.

  • 기본 키(Primary Key) : 한 릴레이션에 후보 키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정할 수 있다. 자연스러운 기본 키를 찾을 수 없는 경우 레코드 번호와 같이 인위적인 키 애트리뷰트를 릴레이션에 추가하기도 한다. 릴레이션에 하나만 존재한다.

ex) 신용카드 회사의 고객 릴레이션에서 신용카드번호와 주민등록번호가 후보 키가 될 수 있다. 이 중에서 신용카드 번호를 기본 키로 선정하는 경우

  • 대체 키(Alternate Key) : 기본 키로 선정되지 못한 후보키로, 신용카드 회사의 고객 릴레이션에서 신용카드 번호를 기본 키로 선정하면 주민등록번호는 대체 키가 된다.

  • 외래 키(Foreign Key) : 어떤 릴레이션(참조되는 릴레이션)의 기본 키를 참조하는 애트리뷰트

- 관계 데이터베이스에서 릴레이션들 간의 관계를 나타내기 위해 사용된다.

- 외래 키를 가진 릴레이션을 참조하는 릴레이션이라 부른다.

- 외래 키 애트리뷰트는 참조되는 릴레이션의 기본 키에 있는 값들만 가져야한다.

- 자신이 속한 릴레이션의 기본 키의 구성요소가 되거나 되지 않을 수 있다.

- 참조되는 릴레이션이 참조하는 릴레이션이 될 수도 있다. (자신의 기본 키를 참조할 수 있다.)



EMPLOYEE 테이블의 (DNO)가 DEPARTMENT 테이블의 (DEPTNO)를 참조하고 있다.

, DNO는 사원 테이블의 외래키가 되므로

EMPLOYEE : 참조하는 릴레이션

DEPARTMENT : 참조되는 릴레이션


 

자기 자신의 기본 키를 참조할 경우, 외래 키는 기본 키에 없는 값인 NULL을 가질 수 있다.


 

  데이터 무결성(Data Integrity)

  • 데이터의 정확성이나 유효성을 의미한다.
  • 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의해야 한다.
  • 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로 응용 프로그램들은 일관성 조건을 검사할 필요가 없다.

 

  도메인 제약조건(Domain Constraint)

  • 각 애트리뷰트 값이 반드시 단일값이어야 한다.
  • 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있다.
  • 데이터 타입을 통해 값들의 유형을 제한하고, CHECK 질의어를 통해 값들의 범위를 제한할 수 있다.

 

  키 제약조건(Key Constraint)

  • 키 애트리뷰트에 중복된 값이 존재해서는 안 된다.
  • 외래키의 경우, 키 제약조건을 받지 않는다.

 

  엔티티 무결성 제약조건(Entity Integrity Constraint)

  • 릴레이션의 기본키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없다.
  • 대체 키(기본 키가 되지 못한 후보 키)에는 적용되지 않는다.
  • 사용자는 릴레이션을 생성하는 데이터 정의문(SQL)에서 어떤 애트리뷰트가 릴레이션의 기본키의 구성요소인가를 DBMS에게 알려준다. -> SQL : primary key (`컬럼명`);

 

  참조 무결성 제약조건(Referential Integrity Constraint)

  • 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용된다.
  • 관계 데이터베이스가 릴레이션들로만 이루어지고, 릴레이션 사이의 관계들이 다른 릴레이션의 기본 키를 참조하는 것을 기반으로 하여 묵시적으로 표현되기 때문에 외래키가 가지는 참조 무결성 제약조건은 정!! 중요하다.
  • 릴레이션 R2의 외래 키가 릴레이션 R1의 기본 키를 참조할 때 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족된다.

- 외래 키의 값은 R1의 어떤 투플의 기본 키 값과 같다. (Not Null)

- 외래 키가 자기 자신의 기본 키를 참조할 경우, 외래 키는 널값을 가질 수 있다.



  무결성 제약조건의 유지

  • 데이터베이스에 대한 갱신 연산은 삽입 연산, 삭제 연산, 수정 연산으로 구분한다.
  • DBMS는 각각의 갱신 연산에 대하여 데이터베이스가 무결성 제약조건들을 만족하도록 필요한 조치를 취한다.
  • DBMS는 외래 키가 갱신되거나, 참조된 기본 키가 갱신되었을 때 참조 무결성 제약조건이 위배되지 않도록 해야 한다. (특히, 삭제 or 수정 연산은 관계에 영향을 미칠 수 있다.)
  • 삽입 연산
    1. 참조되는 릴레이션에 새로운 투플이 삽입되면 참조 무결성 제약조건은 위배되지 않는다.
    2. 참조하는 릴레이션(외래키를 가진)에 새로운 투플을 삽입할 때는 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 외에 참조 무결성 제약조건도 위배할 수 있다. -> 외래 키가 참조하는 기본키에 없는 값을 삽입하는 경우
  • 삭제 연산
    1. 참조하는 릴레이션(외래키를 가진)에서 투플이 삭제되면 모든 제약조건을 위배하지 않는다.

    2. 참조되는 릴레이션에서 투플이 삭제되면 대응되는 외래키의 유무에 따라 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있다.
  • 수정 연산
    1. DBMS는 수정하는 애트리뷰트가 기본 키인이 외래 키인지 검사한다.

    2. 수정하려는 애트리뷰트가 기본 키도 아니고 외래 키도 아니면 수정 연산이 참조 무결성 제약조건을 위배하지 않는다.

    3. 기본 키나 외래 키를 수정하는 것은 하나의 투플을 삭제하고 새로운 투플을 그 자리에 삽입하는 것과 유사하므로, 아래에 설명한 DBMS가 제공하는 옵션들이 모두 적용된다.

  • 참조 무결성 제약조건을 만족시키기 위해 DBMS가 제공하는 옵션
    1. 제한(Restricted) : 위배를 야기한 연산은 단순히 거절한다.
    2. 연쇄(Cascade) : 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서도 해당 기본 키를 가진 투플에 대응되는 투플들을 함께 삭제한다.
    3. 널값(Nullify) : 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 널값을 삽입한다.
    4. 디폴트(Default) : 널값을 넣는 대신에 디폴트값을 넣는다는 것을 제외하고는 널값 옵션과 유사하다.

 




  데이터베이스(Database)

  • 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터(operational data)들이 구조적으로 통합된 모임.
  • 운영 데이터 : 조직체에서 매우 중요한 데이터
  • 기본적으로 정보와 데이터는 다르다.
  • 정보 : 데이터가 가공된 것으로, 컴퓨터를 사용하여 수집하고 분석하는데 데이터베이스 기술이 활용된다.
  • ex) 항공기 예약 시스템 : 고객이 좌석을 예약하면 모든 예약 정보가 데이터베이스에 기록된다.

  데이터베이스의 특징

  • 데이터베이스는 데이터의 대규모 저장소로서, 여러 사용자에 의해 공유되므로 동시에 사용된다.
  • 모든 데이터는 정규화에 의해 중복을 최소화하면서 통합된다.
  • 데이터베이스는 한 조직체의 운영 데이터뿐만 아니라 데이터베이스 스키마메타 데이터(metadata)까지 포함하는데, 스키마와 메타 데이터는 운영 데이터에 관한 설명을 의미한다.
  • 프로그램과 데이터 간의 독립성이 제공된다. , 데이터를 변경하더라도 프로그램에 영향을 미치지 않을 수 있다.
  • 효율적으로 접근이 가능하고 질의(SQL)를 할 수 있다.

 

  데이터베이스 관리 시스템(Database Management System, DBMS)

  • 사용자가 데이터베이스를 생성하고, 구조를 명시할 수 있게 하고, 데이터를 효율적으로 질의하고 수정할 수 있도록 하며, 시스템의 고장이나 권한이 없는 다른 사용자로부터 데이터를 안전하게 보호함과 동시에 여러 사용자가 데이터베이스를 접근하는 것을 제어하는 소프트웨어 패키지
  • 데이터베이스 언어라고 부르는 특별한 프로그래밍 언어를 한 개 이상 제공한다.
  • SQL(Structure Query Language) : 여러 DBMS에서 사용할 수 있는 표준 데이터베이스 언어
  • ex) Oracle, MySQL, MSSQL 등이 있다.


  데이터베이스 스키마

  • 전체적인 데이터베이스의 구조
  • 데이터베이스의 모든 가능한 상태를 미리 정의해야 하며, 자주 변경되지는 않는다.
  • 내포(intension)라고 부른다.
EX)

DEPARTMENT(DEPTNO, DEPTNAME, FLOOR)

-> 부서 정보를 담은 DB의 구조.

-> 부서의 식별자(DEPTNO), 부서명(DEPTNAME), 부서의 층수(FLOOR)로 구성되어 있다.


EMPLOYEE(EMPNO, EMPNAME, TITLE, DNO, SALARY)

-> 직원 정보를 담은 DB의 구조.

-> 직원의 식별자(EMPNO), 직원 이름(EMPNAME), 직함(TITLE), 소속된 부서의 식별자(DNO), 월급(SALARY)으로 구성되어 있다.



  데이터베이스 상태

  • 특정 시점의 데이터베이스의 내용을 의미하며, 내용이란 레코드의 모임으로 본다.
  • 시간이 지남에 따라 계속해서 바뀐다.
  • 외연(extension)이라고 부른다.

EX)


DEPARTMENT

DEPTNO

DEPTNAME

FLOOR

1

영업

8

2

기획

10

3

개발

9

 

EMPLOYEE

EMPNO

EMPNAME

TITLE

DNO

SALARY

2106

홍길동

대리

2

2,000,000

3426

이순신

과장

3

2,500,000

3011

유관순

부장

1

3,000,000

1003

안중근

대리

1

2,000,000

3427

장발장

사원

3

1,500,000




  데이터베이스 시스템(Database System, DBS)

  • DBMS 에는 하나의 DB서버만 존재할 수 있으며, DB서버에는 여러 개의 DB가 존재할 수 있다.
  • 데이터베이스는 시스템 카탈로그(system catalog)인 데이터베이스 스키마와 저장된 데이터베이스로 구분될 수 있다.
  • 데이터베이스 시스템에서 하드웨어의 역할 : 데이터베이스는 디스크와 같은 보조 기억 장치에 저장되며, DBMS에서 원하는 정보를 찾기 위해서는 디스크의 블록(Block)들을 주기억 장치(RAM)로 읽어 들여야 한다. 또한 계산이나 비교 연산들을 수행하기 위해 중앙 처리 장치(CPU)가 사용된다.
  • DBMS 자체도 주기억 장치(RAM)에 적재되어 실행된다.


  데이터베이스 시스템의 요구사항

  • 프로그램과 데이터 간의 독립성
  • 효율적인 데이터 접근
  • 데이터에 대한 동시 접근(공유성)
  • 백업과 회복
  • 중복을 줄이거나 제어하는 등의 일관성 유지
  • 데이터 무결성 : 테이블에 들어가는 데이터의 정확성
  • 데이터 보안
  • 쉬운 질의어
  • 다양한 사용자 인터페이스


  DBMS 언어

  • 데이터 정의어(Data Definition Language, DDL) : 데이터베이스 스키마를 정의하기 위한 언어로, 명시된 문장이 입력되면 DBMS는 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그에 저장한다.

데이터 구조의 생성 : CREATE TABLE ~

데이터 구조의 변경 : ALTER TABLE ~

데이터 구조의 삭제 : DROP TABLE ~

데이터 접근을 위해 특정 애트리뷰트 위에 인덱스 정의 : CREATE INDEX

  • 데이터 조작어(Data Manipulation Language, DML) : 데이터베이스 내의 원하는 데이터를 검색, 수정, 삽입, 삭제한다. 대부분의 데이터 조작어는 SUM, COUNT, AVG와 같은 내장 함수들을 갖고 있다. 일반적으로 프로그램에 내포(코드 상의)되어 사용된다.

데이터 검색 : SELECT ~

데이터 수정 : UPDATE ~

데이터 삭제 : DELETE ~

데이터 삽입 : INSERT ~

  • 데이터 제어어(Data Control Language, DCL) : 사용자는 데이터 제어어를 사용하여 데이터베이스 트랜잭션을 명시하고 권한을 부여하거나 취소한다.

 

  DBMS 사용자

  • 데이터베이스 관리자(Database Administrator, DBA) : 조직의 여러 부분의 상이한 요구를 만족하도록 일관성 있는 데이터베이스 스키마를 생성하고 유지한다.

- 데이터베이스 스키마의 생성과 변경

- 무결성 제약조건을 명시

- 사용자의 권한을 허용 및 취소하고, 사용자의 역할을 관리

- 저장 구조와 접근 방법(물리적 스키마) 정의

- 백업과 회복을 담당

- 표준화를 시행

  • 응용 프로그래머 : 데이터베이스 위에서 특정 응용이나 인터페이스를 구현하며, 데이터베이스를 접근하는 부분은 내포된 데이터 조작어(Embedded )를 사용한다. 이들이 작성한 프로그램은 최종 사용자들이 반복해서 수행하므로 미리 만들어놓은 트랜잭션이라고 부른다.
  • 최종 사용자 : 질의 및 갱신이나 보고서를 생성하고자 데이터베이스를 사용한다.
  • 데이터베이스 설계사 : Computer Aided Software Engineer 도구들을 이용해서 데이터베이스 설계를 담당한다. 데이터베이스의 일관성을 유지하기 위해 정규화를 수행한다.
  • 오퍼레이터 : DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람

  DBMS의 아키텍쳐

  • DBMSANSI/SPARC 아키텍쳐의 3단계로 이루어진다.

- 외부 단계(external level) : 각 사용자의 뷰(최상위)

- 개념 단계(conceptual level) : 사용자 공동체의 뷰(중간)

- 내부 단계(internal level) : 물리적 또는 저장 뷰(최하위)

  • 스키마 간의 사상

- 외부/개념 사상(external/conceptual mapping) : 외부 단계의 뷰를 사용해서 입력된 사용자의 질의를 개념 단계의 스키마를 사용한 질의로 변환한다.

- 개념/내부 사상(conceptual/internal mapping) : 위의 변환된 질의를 다시 내부 단계의 스키마로 변환하여 디스크의 데이터베이스에 접근한다.

  • ANSI/SPARC 아키텍쳐는 데이터 독립성을 가진다. 이는 상위 단계의 스키마 정의에 영향을 주지 않으면서 어떤 단계의 스키마 정의를 변경할 수 있음을 의미한다.

- 논리적인 데이터 독립성 : 개념 스키마의 변화로부터 외부 스키마가 영향을 받지 않는다.

ex) 컬럼 추가 및 테이블 추가 : 외부 뷰의 경우 이미 있던 데이터를 사용 중이므로 새 테이블이 추가되어도 영향을 받지 않는다. , 삭제나 컬럼 변경은 영향을 줄 수 있다, 기존의 외부 스키마에 영향을 미치지 않고, 응용 프로그램을 다시 작성할 필요 없이 개념 스키마에 대한 변화가 가능해야 한다.


- 물리적인 데이터 독립성 : 내부 스키마의 변화가 개념 스키마에 영향을 미치지 않으므로 외부 스키마(또는 응용 프로그램)에도 영향을 미치지 않는다.

ex) 파일의 저장 구조를 바꾸거나 인덱스 생성 및 삭제



  DBMS 운영 방식

  • 중앙 집중식 데이터베이스 시스템(Centralized Database System) : 일반적인 방식으로, 데이터베이스 시스템이 하나의 컴퓨터 시스템에서 운영된다.
  • 분산 데이터베이스 시스템(Distributed Database System) : 네트워크로 연결된 여러 사이트에 데이터베이스 자체가 분산되어 있으며, 데이터베이스 시스템도 여러 컴퓨터 시스템에서 운영된다. 권한만 있다면 사용자는 다른 사이트에 저장된 데이터베이스에 접근할 수 있다. 이 때 시스템 카탈로그는 확장되어 각 DB가 어디에 위치하는지 알아야 한다.(명세 기재 시 확장)
  • 클라이언트-서버 데이터베이스 시스템(Client-Server Database System)

- 하나의 데이터베이스 서버에 데이터베이스가 저장되며, 자체 컴퓨팅 능력을 가진 클라이언트를 통해 데이터베이스 서버에 접근한다.

- 데이터베이스 시스템의 기능은 서버와 클라이언트에 분산된다. 대부분의 기능은 서버에 있고, 클라이언트의 경우 사용자 인터페이스를 관리하고 응용들을 수행한다.

- 클라이언트가 사용하는 DB를 업데이트할 경우, 다른 클라이언트도 최신버전으로 업데이트해야 한다.

- 2층 모델(2-tier model) : 클라이언트와 데이터베이스 서버가 직접 연결된다.

- 3층 모델(3-tier model) : 클라이언트와 데이터베이스 서버 사이에 응용 서버가 추가된다.

ex) 브라우저(Client) - Application Server(응용서버) - DB 서버(DBMS)

- 응용 서버는 응용 논리를 처리하며, Web Server가 그 역할을 수행한다. Server Side Scripting 방식으로 수행되어진다.

- 장점 : 데이터베이스를 보다 넓은 지역에서 접근할 수 있으며 다양한 컴퓨터 시스템을 사용할 수 있다.

- 단점 : 보안이 다소 취약할 수 있다.

 



+ Recent posts