Lab_01 : Schema
데이터베이스 스키마(Database Schema)는 데이터베이스에서 자료의 구조,자료의 표현방법, 자료 간의 관계를 형식 언어로 정의한 구조이다.
스키마란 한마디로 정의하면 '데이터의 구조' 또는 '데이터베이스의 설계'를 의미한다.
데이터베이스 스키마는 논리적 보기를 나타내는 일종의 골격구조와 같으며, 스키마는 데이터베이스를 구성하는 데이터 개체(entity),속성(Attribute),관계(Relationship) 및 데이터 조작시 데이터 값들이 갖는 제약 조건등에 관해 전반적으로 정의 한다.
- 개체 : 데이터로 표현하려고 하는 객체(여러 속성들로 구성)
ex) 학생,과목
- 속성 : 개체가 갖는 속성
ex) 홍길동(학생),이순신(학생),수학(과목),영어(과목)
- 관계 : 개체와 개체 사이의 연관성
ex) 학생과 과목 간의 "수강"이라는 관계를 가짐
스키마의 특징
- 스키마는 데이터 사전에 저장된다
데이터 사전: 데이터 항목들에 대한 정보를 지정한 중앙 저장소
- 스키마는 특정 데이터 모델을 이용해서 만들어진다 (현실 세계의 특정한 부분의 표현 ->학생,과목
- 스키마는 시간에 따라 불변인 특성을 가진다.
- 스키마는 데이터의 구조적 특성을 의미하며, 인스턴스에 의해 규정
Lab_02 : 3-Tier of Schema
스키마는 사용자의 관점에 따라 외부 스키마,개념스키마,내부 스키마로 나뉘어진다.

그림 스키마 3계층
- 외부 스키마(External Schema) = 사용자 뷰(View) :
- 개별 사용자들의 입장에서 데이터 베이스의 논리적 구조를 정의한 것이다.
- 동일한 데이터에 대해, 서로 다른 관점을 정의할 수 있도록 허용한다.
- 사용자의 관점에 따라 스키마가 구성된다
ex) 같은 회사의 CEOdhk 직원은 같은 회사에 대해 서로 다른 요구와 인식을 갖는다
- 개념 스키마
- DB 전체의 논리적인 구조를 정의
- 논리적 스키마라고도 함
- 데이터베이스의 엔티티와 해당 속성 및 관계를 정의
- ER모델링(엔티티 관계 모델링)은 엔티티 유형간의 관계가 무엇인지 지정한다. ER 모델링은 논리적 스키마를 생성하기 위한 도구이다.
- 내부 스키마
- 물리적 스키마라고도 함
- 실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의
- 데이터가 디스크 스토리지에 저장되는 방식을 나타낸다.
Lab_03 : RDB 설계
관계형 데이터베이스 중요 키워드
- 데이터(data) : 각 항목에 저장되는 값이다.
- 테이블(table) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적된다.
- 칼럼(column) 테이블의 한 열을 가리킨다.
- 레코드(record) : 테이블의 한 행에 저장된 데이터이다
- 키(key) :
- 테이블의 각 레코드를 구분할 수 있는 값이다.
- 각 레코드마다 고유한 값을 가진다.
- 기본키(primary key)와 외래키(foreign key) 등이 있다.
관계 종류
- 테이블과 테이블 사이의 관계
- 테이블 스스로 가지는 관계
Key의 종류
Key의 종류는 다음과 같이 나열된다
- 후보키(Candidate key) : 테이블을 구석하는 열 중에서 유일하게 식별할 수 있는 열
- 기본키(Primary Key) : 테이블에서 유일하게 식별하기 위해 사용하는 키
- 대체키(Alternate Key) : 후보키 중 기본키를 제외한 나머지 후보키
테이블에서 기본키가 꼭 필요한 것은 아니지만, 테이블과의 관계를 사용할 때, 실무에서는 매우 중요하다
- 외래키(Foreign Key) : 외래키란 테이블 내의 열 중 다른 테이블의 기본키를 참조하는 열을 외래키라 한다.
테이블의 관계 사용 실습
예를 들어, toy와 color 예시를 한 번 보면
color

my_toy

으로 정의가 된다
각 테이블 앞에는 Primary Key가 붙어 있음을 알 수 있다.
toy_color

toy_color 테이블에서는 id가 기본 키로 설정이 되어 있고 color의 color_id, my_toy의 toy_id가 참조되어 n:n 관계에 있음을 알 수 있다. 이때 각각 테이블의 기본키가 toy_color에서 외래키로 사용되어 n:n 관계로서 새로운 테이블을 생성해내었다.
이렇게 생성되면 아래와 같은 값을 얻을 수 있게 된다.

또한, 외래키를 사용하는 이유 중 하나는 참조 무결성이다
- 참조 무결성 : 외래키는 참조하는 테이블에 실제로 있는 값만 사용
예를 들어 color blue가 사라진다고 하면 toy_color은 다음과 같이 바뀌게 된다. 
즉, 외래키로 설정을 한다면, 해당 테이블을 참조하는 테이블에서 관련 데이터를 함께 삭제할 수 있게 된다.
🎓Reference
RDB
Schema
key