왜 데이터베이스가 필요할까?
파일 시스템에서는 부서마다 자기 파일을 따로 가지고 있어요. 그러면 이런 문제가 생겨요.
- 데이터 중복: 같은 데이터가 여러 번 저장되어 공간을 낭비해요.
- 데이터 불일치: 한 곳만 고치고 다른 곳은 그대로라서 서로 내용이 달라져요.
- 검색과 공유가 어려움: 질문이 새로 생길 때마다 새 프로그램이 필요해요.
- 약한 보안: 누가 무엇을 볼 수 있는지 통제하기 어려워요.
- 데이터 분리와 종속: 파일 형식이 제각각이고, 파일 구조를 바꾸면 프로그램이 멈춰요.
데이터베이스는 관련 있는 데이터를 한곳에 정리해 둔 모음이에요. 그래서 공유할 수 있고, 일관되게 유지할 수 있고, 안전하게 지킬 수 있어요.
데이터베이스 관리 시스템(DBMS)
DBMS는 데이터베이스를 만들고, 저장하고, 고치고, 검색하고, 관리하며 누가 쓸 수 있는지도 정하는 소프트웨어예요. 예: MySQL, Oracle, PostgreSQL, SQLite, Microsoft Access.
장점: 중복이 줄고, 데이터가 일관되며, 여러 사용자가 함께 쓸 수 있어요. 비밀번호와 권한으로 보안을 지키고, 백업과 복구가 되고, 질의 언어(SQL)로 쉽게 검색할 수 있어요.
일상 속 쓰임: 은행, 기차 예약, 학교 기록, 온라인 쇼핑, 병원.
관계형 모델: 릴레이션, 속성, 튜플, 도메인
관계형 데이터 모델에서는 데이터를 표에 담아요.
- 릴레이션: 이름이 있는 표예요. 예: STUDENT.
- 속성: 열이에요. 예: Name.
- 튜플: 행이에요. 즉 기록 하나 전체예요.
- 도메인: 한 속성에 들어갈 수 있는 값의 집합이에요. 예: Class ∈ {9, 10, 11, 12}.
- 차수: 속성(열)의 개수예요.
- 카디널리티: 튜플(행)의 개수예요.
규칙: 열 이름은 서로 달라야 해요. 행이나 열의 순서는 중요하지 않아요. 완전히 똑같은 행이 두 개 있으면 안 돼요. 칸마다 값은 하나만 들어가요(또는 NULL, 즉 모르는 값).
키: 후보키, 기본키, 대체키
- 후보키: 모든 행에서 값이 서로 다르고 NULL이 아닌 속성(또는 속성들의 묶음)이에요. 한 표에 여러 개 있을 수 있어요.
- 기본키: 행을 구별하기 위해 후보키 중에서 고른 하나예요. NULL이 될 수 없고 값이 겹치면 안 돼요.
- 대체키: 기본키로 뽑히지 않은 나머지 후보키예요.
예: STUDENT(AdmNo, Name, Class, Email). Name과 Class는 겹칠 수 있어서 키가 아니에요. AdmNo와 (항상 채워져 있고 모두 다르다면) Email은 후보키예요. AdmNo를 기본키로 고르면 Email은 대체키가 돼요.
알아 두면 좋은 것: 복합키는 두 개 이상의 열을 함께 쓰는 키예요(예: Class + RollNo). 외래키는 한 표의 열이 다른 표의 기본키를 가리켜서 두 표를 이어 주는 키예요.
해 보기: 내 학생증에서 키 찾기
학생증이나 교통카드를 살펴보세요. 이름, 학년, 번호, 학번, 전화번호 같은 항목을 모두 적어요. 항목마다 두 가지를 물어보세요. 두 학생이 같은 값을 가질 수 있나? 비어 있을 수 있나? 그리고 어느 항목이 후보키인지 적고, 기본키로 무엇을 고를지 정해 보세요. 그다음 3D의 6단계에서 같은 방법으로 다시 시험해 보세요.
핵심 공식과 정의
- 릴레이션 = 표; 속성 = 열; 튜플 = 행
- 차수 = 열의 개수; 카디널리티 = 행의 개수
- 후보키: 유일함 + NULL 아님
- 기본키 = 고른 후보키; 대체키 = 나머지
풀이 예제
1. 표에 열이 5개, 행이 30개 있어요. 차수와 카디널리티를 구하세요.
차수 = 5, 카디널리티 = 30.
2. 4 × 10 표(차수 4, 카디널리티 10)에 행 2개와 열 1개를 추가하면 새 값은 얼마일까요?
차수 = 5, 카디널리티 = 12.
3. EMPLOYEE(EmpID, Name, Aadhaar, Dept)에서 후보키, 기본키, 대체키를 찾으세요.
EmpID와 Aadhaar는 값이 유일하므로 후보키예요. EmpID를 기본키로 고르면 Aadhaar는 대체키예요. Name과 Dept는 겹칠 수 있어요.
4. STUDENT에서 Name은 왜 기본키가 될 수 없을까요?
이름이 같은 학생이 둘 있을 수 있어서 행을 하나로 구별하지 못하기 때문이에요.
5. 글자 한 개로 저장하는 속성 Gender의 도메인을 쓰세요.
{"M", "F", "O"} (또는 학교에서 정한 다른 코드).
자주 하는 실수
- 열을 튜플이라고 부르는 것. 튜플 = 행, 속성 = 열이에요.
- 차수가 행의 개수라고 말하는 것. 차수는 열의 개수예요.
- 표에는 후보키가 하나만 있다고 생각하는 것. 후보키는 여러 개일 수 있지만 기본키는 하나뿐이에요.
- 기본키 열에 NULL을 허용하는 것.