Database

seul_velog·2022년 5월 1일
0

1. 데이터베이스(Database)의 개념

(Data + Base) 필요한 데이터를 모아놓은 베이스

  • 데이터베이스는 컴퓨터 시스템에 저장된 정보나 데이터를 모두 모아 놓은 집합이다.
  • 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS) 으로 제어하고 관리한다.
  • DBMS(Data Base Management System)는 데이터를 저장하고 관리하는 시스템이다.
  • 데이터와 DBMS는 관련 응용 프로그램과 함께 '데이터베이스 시스템'이라고 하며, 줄여서 '데이터베이스, DB'라고도 한다.
  • 즉 데이터베이스는 데이터들이 가득 모여있는 기계를 부르는 말이기도 하면서, 데이터베이스를 관리하는 시스템 자체를 통틀어 부르는 말이기도 하다.

❓ 그렇다면 데이터베이스를 사용하는 이유는 무엇일까?🤔

  • 데이터를 오랜기간 저장 및 보존하기 위해서 데이터 베이스를 사용한다.
    : 메모리에 존재하는 데이터는 오랜 보존이 되지 않으므로(휘발성), 필요한 자료를 계속해서 보존할 필요가 있다.

  • 데이터를 체계적으로 보존하고 관리하기 위해 사용한다.
    : 필요할 때 언제든 원하는 자료를 쉽게 얻을 수 있어야 한다.





2. 관계형 데이터베이스 (RDBMS)

Relational DataBase Management System : 데이터 사이의 관계에 기초를 둔 데이터 베이스 시스템

  • Database에는 크게 관계형 데이터베이스비-관계형데이터 베이스가 있다.

  • 관계형 데이터베이스는 각각의 테이블들이 서로 상호관련성 을 갖고있다.
    : 각각의 테이블들이 완전히 독립적인 대상이 아니라, 테이블 A와 테이블 B가 서로 연관되어 있다는 의미이다.

  • 관계형 데이터베이스에서 모든 데이터는 행(row)과 열(column)으로 구성되어 있는 2차원 테이블(table)로 표현할 수 있다.


📌 관계형 데이터베이스 중요 키워드

  • 데이터(data) : 각 항목에 저장되는 값
  • 테이블(table; 또는 relation) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적된다.
  • 칼럼(column; 또는 field) : 테이블의 한 열을 가리킨다.
  • 레코드(record; 또는 tuple) : 테이블의 한 행에 저장된 데이터이다.
  • 키(key)
    • 테이블의 각 레코드를 구분할 수 있는 값이다.
    • 각 레코드마다 고유한 값을 가진다.
    • 기본키(primary key)와 외래키(foreign key) 등이 있다.



2-1. 테이블(Table) Column, Row

  • 테이블의 가장 첫 column은 언제나 id 이다.
  • 각 row 는 언제나 고유한 번호(고유 키: Primary Key)를 갖고 있다.
  • Primary Key를 통해서 특정 로우를 찾거나, 인용(reference)할 수 있다.
  • ❗️ 테이블의 행 하나에는 딱 하나의 데이터만 들어가야 한다.



2-2. 테이블(Table)의 관계

  • 테이블과 테이블 사이의 관계에는 3가지 종류가 있다.
    1:1 관계
    1:N 관계
    N:M 관계
  • 만약 관계형 데이터베이스 내부에 테이블A와 테이블B가 있다면, 이 두 테이블은 무조건 아래의 세가지 가운데 한가지 관계에 해당한다고 볼 수 있다.🤔

One to One: 일대일

  • 테이블 A의 로우와 테이블 B의 로우가 정확히 1:1 매칭이 되는 관계이다.
  • 하나의 A 데이터는 하나의 B 데이터와 연결되고, 마찬가지로 하나의 B 데이터는 하나의 A 데이터와 연결된다.
  • 1:1 은 두 테이블 서로가 서로의 오로지 한 로우에만 연결된다.
  • ex.) 주민등록번호

One to Many: 일대다

  • 한 테이블의 로우가 다른 테이블의 여러 로우와 연결이 되는 관계이다. 1:N 이라고도 표현한다.
  • 하나의 로우에 해당하는 테이블이 One이고, 여러 로우에 해당하는 테이블이 Many이다.
  • 1:N 은 한 테이블의 로우 하나에 다른 테이블의 로우 여러개가 연결될 수 있다.
  • ex.) 주인과 반려동물(들)과의 관계, 전화번호(한 명이 여러 개의 전화번호를 가질 경우)

