DB(Database
는 컴퓨터 시스템 안에 구조화하여 저장된 정보 및 데이터의 집합이다. 스프레드 시트, 엑셀 등과 비슷한 모양이다. DBMS(Data Base Management System)
로 불리기도 한다.
DBMS를 포함하는 프로그램과 데이터를 저장하는 공간 모두 데이터베이스라고 불리는데, 이유는 일반 사용자 관점에선 물리적인 공간과 전기적읜 공간의 차이점을 나눌 필요가 없기 때문이라고 한다.
결국, 데이터베이스는 물리적인 데이터와 전기적인 데이터 등 데이터베이스를 관리하는 시스템 자체를 통칭한다.
데이터베이스는 크게 관계형 데이터베이스 Relational DBMS
와 비관계형 데이터베이스 Non-relational DBMS
로 나뉜다.
관계형 데이터베이스는 데이터 사이의 관계에 기초를 둔 데이터 베이스 시스템이다. 각각의 Table
들이 서로 상호관련성을 갖고 연결되어 있다.
관계형 데이터베이스에서 모든 데이터는 2차원 Table
로 표현 가능하다. 데이터베이스가 데이터를 저장하는 저장소라면, 테이블은 데이터베이스 안에 실제 데이터가 저장되는 형태이다.
테이블은 엑셀이나 스프레드시트에서 볼 수 있는, 열 Column
과 행 Row
으로 구성된다.
열은 해당 테이블의 속성을 의미하고, 열을 구성하는 값들은 같은 도메인 Domain
으로 집합되어 있다. RDBMS에서 속성 Attribute
라는 이름으로 불린다.
행은 각각의 id 값, 즉 객체가 갖는 정보를 포함한다. RDBMS에서 튜플 Tuple
레코드 Record
라는 이름으로 불린다.
테이블에 저장된 행의 데이터는 저마다 고유하게 식별되기 위해 고유키를 Primary Key
를 갖고 있다.
테이블의 첫 열은 언제나 id
이다. 엑셀이나 스프레드시트에서도 제일 첫 열은 index
가 매겨지고 이것은 변하지 않는 번호이다. RDBMS에서는 이것을 Primary Key라고 부르며 이를 통해 특정 로우를 찾거나 참조할 수 있다.
도메인은 테이블 열의 값을 구성할 때, 값의 범위, 데이터타입 등의 제약사항이 지켜지는 값들의 집합이다.
Table에서 1. 모든 값이 유일한 값을 갖고, 2. 중복되는 행이 존재하지 않으면, 이것을 릴레이션 relation
이라고 부른다. 따라서, 모든 릴레이션은 테이블이지만, 모든 테이블이 릴레이션이 되는 것은 아니다. 이것은 RDMBS만의 특성이다.
테이블은 일반적으로 한 테이블에서 연결하고자 하는 다른 테이블의 이름이 같은 열인 Primary Key의 데이터를 일치시켜 관계를 갖는다. 이렇게 다른 테이블의 Primary Key를 참조한 열의 값들을 외래 키 Foreign Key
라고 한다.
데이터베이스에서 한 테이블의 id값으로 id값의 열에 존재하는 값만 생성시킬 수 있다.
가장 일반적인 관계. 테이블 A의 행이 테이블 B의 여러 행과 연결되는 관계이며, 테이블 B의 행에는 테이블 A에 일치하는 행이 하나일 수 있다.
즉, 테이블 B의 테이블 A 열은 테이블 A의 id값(Primary Key)을 참조한다. 다쪽에 Foriegn Key가 사용된다.
예를 들어 "게시자" 및 "타이틀" 테이블은 일대다 관계를 갖는다. 즉, 각 게시자는 많은 타이틀을 생성하지만 각 타이틀은 하나의 게시자에서만 제공된다.
가장 일반적인 이유는, 1. 중복된 데이터를 저장하지 않음으로써 디스크를 더 효율적으로 사용할 수 있고, 2. 서로 데이터는 같지만 부분적으로 내용이 다른 데이터가 생기는 문제를 막아주기 때문이다.
이것을 정규화 normalization
라고 한다.
각각의 테이블에서 하나의 데이터가 서로 연결된다. 즉, 테이블 A와 테이블 B 각각의 하나의 행에서 다른 행 하나와 연결된다.
관련된 두 열이 모두 Primary Key이거나 고유한 제약 조건이 있는 경우 형성된다.
일대일 관계를 사용해 다음 작업을 수행할 수 있다.
두 테이블의 여러 행이 연결되는 관계이고, 백엔드 개발자로서 가장 많이 접할 내용의 관계이다.
이럴 때는 중간 테이블이라고 하는 세 번째 테이블을 정의해 해당 관계를 연결 시킨다.
여기서 생성된 중간 테이블의 Primary Key는 두 테이블의 Foreign Key를 사용하는데, 중복된 데이터를 줄이기 위해서이다.
https://docs.microsoft.com/ko-kr/office/troubleshoot/access/define-table-relationships