순간을 기록으로

[데이터베이스] 테이블 설계의 기초 본문

Computer Science/Database

[데이터베이스] 테이블 설계의 기초

luminous13 2022. 4. 9. 00:44

테이블 설계와 기초

테이블에는 다양한 데이터를 저장할 수 있습니다. 이러한 테이블을 효율적으로 관리하려면 데이블을 설계하는데 기준이 있어야합니다. 테이블을 어떠한 기준에 따라 만드는 것을 '테이블 설계'라고 합니다.

 

아주 간단하게 테이블은 뭘까?

테이블은 간단히말하자면 2차원 표입니다. 엑셀에서 보던 행과 열로된 표와 비슷한 데이터 구조입니다. 하지만 이러한 정의는 테이블이라고 부족합니다. 테이블은 추가적으로 공통적인 요소의 집합이라는 조건이 들어갑니다.즉 관련성 없는 데이터 이것저것이 들어가면 안됩니다.

 

테이블은 집합이다

테이블은 집합이라고 말할 수 있습니다. 이것이 테이블 설계 제 1규칙입니다. 즉 공통적인 속성을 가진 요소가 모인 것이 테이블 입니다. 예를 들어 채소라는 테이블에는 완두공, 토마토, 바나나 등이 들어갈 수 있습니다. 그렇기 때문에 테이블명은 반드시 복수형이나 집합명사로 표현해야합니다.

 

테이블은 함수이다.

테이블은 또한 함수입니다. 함수란 입력이 주어지고 하나의 출력이 나오는 것을 말합니다. 테이블도 기본키를 입력하면 출력으로 고유의 1개의 행이 나와야 합니다. 이말은 생각해보면 기본키와 그 외의 열 사이에는 함수적인 관계가 있다라고도 볼 수 있습니다. 이처럼 기본키와 다른 열 사이에 성립하는 함수적 유일성을 '함수 종속성'이라고 합니다.

 

관계형 DB가 가장 많이 사용되는 이유

데이터베이스는 데이터가 가장 중요합니다. 그래서 테이블 설계를 제대로 하지 않으면 가장 중요한 데이터를 정합하게 얻을 수 없습니다. 관계형 DB가 다양한 데이터베이스 중에서 가장 많이 사용되는 이유는 데이터 베이스의 정합성을 높이기 위한 설계 방법이 가장 발전된 데이터베이스이기 때문입니다. RDB는 테이블 설계 기법은 정합성을 높이는 '정규화(Nomalization)과 지원 도구인 'ER다이어그램' 기술을 기반으로 발전하게 되었습니다.

2.테이블 설계 규칙

테이블은 현실 세계의 개념이나 집합을 명시적으로 나타낸 것입니다. 추상적인 개념을 명시화하기 때문에 개인에 따라 만드는 테이블의 모양도 제각각입니다.하지만 몇 가지 규칙을 알고 있으면 어느정도 좋은 테이블 설계를 할 수 있습니다. 

 

규칙1. 가장 상위 개념집합으로 정리한다.

가장 상위 개념집합으로 테이블을 만듭니다. 그리고 추가적인 특성은 열로 작성합니다. 이렇게 작성하면 WHERE 절로 쉽게 데이터를 관리할 수 있습니다.

 

이란 무엇일까요? 열은 개체의 속성입니다. 영어로는 Attribute. 비슷한 단어로 성질, 특징이라고도 합니다. 

 

규칙2. 반드시 기본키(PK, Primary Key)를 설정한다.

데이터베이스에서 특정한 데이터 값을 얻으려면 그 데이터를 특정할 수 있는 방법이 있어야 합니다. '기본키'가 바로 그 방법입니다. 기본키는 한 개의 테이블에 중복없는 고유한 데이터를 찾아주는 열쇠입니다. 이러한 기본키는 각 테이블마다 반드시 한 개가 존재해야합니다. 그리고 기본키는 열 명에 밑줄을 그어 표시합니다. 기본키가 되는 열은 그 안에서 중복이 없어야 합니다. 즉 유일성을 유지해야 합니다. 유일성을 유지하기 위해 기본키는 복수의 열로 지정할 수도 있습니다. 유일성을 유지해야 하므로 NULL또한 불가합니다.

 

