🔎 가장 대표적인 데이터베이스 시스템, 관계형 데이터베이스 RDBMS
2차원 수평적 구조를 지니고 있다. - 데이터들을 2차원 구조를 가진 테이블 형태로 저장한다.
즉, 행과 열로 이루어져 있다!
데이터의 무결성, 트랜잭션 처리 등 데이터베이스 관리 시스템으로써의 기본적인 기능면에서 뛰어난 성능을 가지고 있다.
질의어를 사용해 데이터 접근을 한다.
→ 질의어 : 일정한 패턴이 있으며 이 패턴에 맞게 질의하고자 하는 조건들을 나열하면 찾고자 하는 정보를 검색해 준다.
데이터베이스의 구조를 잠깐 짚고 가자.
필드(Field) - 레코드 (Record) - 테이블 (Table)
필드 : 테이블의 열에 해당되는 것 (컬럼, 열)
레코드 : 필드들의 집합체, 테이블의 각 행(row)
인덱스 : 데이터베이스에서 데이터를 신속하게 찾을 수 있도록 정렬된 목록, 키
테이블 : 여러 개의 레코드를 담고 있는 논리적인 구조
그럼 관계형 데이터베이스에 대해 살펴보자.
관계란 업무적인 연관성을 뜻하는데
즉, 관계는 두 테이블 사이에 존재하며, 관계를 맺고 있는 두 테이블 중 반드시 하나는 부모 테이블이고 하나는 자식 테이블 이다.
💡 부모 테이블의 기본키(Primary key)는 자식 테이블에 외래키(Foreign Key)로 전이 되어진다.
외래키(Foreign key)
테이블들 간에 관계를 맺고 있을 때 자신의 개체(테이블)내에서 키의 역할을 하지는 않지만,
다른 개체(테이블)의 기본키와 동일한 값을 가 지고 있어서 다른 개체(테이블)을 참조할 때 사용하는 필드
그냥 PK ? FK ? 그게 뭐야~ 이해 안돼. 하면서 넘어가다간 큰 코를 다친다...
내가 학원 다닐때 개인프로젝트때 당했기 때문...
연관성은 정규화 하는데에 정말 많이 중요하다.
정규화가 뭔데? 왜 하는데?
쉽게 말해 하나의 테이블을 두개의 테이블로 분리시키는것 이다.
✔ 데이터의 중복을 없애자 !
데이터의 중복 저장으로 인해 발생할 수 있는 비 효율성과 데이터의 일관성이 깨지는 현상을 해결하여 데이터의 효율성과 데이터 무결성을 유지하기 위해서 정규화를 한다.
정규화에도 종류가 많다. 제1정규화, 제2정규화, 제3정규화, 역정규화 ....
그 중 제1정규화에 대해서 간단하게 알아보자.
제 1 정규화
: 반복되는 그룹 속성을 분리하여, 새로운 테이블 을 추가한 뒤 기존의 테이블과 1 : N의 관계를 형성한다.
부수적인 데이터를 저장하기 위해 기본데이터가 중복되는 경우
회원번호(PK) | 이름 | 주소 | 핸드폰번호 | 주민번호 | 자격증 | 취득일 |
1 | 홍길동 | 서울시연희동 | 010-111-1111 | 960101-2223333 | 운전면허1종 | 20210101 |
1 | 홍길동 | 서울시연희동 | 010-111-1111 | 960101-2223333 | SQLP | 20200912 |
1 | 홍길동 | 서울시연희동 | 010-111-1111 | 960101-2223333 | 정보처리기사 | 20210304 |
위의 데이터를 볼때, 회원번호, 이름, 주소, 핸드폰번호, 주민번호가 중복으로 들어간다.
즉, 나는 홍길동의 자격증과 취득일을 확인하고 싶은데 이를 위해 홍길동의 회원정보가 중복으로 들어가는것이다.
그렇다면 기본 데이터를 중복을 없애기 위해 테이블을 두개로 나누어보면 어떨까?
회원번호 (PK) | 이름 | 주소 | 핸드폰번호 | 주민번호 |
1 | 홍길동 | 서울시연희동 | 010-111-1111 | 960101-2223333 |
(회원 테이블)
자격증 ID (PK) | 회원번호 (FK) | 자격증 | 취득일 |
1 | 1 | 운전면허1종 | 20210101 |
2 | 1 | SQLP | 20200912 |
3 | 1 | 정보처리기사 | 20210304 |
(자격증 테이블)
💡 쉽게 회원테이블과 자격증 테이블과의 관계를 1:N으로 정의해서 문제 해결!
이렇게 데이터 중복을 최소화 시키기 위해 두개의 테이블로 분리를 해보았는데, 잊지 말아야 할 점이 하나 있다.
✔ 저장은 분산해서. 출력은 합쳐서 !
나중에 READ 포스팅을 진행하면서 한번 더 언급하겠지만, 분리된 테이블을 다시 분리되기 전 테이블처럼 하나로 보고싶다면, 연관성을 이용해 Join 으로 데이터 확인을 할 수 있다.
Join에 관해서는, MySQL 문의 Read 부분에서 좀 더 다뤄보도록 하고, 포스팅을 마치겠다.
개인프로젝트 진행할때 이 정규화를 뼈저리게 느껴서 ( .... 제출 8시간전에 알고 부랴부랴 뜯어 고쳤었다...... )
나중가선 정규화에 미쳐버리게 된 자,,,, 파이널 프로젝트에서 활용했던 데이터테이블을 잠깐 보여주자면
테이블이 초기보다 많이 줄었지만 ,, 이런식으로 어떻게든 정규화를 해보려고 했었다.... ^_ㅠ
물론 쪼끔쪼끔 힘겨운건 역정규화를 이용했었다. ㅎㅎ
'DataBase' 카테고리의 다른 글
SQL 소개 (0) | 2021.03.04 |
---|---|
Database와 DBMS (2) | 2021.03.03 |