모던지 / 정보처리기사 / 데이터베이스 구축 1강. 데이터베이스 개념과 논리 설계

데이터베이스 구축 1강. 데이터베이스 개념과 논리 설계

데이터베이스의 가장 큰 발명은 저장이 아니라 분리였습니다. 프로그램을 고쳐도 데이터가 안 흔들리게 만든 것, 그게 전부의 시작입니다.

풀고 시작

문제 1. 데이터베이스 스키마 3단계 중, 데이터베이스 전체의 논리적 구조를 정의하며 조직 전체에 하나만 존재하는 것은?
개념 스키마는 조직 전체가 공유하는 통합 관점이라 데이터베이스마다 하나만 존재합니다. 외부 스키마는 사용자나 응용 프로그램마다 여럿이 존재하고, 내부 스키마는 저장 장치에 실제로 저장되는 물리적 구조를 정의합니다.

파일 시스템의 시대에는 프로그램을 고치면 데이터가 깨졌습니다

데이터베이스 이전에는 프로그램마다 자기 파일을 갖고 있었습니다. 총무팀 파일과 인사팀 파일에 같은 직원 정보가 따로 들어 있었죠. 한쪽만 고치면 두 값이 달라졌습니다. 이것이 데이터 중복불일치 문제입니다. 게다가 파일 형식을 조금만 바꿔도 그 파일을 읽던 프로그램을 전부 고쳐야 했습니다.

데이터베이스는 이 둘을 해결하려고 태어났습니다. 데이터를 한 곳에 모아 공유하고, 데이터 구조가 바뀌어도 프로그램이 영향받지 않게 하는 데이터 독립성을 확보하는 것이죠.

독립성을 설명하는 장치가 3단계 스키마입니다. 외부 스키마는 사용자나 응용 프로그램이 보는 부분적 관점이고, 개념 스키마는 조직 전체가 공유하는 통합된 논리 구조이며, 내부 스키마는 실제 저장 형태를 정의합니다. 여기서 두 가지 독립성이 나옵니다. 개념 스키마를 바꿔도 외부 스키마가 영향받지 않는 것이 논리적 독립성, 내부 스키마를 바꿔도 개념 스키마가 영향받지 않는 것이 물리적 독립성입니다. 논리는 위쪽, 물리는 아래쪽이라고 붙여 두면 뒤집히지 않습니다.

데이터베이스의 특성 넷도 자주 나옵니다. 여러 사용자가 함께 쓰는 공용 데이터, 항상 최신을 유지하는 계속 변화, 저장 위치가 아니라 내용으로 찾는 내용 참조, 그리고 여러 사용자가 동시에 접근하는 동시 공유입니다.

개체와 관계, ER 모델

논리 설계의 출발은 현실을 개체와 관계로 옮기는 일입니다. 피터 첸이 1976년에 제안한 ER 모델(개체-관계 모델)이 표준 도구죠. 표기법은 단순합니다.

기호
사각형 개체 (Entity)
타원 속성 (Attribute)
마름모 관계 (Relationship)
밑줄 친 타원 기본키 속성
개체와 속성, 개체와 관계의 연결

관계의 대응수(cardinality)는 1대1, 1대다, 다대다로 나뉩니다. 다대다 관계는 관계형 데이터베이스의 표로 그대로 옮길 수 없어서, 관계 자체를 별도의 테이블로 만들어 풀어냅니다. 학생과 과목이 다대다라면 수강이라는 테이블을 만드는 식이죠.

관계형 모델의 낱말들

에드거 커드가 1970년에 제안한 관계형 모델은 데이터를 표로 봅니다. 시험은 이 표의 각 부분을 부르는 이름을 묻습니다. 표 전체가 릴레이션, 가로줄이 튜플, 세로줄이 속성입니다. 튜플의 개수를 카디널리티, 속성의 개수를 차수(degree)라고 부릅니다. 한 속성이 가질 수 있는 값의 집합은 도메인입니다.

키(key)는 특히 자주 나옵니다.

후보키는 튜플을 유일하게 구별할 수 있는 속성 집합으로, 유일성과 최소성을 모두 만족합니다. 이 중 설계자가 고른 하나가 기본키이고, 선택받지 못한 나머지가 대체키입니다. 유일성만 있고 최소성은 없어도 되는 것이 슈퍼키입니다. 학번만으로 유일하다면 학번은 후보키이고, 학번과 이름을 묶은 것은 유일하지만 최소가 아니므로 슈퍼키죠. 다른 릴레이션의 기본키를 참조하는 속성은 외래키입니다.

키와 짝지어 나오는 것이 무결성 제약입니다. 기본키는 널 값을 가질 수 없고 중복될 수 없다는 것이 개체 무결성, 외래키 값은 참조하는 릴레이션에 실제로 존재하거나 널이어야 한다는 것이 참조 무결성, 속성 값이 정의된 도메인에 속해야 한다는 것이 도메인 무결성입니다.

다음 강에서는 이 표를 어떻게 쪼개야 탈이 없는지, 정규화를 다룹니다.

인출 문제

문제 1. 릴레이션에서 튜플의 개수를 가리키는 용어는?
가로줄인 튜플의 개수가 카디널리티입니다. 차수는 세로줄인 속성의 개수를 뜻하고, 도메인은 한 속성이 가질 수 있는 값의 범위이며, 속성은 세로줄 자체를 가리키는 말입니다.
문제 2. 유일성은 만족하지만 최소성은 만족하지 않아도 되는 키는?
슈퍼키는 튜플을 구별할 수만 있으면 되고 불필요한 속성이 붙어 있어도 됩니다. 후보키는 유일성과 최소성을 모두 갖춰야 하고, 기본키는 후보키 중 선택된 것, 대체키는 선택되지 않은 나머지 후보키입니다.
문제 3. 내부 스키마가 변경되어도 개념 스키마가 영향을 받지 않는 성질은?
저장 구조를 바꿔도 논리 구조가 흔들리지 않는 것이 물리적 독립성입니다. 논리적 독립성은 개념 스키마가 바뀌어도 외부 스키마가 영향받지 않는 성질이고, 나머지 둘은 독립성이 아니라 데이터 정확성에 관한 제약입니다.
문제 4. 외래키 값이 참조하는 릴레이션에 실제로 존재하거나 널이어야 한다는 제약 조건은?
다른 릴레이션을 가리키는 값이 허공을 가리키면 안 된다는 것이 참조 무결성입니다. 개체 무결성은 기본키가 널이거나 중복될 수 없다는 제약이고, 도메인 무결성은 값이 정해진 범위 안에 있어야 한다는 제약입니다.

생각해볼 질문 (정답 없음)

데이터 중복은 나쁘다고 배웁니다. 그런데 성능을 위해 일부러 중복을 두는 설계도 존재하죠. 무엇을 기준으로 그 예외를 허용해야 할까요.


이전: 2과목 5강 인터페이스 구현과 성능 개선 · 다음: 2강 정규화와 이상 현상

모던지 · 궁금하면 모던지 GitHub · 2026-09-10