표준 SQL 및 데이터베이스 입문
이제 테이블 정의에 대해 살펴보았으니, 다시 한번 데이터베이스 설계에 도전해 봅시다. 무엇을 관리할지 결정하고, 어떤 테이블로 구성할지 결정하여 테이블 간의 참조관계를 명확히 하는 것입니다. 그리고 관계형 데이터베이스를 사용하는 것이 전제이므로 관계형 데이터베이스의 규칙에 따라 설계하지 않으면 매우 다루기 어려운 데이터베이스가 되어 버립니다.
그냥 표형태로 되어 있는 것만으로는 부족할까요?
단순히 표형태만으로는 관계형 데이터베이스의 정합성을 유지하는 강력한 기능을 활용할 수 없습니다. 단순히 데이터를 쌓아 놓은 그릇에 불과해집니다. 데이터를 제대로 관리하고 활용하고 싶어서 DBMS를 사용하는 것입니다. 그런데 규칙에 따라 설계하는 것은 구체적으로 어떤 의미를 가지고 있는 것일까요?
여기서 도움이 되는 것이 바로 '정규화(normalization)'이라는 단계입니다. 관계형 데이터베이스에는 '정규형(normal form)'이라고 불리는 일정의 바람직한 형태가 있습니다.
정규형은 Normal form을 직역한 것으로 normal은 '기준에서 벗어나지 않은'이라는 의미입니다. 데이터베이스의 경우에는 일정한 규칙을 따르는 형태를 의미합니다. 일런 형태로 만드는 과정을 정규화라고 합니다.
관계형 데이터베이스 설계기준을 명확하게 하는 요소 중 하나가 바로 정규화(normalization)입니다. 정규화란 테이블의 설계내용(스키마)을 규칙에 맞는 상태로 만드는 것을 의미합니다. 데이터베이스를 정규화함으로써, 데이터 중복을 제거하고 모순된 상태가 발생하지 않도록 하며, 필요할 때 데이터를 효율적으로 업데이트할 수 있게 됩니다. '데이터중복'이란, 예를 들어, 같은 행이 두번 이상 나타나는 것뿐만 아니라, 학생이름이 여러 테이블에 저장되어 있는 상태도 포함됩니다.
데이터를 제대로 정리되어 있으면 표시하는 것은 어떻게든 할 수 있지만, 올바르게 업데이트되지 않으면 아무런 소용이 없습니다.
관계형 데이터베이스에서 관리하는 데이터는 업데이터가 전제이기 때문에, 예를 들어, 재고수량이나 학생 및 직원 마스터와 같이 이 데이터들을 최신 상태로 유지해야 합니다.
정규화 목적은 바로 업데이트 불일치(update anomaly)를 방지하는데 있습니다. 업데이트 불일치는 작업의 종류에 따라 수정 불일치(modification anomaly), 삽입 불일치(insertion anomaly), 삭제 불일치(deletion anomaly)의 3가지로 나눌 수 있습니다.
수정불일치(modification anomaly): 데이터 변경시 발생하는 불일치입니다. 예를 들어, 학생 이름이 학생마스터와 시험결과 테이블 2곳에 저장되어 있다면, 성명을 변경할 때 학생마스터뿐만 아니라 시험결과 테이블에서 해당 학생의 모든 행을 변경해야 합니다. 만약, 학생의 이름정보가 한곳에만 저장되어 있다면 이러한 문제는 발생하지 않습니다.
삽입불일치(insertion anomaly): 데이터 추가시 발생하는 불일치입니다.
삭제불일치(deletion anomaly): 데이터 삭제시 발생하는 불일치입니다.
업데이트 불일치를 방지하기 위해서는 지금까지 '한가지 사실은 한번만'이라는 이야기를 했지만, '정규화'는 제1정규형, 제2정규형, 제3정규형등 단계적으로 진행할 수 있도록 되어 있습니다. 몇단계까지 있을까?
정규형의 종류를 확인해보면 8가지 정도가 될 수 있습니다. 하지만, 일반적으로 정규화라고 하면, 제1정규형부터 제3정규형까지와 제3정규형을 더 엄격하게 한 보이스코드 정규형까지 달성하는 것을 의미합니다.
정규화된 형태는 '정규형(normal form, NF)'라고 부릅니다. 정규형에는 여러 단계가 있으며, 제1정규형(1st Normal Form, 1NF), 제2정규형(2nd Normal FOrm, 2NF)등 순차적으로 정규화할 수 있습니다. 참고로 제1정규형에 미치지 못한 형태는 '비정규형(unnormalized form, UNF)'이라고 합니다.
정규형은 제1정규형부터 제5정규형, 보이스코드정규형, 도메인키 정규형(Domain-Key Normal Form, NKNF), 그리고 새로 제안된 제6정규형까지 존재하지만, 일반적으로는 제1정규형부터 제3정규형 및 보이스코드 정규형을 달성한 상태를 목표로 합니다. 다만, 다루고자 하는 데이터에 따라서는 다른 관점의 정규화가 필요할 수 있으며, 그 경우에는 제4정규형, 제5정규형 및 도메인키 정규형을 검토하게 됩니다. 또한, 다른 관점으로 도메인키 정규형과 제6정규형도 있으나, 이 강좌에서는 참고용으로만 소개합니다.
우선 제3정규형을 목표로 해 봅시다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5