스키마(Schema)란?
스키마란 데이터베이스에서 데이터가 쉉되는 방식과 서로 다른 엔티티 간 관계에 대한 설명이다. 데이터베이스의 청사진이라고 할 수 있다. 데이터베이스를 구성하는 데이터 객체, 객체의 성질, 관계, 제약조건에 대한 정의를 총칭하는 것이다. 데이터베이스 관리 시스템의 특성과 구현 환경을 고려한 데이터 구조다.
스키마는 외부 스키마, 개념 스키마, 내부 스키마의 3단계 논리적인 구조를 가진다.
① 외부 스키마
프로그래머나 사용자의 입장에서 본 데이터베이스의 모습을 나타낸 것이다. 특정 개인이나 특정 응용 프로그램에 한정된 논리적 데이터 구조다. 일반적으로 View를 통해 데이터베이스 내용 중 사용자가 필요한 정보만 볼 수 있게 구현한다.
② 개념 스키마
모든 응용 프로그램과 사용자들이 필요로 하는 데이터베이스 전체를 정의한 것. 데이터에 대한 접근권한, 보안 정책, 무결성 규칙들이 개념 스키마에 포함된다. 데이터를 통합한 조직 전체 데이터베이스 구조를 논리적으로 정의한 것이다.
③ 내부 스키마
물리적인 저장장치 입장에서 본 데이터베이스 모습을 나타낸 것이다. 실제로 데이터베이스에 저장될 레코드 형식을 정의하고 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등 데이터 처리에 대한 제약사항을 정의한다.
관계형 데이터베이스 설계
구조화된 데이터는 하나의 테이블로 표현이 가능하다. 정의된 테이블 자체를 Relation이라고 부른다. 관계형 데이터베이스는 테이블을 사용하는 데이터베이스다.
- 데이터(Data) : 각 항목에 저장되는 값
- 테이블(Table || Relation) : 사전에 정의된 데이터 타입대로 데이터가 축적된 집합
- 칼럼(Column || Field || Row || 속성) : 테이블의 한 열
- 레코드(Record || tuple || ) : 테이블의 한 행에 저장된 데이터
- 키(Key) : 테이블 레코드를 구분하는 값. 각 레코드 별로 고유한 값을 가진다. 기본키와 외래키로 구분됨
관계형 데이터베이스를 설계할 때 관계의 종류를 정의해야 한다. 관계형 데이터베이스의 관계 종류는 크게 3가지로 구분된다.
- 1:1 관계
- 1:N 관계(가장 많이 사용됨
- N:N 관계
- Self Referencing 관계
① 1:1 관계
하나의 레코드가 다른 테이블의 한개의 레코드와 연결된 경우다. User 테이블과 PhoneBook 테이블이 있다고 가정했을 때 User 테이블의 phone_id은 PhoneBook의 phone_id와 연결된 외래키(Foreign Key)다.
각 유저별로 유일한 phone_id을 가지고 있고 phone_id별로 유일한 유저를 가지고 있다면 1대1 관계(One to One Relationship)가 된다.
실제 개발환경에서 1대1일 관계를 작성하는 경우는 흔치 않다. 두개의 테이블의 관계를 명시하는 것보다 User 테이블에 phone_id를 대신해서 phone_number을 넣어서 사용하는게 훨씬 간편하기 때문이다. 1대1 관계는 (--|--)로 표시된다.
② 1:N 관계
하나의 레코드가 서로 다른 다수의 레코드와 연결된 경우다. 특정 User가 여러개의 전화번호를 가질 수 있지만 전화번호는 다수의 유저를 가질 수 없는 경우다. 1:N 관계는 관계형 데이터베이스에서 가장 많이 사용된다.
③ N : N 관계
여러개의 레코드가 다른 테이블의 여러 레코드와 관계를 맺고 있는 경우다. N:N 관계 스키마를 설계할 때는 테이블 사이에 JOIN 테이블을 만들어 관리하게 된다. 1:N을 두번 실행한것과 같은 결과를 가진다.
예를 들어 customer 테이블과 package 테이블이 있다. 한명의 customer는 여러개의 package를 구매할 수 있고, 반대로 한개의 package는 여러명의 customer가 구매할 수 있다. 즉 N:N관계다.
customer Table과 package Table 사이에 JOIN Table을 생성한다. 각각 1:N 관계를 가지고 있지만 결과적으로 customer와 packagae는 N:N 관계를 가질 수 있게 된다. JOIN Table 또한 고유한 키(Key)는 가지고 있어야 한다.
Instagram 스키마 디자인
① POSTS 작성기능
한명의 유저는 여러개의 POSTS를 업로드할 수 있다. POSTS에는 간단한 comments가 작성된다.
USER와 POSTS는 1:N 관계가 된다.
② 좋아요와 댓글
POSTS에는 좋아요와 댓글을 작성할 수 있다. 이 부분은 POSTS 게시자 뿐만 아니라 다른 유저들도 사용가능하다.
USER와 LIKE는 1:N관계다 / POSTS와 LIKE는 1:N관계다.
USER와 댓글은 1:N관계다 / POSTS와 댓글은 1:N관계다.
③ 해시태그 기능
POSTS에 해시태그를 여러개 달 수 있으며, 해시태그를 클릭하면 해당 해시태그를 달았던 다른 POSTS들을 볼 수 있다.
해시태그와 POSTS는 N:N 관계가 된다. 따라서 JOIN Table이 필요하다.
④ Follow 기능
한명의 유저는 여러명을 Follow 할수 있고, 여러명에 의해 Followed 될 수 있다.
User와 Following은 1:N 관계다
User와 Followed는 1:N 관계다
관계형 데이터베이스 설계 툴
'Programming' 카테고리의 다른 글
[Database] MySql User 비밀번호 확인 변경 하는 방법 (0) | 2022.05.30 |
---|---|
[Database] MySQL 새로운 유저 추가하는 방법 (0) | 2022.05.30 |
[Database] Ubuntu 20.04 LTS MySQL 설치하기 (0) | 2022.05.30 |
[Database] SQL(구조화 쿼리) vs NoSQL(비구조화 쿼리) 차이점 (0) | 2022.05.30 |
[Database] 트랜잭션이란? (ACID 데이터베이스 속성) (0) | 2022.05.30 |
댓글