schema는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다.
schema는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.
schema는 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다.
schema는 데이터 사전(Data Dictionary)에 저장되며, 다른 이름으로 metadata라고도 한다.
schema는 현실 세계의 특정한 한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어진다.
schema는 시간에 따라 불변인 특성을 갖는다.
schema는 데이터의 구조적 특성을 의미하며, 인스턴스에 의해 규정된다.
데이터베이스 관리 시스템은 외부적 schema에 따라 명시된 사용자의 요구를 개념적 schema에 적합한 형태로 변경하고 이를 다시 내부적 schema에 적합한 형태로 변환한다.
외부스키마는 사용자나 응용프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다.
외부스키마는 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마(Sub Schema)라고도 한다.
하나의 데이터베이스 시스템에는 여러개의 외부 스키마가 존재할 수 있으며 하나의 외부 스키마를 여러개의 응용 프로그램이나 사용자가 공용할 수도 있다.
같은 데이터베이스에 대해서도 서로 다른 관점을 정의할 수 있도록 허용한다.
일반 사용자는 질의어(SQL)을 이용하여 DB를 쉽게 사용할 수 있다.
응용 프로그래머는 C, JAVA등의 언어를 사용하여 DB에 접근한다.
개념 schema는 데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 database로 하나만 존재한다.
개념schema는 개체간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.
데이터베이스 파일에 저장되는 데이터의 형태를 나타내는 것으로, 단순히 Schema라고 하면 개념 schema를 의미한다.
기관이나 조직체의 관점에서 데이터베이스를 정의한것이다.
데이터베이스 관리자(DBA)에 의해서 구성된다.
내부 schema는 물리적 저장장치의 입장에서 본 데이터베이스 구조로, 물리적인 저장장치와 밀접한 계층이다.
내부 schema는 실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의하고, 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 나타낸다.
시스템 프로그래머나 시스템 설계자가 보는 관점의 schema이다.
Entity-Relationship Diagram의 약자로, 직역하면 개체-관계 모델이다. 관계형 DB를 구성할 때 테이블간의 관계를 그림으로 표현한 것이라 생각하면 된다.
ERD의 예시를 들자면, 위의 사진과 같다. 위의 사진은 영화관 웹페이지를 구성한다면, 어떤 식으로 데이터 테이블을 구성해야 하는지 실제로 데이터 테이블을 구성한 것이다.
Entity?
데이터베이스의 테이블을 의미
실제로 위의 ERD를 설계할 때 ,데이터를 어떻게 분류해서 Entity를 구성할지에 대해 정말 많은 고민을 했던 것 같다.
백엔드 개발자라면 데이터를 다루는 일이 매우 중요하고, 잘하기 위해선 처음에 설계단계부터 잘 해야한다고 배웠다. 그렇기에 더 신경써서 ERD 설계를 했던 것 같다. 위 사진에 보이는 ERD도 많이 부족해보인다고 생각할 수 있겠지만, 많은 시간이 들었다고 한다...🫠
내가 만든 ERD는 데이터 정규화
과정을 거쳐 설계했다
정규화란?
쉽게 이야기하면데이터를 중복 저장하지 않기 위해 분리하는 과정
이다.
해당 테이블 행과 열간에 중복되는 정보를 최대한 줄여나가면서, 불필요하게 중복되는 정보를 저장하지 않게 만드는 과정이다.
그렇게 데이터를 나눠서 테이블에 저장하다 보면, 테이블간의 관계가 만들어지게 되는데, 그 관계를 그림으로 표현한 것이 ERD이다.
추가적으로 그 관계를 연결해주는 key 데이터들이 있는데, Primary Key(기본키)
, Composite Key(복합키)
, Foreign Key(외래키/참조키)
가 있다.
🌟Primary Key(기본키) 와 Composite Key(복합키)
Primary Key : 한 줄의 데이터를 구분할 수 있는 유일한 키
Composite Key: 데이터를 대표하는 키가 여러 개의 컬럼으로 구성된 것
Foreign key: 다른 테이블에서 값을 참조할 때 참조해오는 테이블의 PK(기본키)를 의미
복합키가 조금 이해가 어려웠는데, PK가 여러개 존재하게 되면 복합키로서 역할을 한다고 생각하면 조금 이해에 도움이 될 것 같아 끄적..여 본다..
데이터간 관계는 1:1
,1:N
,N:M
총 3가지로 분류할 수 있다.
1:1
: 양쪽 테이블간 데이터가 서로 하나씩만 연결이 되는 경우이다.
: 1:1 관계는 굳이 새로 테이블을 만들어서 분리할 필요는 없지만, 계산이나 따로 활용해야 하는 테이블인 경우에는 분리하는 것도 나쁘진 않다.
1:N
: 테이블의 데이터가 다른 테이블 데이터 여러개와 연결이 되어 있는 경우이다.
: 내가 만든 ERD에서 예를 들자면, 하나의 영화에 여러 스틸컷 이미지가 존재하는 경우처럼 하나의 영화가 여러 이미지에 연결될 수 있기 때문에 1:N 관계다.
N:M
: 테이블간 데이터가 서로 서로 여러개씩 연결되어 있는 경우이다.
: 위의 ERD에서 출연배우와 영화 관계를 보면 된다. 출연배우가 여러 영화에 출연할 수도 있고, 하나의 영화가 여러 배우에게 연결될 수 있기 때문에 N:M 관계다.
: 이 경우엔 중간 테이블을 하나 만들어서 1:N , 1:M으로 연결해서 데이터 테이블을 구성하면 된다.
: ERD에서 따로 중간 테이블은 안만들어도 자동으로 만들어 주긴 하는데, 중간 테이블에 추가적으로 데이터를 넣고 싶다 하는 경우에는 직접 중간 테이블을 만들면 된다.
참고자료
: 코드캠프 수업자료
: https://velog.io/@aaron19965/DB-Schema%EC%99%80-ERD