데이터베이스 일반 1강. 데이터베이스 개요와 테이블
엑셀로도 되는 일을 왜 굳이 액세스로 할까요. 같은 값을 두 번 적는 순간 답이 나옵니다.
풀고 시작
같은 값을 두 번 적는 순간 문제가 시작됩니다
주문 목록을 엑셀 한 장으로 관리한다고 해 봅시다. 한 행에 고객 이름, 전화번호, 주소, 상품명, 수량이 들어갑니다. 같은 고객이 열 번 주문하면 그 사람의 주소가 열 번 적힙니다.
이사를 가면 어떻게 될까요. 열 곳을 모두 고쳐야 하고, 아홉 곳만 고치면 그 순간부터 이 표는 두 개의 주소를 동시에 주장합니다. 이것이 데이터 중복이 낳는 불일치(inconsistency) 입니다.
이 문제를 푸는 방법은 표를 쪼개는 것입니다. 고객 표와 주문 표를 따로 두고, 주문 표에는 고객 이름 대신 고객 번호만 적습니다. 주소는 고객 표에 한 번만 존재하므로 고칠 곳도 한 곳입니다. 이렇게 표를 나누고 관계로 잇는 것이 관계형 데이터베이스의 핵심이고, 액세스가 하는 일입니다.
엑셀과 액세스의 갈림길은 여기입니다. 엑셀은 계산에 강하고 액세스는 관계에 강합니다. 데이터가 한 장으로 끝나고 계산이 주된 일이면 엑셀이 낫고, 표가 여럿이고 서로를 참조하면 액세스가 낫습니다.
자료형을 정하는 일은 규칙을 정하는 일입니다
테이블을 만들 때 각 필드의 자료형을 정합니다. 자료형은 그 칸에 무엇이 들어올 수 있는지를 정하는 규칙입니다.
| 자료형 | 무엇을 담나 |
|---|---|
| 짧은 텍스트 | 이름, 주소처럼 짧은 글입니다. 최대 255자입니다 |
| 긴 텍스트 | 메모나 설명처럼 긴 글입니다 |
| 숫자 | 계산에 쓸 수를 담습니다 |
| 날짜와 시간 | 날짜, 시각을 담습니다 |
| 통화 | 금액을 담으며 반올림 오차를 막습니다 |
| 일련 번호 | 레코드를 추가할 때마다 자동으로 1씩 커집니다 |
| Yes/No | 참과 거짓 둘 중 하나입니다 |
전화번호를 숫자로 두면 안 됩니다. 앞자리 0이 사라지고 하이픈도 넣을 수 없으니까요. 계산할 일이 없는 숫자는 텍스트로 두는 것이 맞습니다. 우편번호와 주민등록번호도 같습니다.
일련 번호는 기본 키로 자주 쓰입니다. 사람이 정하지 않아도 겹치지 않는 값이 자동으로 붙으니까요. 다만 한 번 쓴 번호는 레코드를 지워도 다시 쓰이지 않습니다.
필드에는 조건도 걸 수 있습니다. 필수(required) 는 빈 값을 막고, 유효성 검사 규칙은 들어올 수 있는 값의 범위를 정하며, 입력 마스크는 입력 형식을 강제합니다. 기본값은 새 레코드에 미리 채워 넣을 값이죠. 이런 규칙을 필드에 걸어 두면 사람이 아무리 급해도 잘못된 값이 들어가지 않습니다.
관계를 맺으면 데이터베이스가 스스로를 지킵니다
표를 나눴으면 다시 이어야 합니다. 관계(relationship) 를 맺는다는 것은 한 표의 기본 키와 다른 표의 외래 키를 연결하는 일입니다.
관계에는 세 종류가 있습니다. 일대다(1:N) 가 가장 흔합니다. 고객 하나에 주문이 여럿인 관계죠. 일대일(1:1) 은 드물고, 다대다(M:N) 는 액세스에서 직접 만들 수 없어 연결 테이블을 가운데 두어 일대다 둘로 쪼갭니다. 학생과 과목의 관계가 그렇습니다. 수강 신청 표를 가운데 두는 거죠.
관계를 맺을 때 참조 무결성(referential integrity) 을 켤 수 있습니다. 이것이 데이터베이스가 스스로를 지키는 장치입니다. 켜 두면 존재하지 않는 고객 번호로 주문을 넣을 수 없고, 주문이 남아 있는 고객을 지울 수 없습니다. 실수로 부모를 지워 자식이 미아가 되는 일을 막아 주죠. 여기에 연쇄 삭제를 함께 켜면 고객을 지울 때 그 주문까지 함께 지워집니다. 편리하지만 위험하기도 하니 신중하게 켜야 합니다.
인출 문제
이전: 스프레드시트 6강 · 다음: 데이터베이스 일반 2강