카테고리 없음

데이터 베이스 , 관계

heejunn 2022. 4. 5. 09:40

- 데이터 베이스 란 ?

데이터베이스(DB)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.

 

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

데이터를 오랜기간 저장 및 보존하기위해서

데이터를 체계적으로 보존하고 관리하기 위해서

 

하드디스크(주기억 장치를 보조하는 보조기억장치), Ram(임시 기억장치)

 

 

- 데이터베이스 관리 시스템 (DBMS)

데이터베이스를 조작하는 별도의 소프트웨어로, 데이터베이스시스템 을 통해 데이터베이스를 관리하여 응용 프로그램들이 데이터베이스를 공유하고, 사용할 수 있는 환경을 제공한며 조금더 체계적으로 데이터베이스를 관리 할 수있다. DBMS는 데이터베이스를 구축하는 틀을 제공하고, 효율적으로 데이터를 검색하고 저장하는 기능을 제공한다.

 

EX) 오라클(Oracle), MySQL, MSSQL, MariaDB 등이 있다.

 

- 데이터베이스 관리 시스템 (DBMS) 의 기능

  - 정의 : 데이터에 대한 형식, 구조, 제약조건들을 명세하는 기능이다. 데이터베이스에 대한 정의 및 설명은 카탈로그나 사전의 형태로
                   저장된다.
  - 구축 : DBMS가 관리하는 기억 장치에 데이터를 저장하는 기능이다.
  - 조작 : 특정한 데이터를 검색하기 위한 질의, 데이터베이스의 갱신, 보고서 생성 기능 등을 포함한다.
  - 공유 : 여러 사용자와 프로그램이 데이터베이스에 동시에 접근하도록 하는 기능이다.
  - 보호 : 하드웨어나 소프트웨어의 오동작 또는 권한이 없는 악의적인 접근으로부터 시스템을 보호한다.
  - 유지보수 : 시간이 지남에 따라 변화하는 요구사항을 반영할 수 있도록 하는 기능이다.

- 관계형 데이터베이스

관계형 데이터베이스는 현재 가장 많이 사용되고 있는 데이터베이스의 한 종류입니다.

관계형 데이터베이스란 테이블(table)로 이루어져 있으며, 이 테이블은 키(key)와 값(value)의 관계를 나타냅니다.

이처럼 데이터의 종속성을 관계(relationship)로 표현하는 것이 관계형 데이터베이스의 특징입니다.

테이블

Column(열) : 각각의 열은 유일한 이름을 가지고 있으며, 자신만의 타입을 가지고 있습니다. 이러한 열은 필드(field) 또는 속성(attribute)이라고도 불립니다.

ex) 책 제목 , 작가 , 출판사 , 가격

Row(행) : 행은 관계된 데이터의 묶음을 의미합니다. 한 테이블의 모든 행은 같은 수의 열을 가지고 있습니다. 이러한 행은 튜플(tuple) 또는 레코드(record)라고도 불립니다.

ex) 각 항목들의 실제 값. 갈매기의 꿈 , 리처드바크, 나무옆의자, 11,520

 

각 로우는 저만의 고유 키 (Primary Key)가 있고. 각 로우는 다른 로우와 겹치지 않는 , 하나의 데이터만 정확하게 지칭할 수있는 고유한 번호를 갖고 있다. 고유 키 (Primary Key) 를 통해 특정 로우를 찾거나 , 인용 할 수 있다.

 

테이블의 가장 첫 컬럼은 언제나 id 입니다. 엑셀이나 스프레드 시트를 떠올려보면, 제일 첫 컬럼은 언제나 변하지 않는 번호(index)가 매겨져 있는 것이 떠올려지나요? 각 로우는 언제나 고유한 번호를 갖고 있습니다. 이를 고유 키(Primary Key)라고 합니다.

 

따라서 우리 My books 테이블 가운데 개미 라는 책은 id가 4인 데이터 라고 표현할 수 있습니다. 개미의 primary key가 4번인 것이죠. 이 Primary Key를 통해서 특정 로우를 찾거나, 인용할 수 있습니다. 인용에 대해서는 뒤에서 더 자세히 설명드리겠습니다. 데이터 베이스는 수백, 수천개의 테이블로 구성되어 있습니다. 아래와 같은 테이블이 매우 매우 매우 많이 쌓여있죠.

