: 서로 연관이 있는 데이터들의 모임이다.
: 알려진 사실로서 의미를 가지고 기록될 수 있다는 특성을 갖는다.
⇨ 즉, 데이터베이스는 데이터가 생성되는 원천(source)를 가지며, 실세계의 사건들과 어느정도 상호작용을 가지고, 데이터베이스이ㅡ 내용에 능동적으로 관심을 갖는 사용자를 가진다.
⇨ 데이터베이스가 항상 정확하고 안정적이기 위해서는 그 데이터베이스가 표현하는 작은 세계에서 발생하는 변화들이 가능한 빨리 반영되어야한다.
⇨ 데이터베이스는 다양한 복잡도와 크기를 가진다.
⇨ 데이터베이스는 수동 또는 컴퓨터를 이용하여 생성 및 관리된다.
여러 사용자와 프로그램이 데이터베이스에 동시에 접근하도록 하는 기능이다.
** 응용프로그램(application program)은 DBMS에 질의(query) 또는 데이터 요청을 보내서 데이터베이스에 접근한다.
질의는 일반적으로 몇몇 데이터를 결과로 반환하며, 트랜잭션(transaction)은 데이터베이스로부터 몇몇 데이터를 읽고 몇몇 데이터를 쓴다.
: 데이터베이스 + DBMS
데이터 베이스는 다음과 같은 다섯개의 파일로 구성되며, 각 파일은 동일한 유형의 데이터 레코드(data record)들을 저장한다.
데이터베이스를 정의하기 위해서는 각 파일의 레코드 구조를 명시해야한다.
즉, 각 레코드에 저장되는 데이터 항목(data record)들을 저장한다.
-> Course_name, Course_number 등
각 데이터 항목에 대하여 데이터 타입도 명시해야 한다.
UNIVERSITY 데이터베이스를 생성하기 위하여 각 학생, 과목, 강좌, 성적, 선수과목을 나타내는 데이터를 해당되는 테이블에 한 레코드로 저장한다.
여러 파일에 속하는 레코드들이 서로 연관을 가질 수 있음에 유의한다.
-> 대부분의 중형, 대형 데이터베이스는 다양한 유형의 레코드와 레코드 사이의 관계(relationship)를 가진다.
데이터베이스의 조작은 질의와 갱신을 포함한다.
(비정형 형태의 질의와 갱신은 데이터베이스 시스템에서 처리되기 전에 DBMS의 질의어로 정확하게 명세해야 한다.
** 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. [위키피디아]
데이터베이스 방식의 주요 특징은 데이터베이스 시스템이 데이터베이스 자체뿐만 아니라 데이터베이스의 구조와 제약 조건에 대한 완전한 정의까지 가지고 있다는 점이다.
데이터베이스에 대한 정의는 데이터베이스에 속하는 각 파일들의 구조, 각 데이터 항목의 타입과 저장 혁식, 데이터에 대한 다양한 제약 조건 등을 나타낸다. 이 정의는 DBMS 카탈로그에 저장된다. 카탈로그에 저장된 정보를 메타데이터라고 부르며, 기본 데이터베이스의 구조를 기술한다.
NOSQL 시스템은 메타데이터를 필요로하지 않는다. 이런 시스템에서는 데이터가 단일 구조 내에 데이터 항목 이름과 데이터 값을 함께 포함하는 자기 기술성 데이터로 저장된다.
카탈로그는 DBMS가 사용한다. 데이터베이스 구조에 관한 정보를 원하는 사용자가 카탈로그를 이용
범용 DBMS는 특정 데이터베이스에 저장된 파일들의 구조를 파악하기 위하여 데이터 타입이나 포맷과 같은 정보를 카탈로그로부터 얻는다.
DBMS는 카탈로그에 데이터베이스 정의가 등록된 대학교 데이터베이스, 은행 데이터베이스, 회사 데이터베이스 등 모든 데이터베이스를 공평하게 취급한다.
기존의 파일처리 방식에서는 데이터의 정의가 대개 응용프로그램의 일부로 표현된다.
파일처리방식이 특정 데이터베이스만을 접근할 수 있음에 비하여, DBMS는 시스템 카탈로그로부터 데이터베이스에 대한 정의를 가져와서 데이터베이스를 접근하므로 다양한 데이터베이스들을 접근할 수 있다.
⇨ STUDENT의 Name에 대한 접근 요청이 들어오면 DBMS는 카탈로그로부터 STUDENT파일의 구조, STUDENT 레코드 내에서 Name 데이터 항목의 위치와 길이에 관한 정보를 파악한 후에 해당 데이터를 추출하게 된다.
⇨ 반면에, 파일처리 방식에서는 파일의 구조와 심지어 STUDENT 레코드 내에서 Name 데이터 항목의 정확한 위치까지 이 데이터 항목을 접근하는 각 응용 프로그램에 코딩해야 한다.
프로그램-데이터 독립성(program-data independence)
: DBMS의 경우 데이터 파일의 구조가 응용 프로그램과 분리되어 DBMS 카탈로그에 저장된다. 따라서 데이터 파일의 구조가 변경되어도 응용 프로그램은 거의 변하지 않게 된다.
-> 기존의 파일처리 방식에서는 데이터 파일의 구조에 대한 정보가 데이터 파일을 접근하는 응용 프로그램 내에 표현되므로 파일의 구조가 변경되면 그 데이터 파일을 접근하는 모든 응용 프로그램도 변경해야 한다.
프로그램-연산 독립성
: 연산의 구현이 변경되어도 인터페이스가 유지되는 한 응용프로그램은 변경할 필요가 없다.
데이터 추상화(data abstraction)
: 프로그램-데이터 독립성, 프로그램-연산 독립성을 제공하는 성질
DBMS는 데이터가 어떻게 저장되었고 연산들이 어떻게 구현되었는가에 대한 상세한 정보보다는 사용자에게 데이터에 대한 개념적인(conceptual representation)을 제공한다.
데이터 모델
: 추상화의 한 종류로 볼 수 있으며,
컴퓨터 기억장소의 개념보다 대부분의 사용자가 더 이해하기 쉬운 객체, 성질, 객체들 간의 관련성과 같은 논리적인 개념을 사용한다.
즉, 데이터 모델은 대부분의 데이터베이스 사용자가 관심을 갖지 앟는 기억 장소와 구현에 관한 상세 정보를 숨기는 역할을 한다.
+데이터베이스에서는 각 파일의 구조에 관한 상세한 정보가 카탈로그에 저장된다. 데이터베이스 사용자와 응용프로그램은 데이터 모델이 제공하는 파일의 개념적이 표현을 참조하며, 필요하면 DBMS가 카탈로그로부터 파일의 상세 정보를 추출하여 이용한다.
뷰
: 데이터베이스의 일부이거나 데이터베이스로부터 유도되는 가상 데이터(virtual data)이지만 뷰의 데이터는 실제로 데이터베이스에 저장되지 않는다.
어떤 사용자는 자신이 사용하는 데이터가 데이터베이스에 저장된 실제 데이터인지 또는 유도된 데이터인지 구분할 필요가 없다.
다수의 사용자용 DBMS는 여러 사용자들이 자신의 뷰를 정의할 수 있도록하는 기능을 제공해야 한다.
다수 사용자용 DBMS
: 여러 사용자가 동시에 데이터베이스를 접근할 수 있는 DBMS
다수 사용자용 DBMS의 기본적인 기능은 동시에 수행되는 트랜잭션들이 상호방해를 받지 않고 정확하고 효율적으로 수행되도록 보장하는 데 있다.
트랜잭션 : 데이터베이스 레코드를 읽거나 갱신하는 것과 같이 한 번 이상의 데이터 베이스 접근을 포함하는 프로그램, 혹은 프로세스를 수행하는 것이다.
각 트랜잭션은 다른 트랜잭션의 간섭 없이 완전히 수행되면 논리적으로 올바르게 데이터베이스 접근을 실행하는 것으로 여겨진다.
DBMS는 트랜잭션의 몇 가지 성질들을 강제적으로부터 강제적으로 지키도록 해야한다.
데이터베이스 관리자
데이터베이스 주요 자원을 관리하고 감독한다.
데이터베이스에 대한 접근을 감독하며, 자원의 사용을 모니터링하고 조정한다.
데이터베이스 설계자
최종 사용자
: 데이터베이스에 대하여 질의하고, 변경하고, 보고서를 작성하는 사람
캐주얼 사용자 : 데이터베이스를 가끔 접근하지만 매번 다른 정보를 찾는다. 이드른 정교한 데이터 베이스 질의어를 사용하여 데이터를 요구하며, 대개 중상급의 관리자이다.
초보사용자 : 기작성 트랜잭션들을 사용하여 데이터베이스를 검색하고 변경하는 사용자이다. Ex) 은행직원, 예약접수, 우편물 수신확인
전문 사용자 : 복잡한 요구사항을 가진 이들의 복잡한 요구사항을 만족시키도록 DBMS의 고급기능 을 이용하여 응용 프로그램을 구현
독자적인 사용자 : 메뉴나 그래픽 사용자 인터페이스를 제공하는 편리한 패키지를 사용하여 개인 데이터베이스를 유지하는 사용자이다. Ex) 세금 계산을 목적으로 개인의 다양한 재정 데이터를 저장하는 세금패키지의 사용자
시스템 분석가 및 응용 프로그래머(소프트웨어 공학자)
시스템 분석가 : 사용자의 요구사항을 분석한 다음에 이를 만족시키는 미리 작성된 표준 트랜잭션 들의 명세를 설계한다.
응용프로그래머 : 트랜잭션들의 명세를 프로그램으로 구현하며, 테스트, 에러 수정, 문서화 등의 작업을 수행하고, 이와 같은 미리 작성된 트랜잭션들을 유지 관리한다.
DBMS 소프트웨어와 시스템 환경을 설계하고 개발하는 사람들
DBMS의 설계자 및 구현자 : DBMS 모듈들과 인터페이스들을 소프트웨어 패키지로 설계하고 구현하 는 사람
도구 개발자 : 데이터베아스 모델링과 설계, 데이터베이스 시스템의 설계, 성능 개설 등에 이용되는 소프트웨어 패키지인 도구를 설계하고 구현하는 사람
운영자와 유지보수 직원 : 데이터베이스 시스템을 위한 하드웨어 및 소프트웨어 환경의 운영 및 유지를 담당하는 사람
① 논리적으로 한 번의 변경이지만 데이터가 중복된 횟수만큼 반복해서 변경해야 한다.
② 메모리 낭비를 초래한다.
③ 동일한 데이터를 포함하는 파일들에서 데이터의 불일치(inconsistency)가 발생할 수 있다.
⇨ 데이터베이스를 사용하는 경우에는 데이터에 대한 각 사용자 그룹의 뷰들이 데이터베이스설계 과정에서 하나로 통합된다.
각 논리적 데이터는 데이터베이스 내에 오직 한번만 저장되는 것이 가장 이상적이다.
데이터 정규화(normalization)
: 데이터베이스 내에 오직 한번만 저장하는 것
-> 데이터 정규화는 일관성을 유지하고, 저장공간도 절약한다.
반정규화(denormalization)
- 제어된 중복성(controlled redundancy)이 질의 성능을 개선하는 데 유용한 경우
예) GRADE_REPORT 레코드에 접근할 때마다 Student_name, Course_number를 함께 접근하는 응용이 빈번하다면 두개를 GRADE_REPORT 파일에 중복 저장하는 것이 바람직하다.
중복의 허용은 이런 경우 유용하지만, DBMS는 데이터 불일치가 초래하지 않도록 제어해야 한다.
중복의 제어는 GRADE_REPORT 파일의 각 레코드에 나타는 Student_name-Student_number의 값이 반드시 STUDENT파일에 포함된 어떤 레코드의 Student_name-student_number의 값과 일치하도록 함으로써 자동화할 수 있다.
데이터베이스 시스템은 질의와 갱신을 효율적으로 수행하는 기능을 제공해야 한다.
DBMS는 원하는 레코드를 디스크에서 검색하는 시간을 줄이기 위해 특수한 자료구조와 탐색 기법을 제공해야 한다.
인덱스(보조 자료파일) : 대체적으로 트리 자료 구조 또는 디스크 검색을 위해 적절하게 변형된 해시 자료 구조에 기반
데이터베이스 레코드를 처리하기 위해서는, 그러한 레코드들을 디스크에서 주기억 장치로 복사해야 한다. 그래서 DBMS는 종종 주기억 장치 버퍼에 데이터베이스의 일부분을 관리하는 별도의 버퍼링 또는 캐싱 모듈을 가진다.
-> 일반적으로는 운영체제가 담당하지만, 데이터 버퍼링이 DBMS의 성능에 매우 중요하기 때문에 대부분의 DBMS는 자체적으로 데이터 버퍼링을 한다.
DBMS의 질의 처리와 최적화 모듈은 존재하는 저장구조를 기반으로 각 질의에 대한 효율적인 실행계획을 선택할 책임이 있다.
-> 어떤 인덱스를 만들고 유지하는가의 선택은 데이터베이스 관리자의 책임 중에 하나인 물리적 데이터베이스 설계와 튜닝의 일부분이다.
데이터베이스 사용자들은 기술적인 지식의 보유 정도에 따라서 다양한 그룹으로 나누어지므로 DBMS도 이들 각각에 적합한 인터페이스를 제공해야 한다.
모바일 사용자에게는 앱을, 캐주얼 사용자에게는 질의어를, 응용프로그래머에게는 프로그래밍 언어 인터페이스를, 초보 사용자에게는 폼이나 명령어 인터페이스를, 독자적인 사용자에게는 메뉴 기반 인터페이스나 자연언어 인터페이스를 제공해야 한다.
데이터베이스에는 다양한 형태로 연관된 데이터가 저장된다.
DBMS는 새로운 관계가 나타날 때 그 관계를 정의하고 연관된 데이터를 쉽고 효율적으로 검색하고 변경할 수 있는 기능을 제공하기 위해 데이터 간의 복잡하고 다양한 관련성을 표시할 수 있어야 한다.
대부분의 데이터베이스 응용은 데이터에 대한 무결성 제약 조건(integrity constraint)들을 가진다.
DBMS는 무결성 제약 조건들을 정의하고 검사하는 기능을 가져야 한다.
가장 간단한 무결성 제약 조건은 각 데이터 항목에 대한 데이터 타입이다.
참고 무결성(referential integrity) 제약 조건 : 좀 더 복잡한 무결성 제약 조건으로는 한 파일의 레코드가 반드시 다른 파일의 레코드들과 연관성을 가져야 한다는 것이다.
키(key) 제약 조건: 데이터 항목의 값드링 유일해야 한다는 것이다.
이러한 제약 조건들은 실세계의 의미로부터 발생하는 것이며, 데이터베이스 설계자가 데이터베이스를 설계할 때 무결성 제약 조건도 명시하게 된다.
무결성 제약 조건들 중에서 일부는 DBMS가 자동으로 검사하며, 나머지는 데이터베이스를 변경하는 프로그램이나 데이터베이스를 변경하는 프로그램이나 데이터 입력 프로그램에서 검사한다.
전형적인 대형 응용 프로그램에서는 이런 제약 조건을 일반적으로 비즈니스 규칙(business rules)이라 부른다.
연역 데이터베이스 시스템(deductive database system)
: 어떤 데이터베이스 시스템에서는 데이터베이스에 저장되어 있는 사실로부터 새로운 정보를 추론하는 연역적 규칙을 정의할 수 있는데 이러한 기능을 가진 시스템
오늘날의 관계 데이터베이스 시스템들은 테이블을 트리거(trigger)와 연관시킬 수 있다.
트리거는 테이블의 업데이트에 의해 활성화되는 규칙의 한 형태로 다른 테이블에 추가적인 동작을 수행하거나 메시지를 보내는 등의 일을 수행한다.
저장된 절차(stored procedure)
: 규칙이 지켜지도록 하는 좀 더 복잡한 절차를 의미하다.
이것은 전체 데이터베이스 정의의 일부분이 되며 어떤 조건이 만족되면 호출된다.
① 표준 강화
: 데이터베이스를 사용하면, 큰 조직에서 데이터베이스 관리자가 데이터베이스 사용자들 사이에서 표준을 정의하고 지행할 수 있다.
② 응용 개발 시간의 단축
: 데이터베이스를 사용하면, 새로운 보고서를 출력하기 위해 데이터베이스에서 데이터를 검색하는 것과 같은 새로운 응용을 개발하는 데 걸리는 시간을 단축할 수 있다.
③ 융통성
: 요구사항이 변하면 데이터베이스 구조가 바뀔 수도 있다.
현대의 DBMS들에서는 저장된 데이터나 현재 사용하는 응용 프로그램에 영향을 미치지 않으면서 데이터베이스의 구조를 조금씩 변경하는 것이 가능하다.
④ 최신 정보의 가용성
: DBMS는 모든 사용자들에게 데이터베이스를 이용할 수 있게 해준다. 한 사용자가 데이터베이스를 변경하는 즉시 다른 사용자들은 곧바로 변경된 데이터를 확인할 수 있다. 이와 같이 최신 정보를 바로 볼 수 있는 기능은 예약 시스템이나 은행 데이터베이스와 같은 트랜잭션 처리 시스템에서 필수적인 기능이다.
이러한 기능은 DBMS가 제공하는 동시성 제어와 회복 서브시스템에 의해 구현된다.
⑤ 규모의 경제성
: DBMS를 사용하면 조직 내의 데이터와 응용이 통합되어 관리되므로 응용 프로그램들 사이의 중복뿐만 아니라 서로 다른 프로젝트나 부서의 업무가 불필요하게 중복되는 것을 상당 부분 줄여줄 수 있다.
전통적인 응용에서 관계 데이터베이스 시스템의 성공은 새로운 응용 개발을 촉진시켰다.
데이터베이스 시스템은 이런 응용들이 특별한 요구사항들을 좀 더 잘 지워하기 위해서 새로운 확장들을 제공한다.
<기본적인 관계 시스템은 새로운 응용을 지원에 적합하지 않은 이유>
이로 인해 DBMS 개발자들은 그들의 시스템에 새로운 응용을 지우너하기 위한 기능을 추가하게 되었다.
⇨ NOSQL : SQL만이 아니라는 의미로, 대규모 데이터를 관리하는 시스템에서, 응용의 요구사항에 따라 일부 데이터는 SQL 시스템을 사용하여 저장하고, 일부 데이터는 NOSQL 시스템을 사용하여 저장한다.
DBMS를 사용하면 비용이 높아짐 : 높은 초기 투자 비용과 추가적인 하드웨어가 필요하다.
데이터의 보안, 동시성 제어, 회복, 무결성 조건등의 기능이 필요하지 않은 응용 -> 오버헤드가 됨
맞춤형 데이터베이스 응용을 개발하는 것이 더 적합한 경우