Database란 다양한 기준으로 체계화하여 관리하는 데이터의 집합이다. 이런식의 표현은 이해하기 쉽지 않다.
데이터베이스와 파일은 어떤 차이가 있을까? 둘 다 디스크에 저장되며 데이터를 저장하고 있지만 차이점이 존재한다.
좀 더 세세하게 둘의 차이를 비교하며 데이터베이스를 이해해보자.
데이터베이스를 관리하는 소프트웨어인 DBMSs가 있다. 이 소프트웨어는 데이터를 저장, 관리, 접근을 가능하게 한다.
어떤 수업 출석부와 과 학생에 대한 정보를 파일에 저장하여 관리한다 생각해보자.
두 파일에 중복된 정보가 저장될 수 있다. 만약 학생 정보를 수정하려면 두 번 수정을 해야한다.
비일관성은 모두 수정하지 않았을 때 학생의 정보가 다름을 의미한다.
출석부에서 특정 학과 학생들만 보기 위해서 이를 수행하기 위한 또 다른 프로그램을 만들어야 한다.
어떠한 학생이 무슨 수업을 듣는지를 알고 싶을 때, 모든 출석부 파일을 탐색해야 한다.
파일에서 선수 과목을 요구하는 과목을 수강할 때, 이를 파일로 구현하기 어렵다.
구현을 한다 해도 유지보수하기 굉장히 까다로울 것이다.
Atomic하다란 더 이상 쪼갤 수 없다는 뜻이다. 즉 특정 일을 수행할 때 무조건 일어나거나 일어나지 말아야한다.(all or nothing)
예를 들어, 송금 처리 과정이 더하기, 빼기 연산으로 이루어졌을 때, 두 연산 중 하나만 일어나면 절대 안되기 때문에, 두 연산이 모두 무조건 발생해야한다.
동시에 두명 이상의 유저가 동시에 인출을 했을 때, 파일에 저장된 잔액이 update가 되지 않고 중복하여 인출을 해줄 수 있다. 이러한 문제를 유발할 수 있다.
파일마다 사용자마다 권한을 부여하는 것이 굉장히 힘들다.
위의 파일을 데이터베이스로 사용했을 때의 문제점을 알아보았다. 이를 타개할 데이터베이스의 추상화를 알아보자.
Data model은 data를 어떻게 다룰 것인지를 따진다.(어떻게 구조화할지, 어떻게 접근할지, 어떤 규칙과 제한을 적용할지..)
데이터가 tuple의 형태로 나열되어 저장되는 모델이다. 테이블 하나하나가 다 Relation이다.
위는 과목-선수 관계(Relationship)을 표현한 E-R 모델 관점의 테이블이다.
하나의 Relation의 논리적 구조이다. Relation의 이름과 attributes의 set이다.
간단하게 말하여, 모든 열의 header 이름들이다.
instructor (ID, name, dept_name, salary)
department (dept_name, building, budget)
course (course_id, title, dept_name, credits)
prereq (course_id, prereq_id)
Relation의 내용물이다.
위의 digram에서 밑줄이 있는 attribute는 key라 불린다.
key란 tuple(row)의 식별자로 보면 된다. 만약 tuple의 모든 값이 같으면 안되므로, 학생정보에서 ID와 같이 고유한 값이 필요하다.(이름, 성별, 나이, 학과가 같아도 ID는 다를 것이다.)