컴퓨터 시스템에 저장된 정보나 데이터를 모두 모아 놓은 집합 ( 필요한 데이터를 가득 모아놓은 베이스 )
실제로 데이터베이스는 아래 사진과 같이 생긴 커다란 기계에 숫자나 문자열로 이루어진 데이터들이 가득 들어있음
사진과 같은 데이터(데이터베이스 내부에 들어있는 데이터)들은 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됨.
데이터와 DBMS를 관련 응용 프로그램과 함께 '데이터베이스 시스템'이라고 하며, 줄여서 '데이터베이스(DB)'라고도 함.
databse, DBMS 사용 이유
데이터 보존 : 데이터를 오랜기간 저장 및 보존하기 위해
체계저 관리 : 데이터를 체계적으로 보존하고 관리하기 위해
생산성
기능성
신뢰성
웹 시스템 내 데이터베이스
프론트 엔드가 웹 클라이언트(브라우저)에서 동작하는 모든 것을 자바스크립트 코드로 만듦.
백 엔드가 프론트가 작성한 자바스크립트 코드가 요청했을 때 API를 만드는, 데이터베이스 관리하는 일을 함.
실제 브라우저 상에 저장 되있는 게 아니라. 데이터가 영구히 보존되어있는 데이터베이스에 저장되어있음.
웹 어플리케이션 서버는 데이터베이스 응답을 프론트 분들이 쉽게 사용하게 가공함. 데이터베이스도 체계적으로 쓰고 있지만 날 것. 날것 데이터를 조금더 예쁜 데이터로 가공해서 클라이언트에게 응답을 보내줘야 함. 정제된 응답을 받은, 프론트가 다시 화면을 예쁘게 렌더링
실제로 데이터가 저장되는 공간은 하드디스크. 하드 디스크앞에 DBMS라는 소프트웨어 설치되있음.
데이터 사이의 관계에 기초를 둔 데이터베이스 시스템
모든 데이터는 2차원 테이블(table)로 표현
Primary Key : 각 로우는 저만의 고유 키(Primary Key)가 있음. 특정 로우를 찾거나, 인용(reference)할 수 있음.
테이블 사이 관계 종류
어떻게 테이블과 테이블을 연결하는가?
왜 테이블들을 연결하는가?
도메인 원자값 (1NF) : 도메인 원자값 조건 만족 해야 함
반복 그룹이 존재하면 안됨.
모든 행은 식별자로 완전하게 구분
그런데, '학생' 테이블은 2번 조건인 "모든 행은 식별자로 완전하게 구분 되어야 한다." 라는 조건이 만족하는 반면
수강내역은 prime key인 '학번'만으로는 모든 행이 구분되지 않음.
그렇기 때문에 추가적으로 key를 설정 해 주어야 함.
그래서 '수강 내역' 테이블의 '학번'+'수강학기'+'과목명'을 복합하여 식별자로 두면서 문제를 해결하면 제 1 정규화는 마무리 됨.
부분 함수 종속 제거 (2NF) : Key가 아닌 값들은 모두 key에 종속 되어야한다는 말
이행 함수 종속 제거 (3NF) : 제 2정규형을 만족하고, 테이블 내의 모든 속성이 키에만 의존하며 다른 후보키에 의존하지 않음.
- 모든 key가 아닌 컬럼(non-key)은 key 컬럼(속성)에 완전히 종속 되어야 함.
- 모든 non-key 컬럼은 key 컬럼(속성)에만 종속 되어야 함함
- 그래서 key가 아닌 값에 주목!
non key 컬럼인 '대학'과 '전공'을 보게되면 key가 아닌 컬럼인데도 불구하고, 종속 관계가 성립이 됨
'대학'의 경우 '전공'을 포함하기 때문. 즉, 생물학과면 무조건 이과대학에 포함되고, 컴퓨터 학과의 경우 IT대학의 부분으로 포함이 됨.
정규화가 잘 된 테이블은 갑-을 관계만 있는 것.
그런데 '학생'테이블의 경우 갑(key:학번)-을(non-key:대학)-병(non-key : 전공) 관계가 있기 때문에 이 관계를 깔끔하게 정리 해주어야 함.
'대학정보' 테이블의 경우 대학이 전공을 포함. 하지만 key는 테이블의 튜플을 구분해 낼 수 있어야 함.그래서 튜플을 구분하기 위해서는 '전공'이 key 값이 됨.
'대학'정보를 참조하기 위해서는 학생 테이블의 '전공'을 외래키(foreign key)로 설정하여 '대학정보' 테이블을 참조 할 수 있게 해야 함.그래서 제 3정규화를 마친 '학생' 테이블은 다음과 같이 분리 하게 됨.
최종 테이블
결정자이면서 후보키가 아닌 것 제거 (BCNF)
다치 종속 제거 (4NF)
조인 종속성 이용 (5NF)