데이터 베이스를 구성하는 테이블은 수백,수천 개가 될 수있다.

 

 

 

- 일대일 관계 , 일대다 관계 , 다대다 관계

관계형 데이터 베이스 라는 의미는 데이터베이스를 구성사고 있는 테이블들이 서로 상호관련성을 가지고 연결되어 있다는 의미이다.

각각의 테이블들이 완전한 독립적이지않고 , 테이블A와 B가 서로 연관된 사이라는 뜻이다.

 

일대일 관계 - one to one

(면접관1명 , 지원자1명)

- 하나의 a테이블 데이터는 오로지 하나의b테이블 데이터와 연결 된다.

- 하나의 b테이블 데이터 또한 하나의 a테이블 데이터와 연결된다.

ex) 전화번호 , 주민번호 , 계좌번호

일대일 관계 테이블

고유 키 (Primary Key)각 로우는 다른 로우와 겹치지 않는 , 하나의 데이터만 정확하게 지칭할 수있는 고유한 번호를 갖고 있다.

외래 키(foreign key)는 두 테이블의 데이터 간 연결을 설정하고 강제 적용하여 외래 키 테이블에 저장될 수 있는 데이터를 제어하는 데 사용되는 열입니다. 

 

 

일대다 관계 - one to many

(면접관 다수 , 지원자1명)

 

- 하나의 A테이블 데이터는 b테이블의 여러 데이터와 연결된다.

- 하나의 b테이블 데이터는 오로지 하나의 a테이블 데이터와 연결된다.

- FK 는 "일대다" 중 "다" 쪽에서 가지고있어야 한다.

   ex) 주인과 반려동물 , 회사의 직원 , 수강강사와 수강생

         ㄴ Why? 한명의 주인이 여러 마리의 반려동물을 기른다. 한명의 수강강사는 여러명의 수강생들을 가르친다.

일대다 관계 테이블

 

다대다 관계 - Many to many

(면접관 다수 , 지원자 다수)

 

- 하나의 A테이블 데이터 또는 B테이블의 여러 데이터와 연결될 수 있다.

- 하나의 B테이블 데이터 또한 여러 A테이블 데이터와 연결될 수 있다.

다대다 관계 테이블
위 테이블을 다른 테이블로 찢어놓은 형태

이렇게 두 테이블이 서로 각자 다른 테이블의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블 이 하나 생성됩니다. Many To Many 관계는 N:N 이라고 표현하기도 하며, 도식화하면 아래와 같습니다.

위 테이블 과 같은 형태 (중간 테이블)

중간테이블 : 서로 각자 다른 테이블의 여러 데이터와 연결 될 때에는 두 테이블에 속한 데이터의 조합을 입력하기 위한 중간 테이블이 생성된다. 양쪽에 FK를 갖고 있는다.(필수정보)

 

- 어떻게 테이블과 테이블을 연결하는가?

  • Foreign key(외부키)라는 개념을 사용하여 주로 연결합니다
  • 앞서 본 one to one 예시 에서 테이블의 user_id 컬럼은 users 테이블에 걸려있는 외부 키라고 지정합니다.
  • 즉 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있습니다.
  • 만일 users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 발생합니다.

- 왜 테이블들을 연결하는가?

  • 왜 정보를 여러 테이블에 나누어서 저장하는가?
  • 앞서 본 one to many의 예에 경우 그냥 하나의 테이블에 고객 정보와 구입한 제품 정보 모두를 저장 하면 안되는가?
  • 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장됩니다.
  • 더 많은 디스크를 사용하게 되고, 잘못된 데이터가 저장 될 가능성이 높아집니다.
  • 예를 들어, 고객의 아이디는 동일한데 이름이 서로 다른 로우들이 있다면 어떻게 해야 할까요? 어떤 이름이 정확할까요?
  • 여러 테이블에 나누어서 저장한후 필요한 테이블 끼리 연결 시키면 위의 두 문제가 사라집니다.
    • 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고,
    • 또한 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어집니다.
    • 이것을 normalization(정규화) 이라고 합니다.

 

- 정규화 란 ? 

정규화의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다.

중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.

 

ex) 1정규화 , 2정규화 , 3정규화 , BCNF정규화 ... (궁금하신분들은 검색 !)