Many to Many: 다대다

  • 한 테이블의 여러 로우가 다른 테이블의 여러 로우와 연결이 되는 관계이다.
  • 두 테이블이 서로 각자 다른 테이블의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 하나 생성된다.
    → 다대다 관계를 위한 테이블을 조인 테이블이라고 한다.
  • 이러한 Many To Many 관계는 N:N 이라고 표현한다.
  • ex.) 작가(들)과 여러권의 책들의 관계, 여러 개의 여행상품과 여러 명의 고객과의 관계



2-3. 관계형 데이터베이스와 비관계형 데이터베이스의 차이

관계형 DB

  • Mysql, Oracle, Mssql 같은 고전적인 데이터베이스를 관계형 데이터베이스라고 한다.
  • A데이터에 B데이터의 위치를 저장하는 방식으로, 행과 열로 구성된 테이블과의 관계를 나타낼 때 사용한다.
  • 장점
    • 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠르고 신뢰성이 높다.
    • 명확하게 정의 된 스키마, 데이터 무결성이 보장된다.
    • 관계를 통해 각 데이터를 중복없이 한 번만 저장할 수 있다.
  • 단점
    • 기존 작성된 스키마를 수정하거나, 데이터베이스의 부하를 분석하기 어렵다.
    • 빅데이터를 처리하는데 비효율적이다.
    • 조인문이 많은 매우 복잡한 쿼리가 만들어 질 수 있다.

비 관계형 DB

  • NoSQL이라고도 부른다.
  • 기존의 관계형 데이터베이스의 한계를 보완하기 위해 만들어진 새로운 형태의 데이터베이스이다.
  • 분산환경에서의 데이터 처리를 더욱 빠르게 하기 위해 개발되었다.
  • 대표적으로 MongoDB, CouchDB 등이 있다.
  • 거대한 Map으로써 key-value 형식을 지원하며 관계형DB와 달리 PK, FK, JOIN등 관계를 정의하지 않고, 스키마에 대한 정의가 없다.
  • 장점
    • 대용량 데이터 처리를 하는데 효율적이며 관계형DB에 비해 쓰기와 읽기 성능이 빠르다.
    • 뛰어난 확장성으로 검색에 유리하다. (수직 및 수평 확장이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리 할 수 있다.)
    • 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리효율 등에서 성능이 좋다.
    • 복잡한 데이터 구조를 표현할 수 있다.
    • 스키마가 없기때문에 유연성이 높다. 복잡한 조인문으로 작업 할 필요가 없다.
  • 단점
    • 유연성 때문에 데이터 구조 결정이 늦어질 수 있다.
    • 복사된 데이터가 변경되면 여러 콜렉션과 문서를 수정해야 한다.

✍️ 관계형 데이터베이스비 관계형 데이터베이스 간의 주요 차이점
: 관계형 데이터베이스는 데이터를 테이블에 저장하는 반면, 비 관계형 데이터베이스는 관계형 데이터베이스와 같은 테이블을 사용하지 않고 문서에서 또는 다른 방법으로 키 - 값 형식으로 데이터를 저장한다는 것이라고 한다. 🧐





3. Primary Key 와 Foreign Key 의 관계

Primary Key

  • Data-Table에 있는 유일하게 구분되는 Data-Key를 기본 키(Primary Key)라고 부른다.
  • Primary Key는 유일한 값이기 때문에 중복된 값을 가질 수 없다.
  • Primary Key는 공백을 가질 수 없다.

Foreign Key

  • 한 Table과 참조되는 다른 Table 간의 연결되는 Primary Key Column을 Foreign Key라고 한다.
  • Foreign Key는 다른 Primary Key를 참조하는 속성 또는 속성들의 집합을 의미한다.
  • Foreign Key는 참조관계의 기본 키와 같은 속성을 가진다.

테이블과 테이블의 연결

  • Foreign key(외부키)라는 개념을 사용하여 주로 연결한다.
  • Identification numbers 테이블의 user_id 컬럼은 users 테이블에 걸려있는 외부 키라고 지정한다.
  • 즉 user_id 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성된다.
  • 만약 users 테이블에 없는 id 값이 user_id에 지정되면 에러가 발생한다.

❓테이블을 연결하는 이유는 무엇일까? 🤔

  • 하나의 테이블에 모든 정보가 담기면 동일한 정보들이 중복 저장되므로, 더 많은 디스크를 사용하고 잘못된 데이터가 저장될 가능성이 높아진다.
  • 따라서 여러 테이블에 나누어서 저장한 후, 필요한 테이블 끼리 연결함으로써 아래와 같은 효과를 얻을 수 있다. → normalization (정규화)
    • 디스크를 낭비하지 않음으로써 더 효율적으로 쓸 수 있다.
    • 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어진다.



reference)
database
RDBMS
Primary Key & Foreign Key
관계형DB, 비관계형DB
devuna
wecode

profile
기억보단 기록을 ✨

0개의 댓글