[DATABASE]데이터베이스 기초

박민하·2022년 5월 31일
0

DATABASE

목록 보기
1/13
post-thumbnail

✅ 데이터베이스(Database)란?

  데이터베이스는 일반적으로 컴퓨터 시스템에 전자적으로 저장되는 구조화된 정보 또는 데이터의 조직화된 모음입니다. 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다. 연결된 애플리케이션과 함께 데이터와 DBMS를 하나로 묶어 데이터베이스 시스템이라고 하며 단축하여 데이터베이스라고도 합니다.

  위는 데이터베이스를 다루는 회사 가운데 가장 유명한 Oracle 이 설명하는 데이터베이스의 개념이다. 쉽게 말하면 데이터베이스란 컴퓨터 시스템에 저장된 정보나 데이터를 모두 모아 놓은 집합, 즉 데이터를 많이 모아놓은 집합이다. 아주 많은 데이터들을 저장하고 있어야 하기 때문에 실제 데이터센터는 아주 넓은 공간에 따로 건물을 지어서 관리한다.

✅ 데이터베이스를 사용하는 이유?

  • 데이터를 오랜기간 저장 및 보존하기 위해
  • 데이터를 체계적으로 보존하고 관리하기 위해

✅ 관계형 데이터베이스(RDBMS, Relational DataBase Management System)

  관계형 데이터베이스란 데이터 사이의 관계에 기초를 둔 데이터베이스 시스템을 말한다. 여기서 "관계"란 무엇일까? 우선 관계형 데이터베이스의 기본 구조를 알아보자.

  관계형 데이터베이스에서 모든 데이터는 행(row)과 열(column)로 구성되는 2차원 테이블(table)로 표현할 수 있다. 컬럼은 테이블의 각 항목을 의미하고, 로우는 각 항목의 값을 의미한다.

  첫 컬럼은 언제나 id로 시작을 하는데, 이는 컬럼의 고유 키(Primary Key)를 의미한다. 이 Primary Key를 통해서 특정 로우를 찾거나, 인용(reference)할 수 있다. 데이터베이스는 이런 테이블들이 매우 많이 쌓여있고, 이 테이블들은 서로 상호관련성을 가지고 연결되어 있다. 각각의 테이블들이 완전히 독립적인 대상이 아니라, 테이블 A와 테이블 B가 서로 연관되어 있고, 서로 관련이 있다는 뜻이다.

✅ 테이블 사이 관계의 종류

1. 일대일(One to One)

  테이블 A의 로우테이블 B의 로우가 정확히 일대일 매칭이 되는 관계를 one to one 관계라고 한다. 반대로 테이블 B의 로우 하나도 테이블 A의 로우 하나와 연결된다. 이것은 테이블 A의 값은 테이블 B의 값을 1개만 가질 수 있고, 테이블 B의 값도 테이블 A의 값을 1개만 가질 수 있다는 의미다. 예를 들어 한 사람은 단 하나의 주민번호만 가질 수 있다. 사람과 주민번호의 관계는 일대일 관계라고 볼 수 있다.

1:1 은 두 테이블이 서로가 서로의 오로지 한 로우에만 연결되어야만 한다.

2. 일대다(One to Many)

  테이블 A의 로우테이블 B의 여러 로우와 연결이 되는 관계를 one to many 관계라고 한다. 예를 들어 게시판 작성자 A는 여러 게시물을 작성할 수 있지만, 하나의 게시물 B는 단 하나의 작성자만을 갖고 있다. 일대다 관계에서는 다 테이블의 컬럼이 일 테이블의 id(pk)를 참조한다.

1:N 은 한 테이블의 로우 하나에 다른 테이블의 로우 여러개가 연결될 수 있다.

3. 다대다(Many to Many)

  테이블 A의 여러 로우테이블 B의 여러 로우와 연결이 되는 관계를 many to many 관계라고 한다. 예를 들어 작가 A는 여러 책을 집필할 수 있고, 책 B는 여러 공동저자를 가질 수 있다.

N:N 은 두 테이블이 각자의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 하나 생성된다.

✅ 테이블과 테이블의 연결

  Foreign key(외부키)라는 개념을 사용하여 주로 연결한다. 데이터베이스에서 Foreign Key 를 사용하면 중복된 데이터를 획기적으로 줄일 수 있다.

  하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복 저장된다. 이런 경우에는 더 많은 디스크를 사용하게 되고, 잘못된 데이터가 저장 될 가능성이 높아진다. 예를 들어, 고객의 아이디는 동일한데 이름이 서로 다른 로우들이 있다면 어떻게 해야 할까?

  여러 테이블에 나누어서 저장한후 필요한 테이블 끼리 연결 시키면 위의 두 문제가 해결된다. 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고, 또한 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어진다.

  이것을 normalization(정규화)라고 한다.

profile
backend developer 🐌

0개의 댓글