이러한 기본키는 값이 변경되서는 안됩니다. 왜냐면 첫째로, 기본기 값이 변경되면 고유한 데이터를 찾는다고 보장할 수 없습니다. 둘째로, 정합성이 약화됩니다.

 

규칙3. 중복되는 데이터가 없도록 정규화를 한다.

정규화는 테이블에 중복되는 데이터가 없도록(=정합성을 높이기 위해) 하기 위한 설계 방법입니다. 실무에서는 제3 정규형까지  알고 있으면 됩니다.

 

제1 정규형

테이블의 셀은 단일값(스텔라)이어야 한다. 사실 너무나 당연한 말입니다. 이미 대부분의 DBMS가 자동으로 이 규칙을 따르고 있습니다. 앞에서 말한 테이블은 함수라는 말을 지키기 위해서라도 테이블은 제1 정규형을 만족해야합니다.

 

제2 정규형

'부분함수 종속성'이 없어야 한다.기본키의 구성하는 일부 열로 기본기 이외의 열을 특정할 수 있으면 안됩니다. 만약 이러한 '부분함수 종속성'이 존재하면 해당 키와 종속하는 열을 다른 테이블로 만들어야 합니다. 왜 이렇게 해야될까요? 우선 2개의 테이블로 만들어야할 것을 한 개의 테이블로 만들면 모든 정보를 알아야 데이터를 등록할 수 있습니다. 반대로 얘기하면 정보가 많지 않으면 데이터를 추가할 수 없습니다. 그래서 임시적으로  NULL로 데이터를 넣고 나중에 갱신하려고 한다면 갱신시 데이터가 부정합하게 될 가능성이 높아집니다. 이러한 개싱신시의 데이터 부정합을 '갱신 이상'이라고 합니다.

 

제3 정규형

'추이함수 종속성'이 없어야 합니다.기본키 이외의 키로 기본키가 아닌 다른 열을 특정할 수 있으면 안됩니다. 이러한 상황도 마찬가지로 테이블을 외부로 빼야됩니다.

 

ER 다이어그램

 

너무 많아진 테이블 어떻게 관리해야 될까?

정규화를 하게되면 테이블의 갯수가 증가합니다. 실무에서는 테이블이 100개, 1000개 이상이 될 수 있습니다. 이 정도의 규모의 테이블간의 관계를 인간은 머릿 속에 모두 기억 할 수는 없을 것입니다. 그래서 테이블간의 관계를 도형과 선으로 표현한 것이 'ER다이어그램(Entity-Relationship Diagram)'이라고 합니다.엔티티(실체)는 테이블, 릴레이션(관계)는 테이블간의 관계를 의미합니다.

 

여러가지 표기법 중 IE 표기법을 배워봅시다.

 

엔티티

- 테이블을 의미합니다. 

- 사각형으로 표현합니다.

- 위 부분 절반은 기본키(PK,Primary Key)를 넣습니다.

-예)업계코드(PK)

- 아래부분 절반은 기본키가 아닌 열을 넣습니다.

- 외래키(FK, Foreign Key)가 존재하는 테이블은 외래키(해당 열)을 가지고 다른 테이블의 기본키 열을 참조할 수 있습니다.

- 외래키는 다른 테이블에서도 같은 의미로 사용되는 열을 의미합니다.

 

릴레이션십이란

릴레이션십엔티티간의 관계를 외래키로 알 수 있습니다. 릴레이션십은 다른 말로하면 테이블 간 레코드 수의 대응관계로 볼 수 있습니다.

이러한 대응관계로 테이블 간의 포함관계나 귀속관계를 파악할 수 있습니다. 1대다는 포함관계나 귀속관계를 나타내는 경우가 많습니다.

 

 

Comments