데이터의 레코드에 빠르게 접근하기 위해 <키 값, 주소> 쌍으로 구성된 데이터 구조
데이터가 저장된 물리적 구조와 밀접한 관계를 가지고 있으며
인덱스를 통해 테이블의 레코드에 대해 빠르게 액세스를 할 수 있음
![]()
| 파일 시스템(File System) | 데이터베이스 모델링(Database Modeling) | 관계형 데이터베이스(Relational DB) |
|---|---|---|
| 파일 (File) | 엔티티 (Entity) | 테이블 (Table) |
| 레코드 (Record) | 튜플 (Tuple) | 행 (Row) |
| 키 (Key) | 식별자 (Identifier) | 기본키 (Primary Key), 유니크 (Unique) |
| 필드 (Field) | 속성 (Attribute) | 열 (Column) |
테이블(Table) : 행(Row)과 열(Column)로 이루어진 데이터 집합을 의미. (=릴레이션(Relation))
행(Row) : 관계된 데이터의 묶음. 튜플(Tuple) 또는 레코드(Record)라고도 불림
열(Column) : 가장 작은 단위의 데이터를 의미. 필드(Field) 또는 속성(Attribute)라고도 불림
키(Key) : 테이블에서 행의 식별자로 이용되는 식별자
엔티티(Entity) : 현실 세계에 존재하는 객체를 데이터베이스 상에 표현하기 위해 사용하는 추상적인 개념.
예시) 학생을 관리하기 위해 사용하는 데이터베이스에서 학번, 이름, 나이, 학과 등등의 정보들을 통해 'Student'라는 Entity를 표현할 수 있습니다.
유일성 : 하나의 키로 어떠한 행을 바로 찾아낼 수 있는 성질
(ex: 주민등록번호)
최소성 : 레코드를 식별하는 데 꼭 필요한 속성들로만 구성되어 있는 성질
(ex: [주민등록번호 + 학번]은 최소성을 만족하지 않음. Because, 주민등록번호로만 행을 구분할 수 있기 때문!)
슈퍼 키(Super Key) : 테이블의 행을 고유하게 식별할 수 있는 속성 또는 속성의 집합
(유일성은 만족하지만 최소성은 만족하지 않음)
복합 키(Composite Key) : 2개 이상의 속성(Attribute)을 사용한 키
후보 키(Candidate Key) : 유일성과 최소성을 만족하는 키 (각 튜플을 유일하게 식별할 수 있는 속성의 집합)
기본 키(Primary Key) : 후보 키에서 선택된 키 (null 값 혹은 중복 값으로 가질 수 없음)
대체 키(Surrogate Key) : 후보 키에서 선택되지 않은 키
외래 키(Foreign Key) : 서로 다른 테이블 간의 관계를 맺어주는 키 (다른 테이블의 기본키를 참조)
하나의 Realtion 내에 있는 Attribute의 수
(예를 들어 어떠한 테이블의 열이 고객, 이름, 전화번호로 구성되어있다면 그 테이블의 차수는 3!)
Relation에서 각각의 속성에 채워질 수 있는 데이터의 타입과 길이를 의미
(성별이라는 필드에는 남, 여 외에 다른 값이 들어갈 수 없음. 나이 또한 숫자 값만 가능)
데이터베이스를 구성하는 데이터 객체, 속성, 레코드 간의 관계 등등,
데이터베이스의 골격 구조를 나타내는 일종의 도면.
스키마는 데이터베이스의 엔티티와 그 엔티티들 간의 관계를 정의하고 어떠한 타입의 데이터가 어느 위치에 적재되어야 하는지, 또 다른 테이블이나 엔티티와 어떠한 관계를 맺는지 정의.
![]()
![]()
외부 스키마 (=서브 스키마=사용자 뷰(가상 테이블))
사용자 입장에서 정의한 데이터베이스의 논리 구조.
데이터들을 어떠한 형식, 구조, 화면을 통해 사용자에게 보여줄 것인가에 대한 명세를 뜻하며
하나의 데이터베이스에는 여러 개의 외부 스키마가 있을 수 있음
개념 스키마 (=전체적인 뷰)
데이터베이스의 전체적인 논리적 구조.
사용자가 필요로 하는 데이터를 통합한 조직 전체의 데이터베이스로 하나만 존재하며
객체 간의 관계와 제약조건, 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 뜻함
내부 스키마
물리적 저장장치의 입장에서 본 데이터베이스 구조.
데이터베이스에 저장될 레코드의 물리적인 구조, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄
-- 데이터 조회 SELECT * FROM 학생; -- 데이터 삽입 INSERT INTO 학생 (학번, 이름, 전공) VALUES (101, '홍길동', '컴퓨터공학'); -- 데이터 수정 UPDATE 학생 SET 이름 = '김철수' WHERE 학번 = 101; -- 데이터 삭제 DELETE FROM 학생 WHERE 학번 = 101;
-- 테이블 생성 CREATE TABLE 학생 ( 학번 INT PRIMARY KEY, 이름 VARCHAR(20), 전공 VARCHAR(30) ); -- 테이블 구조 변경 (열 추가) ALTER TABLE 학생 ADD 입학년도 INT; -- 테이블 삭제 DROP TABLE 학생;
-- 1. 사용자 user1에게 학생 테이블에 대한 SELECT 권한 부여 GRANT SELECT ON 학생 TO user1; -- 2. 사용자 user1에게 부여한 권한 회수 REVOKE SELECT ON 학생 FROM user1; -- 3. 학생 테이블에 데이터 삽입 INSERT INTO 학생 (학번, 이름, 전공) VALUES (301, '최지우', '경제학'); -- 4. 삽입한 데이터 저장(확정) COMMIT; -- 5. 실수로 잘못된 데이터 삽입 INSERT INTO 학생 (학번, 이름, 전공) VALUES (999, '오류', '오류학'); -- 6. 잘못된 데이터 되돌리기 (변경 취소) ROLLBACK;
정보에 결점이 없도록 유지하는 성질
데이터베이스 내에 저장되는 데이터 값들이 항상 일관성을 갖고 데이터의 유효성, 정확성, 안정성을 유지할 수 있도록 하는 제약조건을 두는 데이터베이스의 특성
더 이상 분해되지 않는 최소 구성의 단위
테이블 내에서 데이터 중복성에 의해 발생되는 데이터 불일치 현상
갱신 이상(Modification Anomaly)
중복 데이터 중 일부만 수정되어 데이터 불일치가 일어나는 현상
삽입 이상(Insertion Anomaly)
중복된 데이터 중 일부만 수정되어 데이터의 모순이 일어난 현상
삭제 이상(Deletion Anomaly)
특정 정보 삭제 시 다른 정보까지 삭제되어버리는 현상
논리적 설계단계에서 발생할 수 있는 종속으로 인한 이상 현상의 문제점을 해결하기 위해,
속성들 간의 종속 관계를 분석하여 여러 개의 릴레이션으로 분해하는 과정
ex)
학생 전화번호가 010-1111-2222, 010-3333-4444 같이 여러개를 한 칸에 넣으면 안 됨.
- 각 전화번호를 별도 행이나 별도 컬럼으로 분리해야 함.
ex)
기본키가 (학번, 과목코드)일 때, 학생 이름이 학번에만 의존하면 안 되고, 별도 테이블로 분리해야 함.
- 즉, 복합키 중 일부에만 의존하는 컬럼을 분리하여 중복 제거
ex)
학생 테이블에 학번, 학과코드, 학과명이 있을 때,
학과명은 학과코드에 의존하므로 별도 테이블로 분리해야 함.
용어 설명은 잘 되어 있는데, 실제 SQL 예시가 거의 없음.
특히 DDL, DML 언급했으면 간단한 쿼리라도 보여줘야 함.
이런 식으로 직접 써봐야함.
트랜잭션 언급했으면 ACID 속성(원자성, 일관성, 고립성, 지속성) 설명 필수임.
"한꺼번에 수행되어야 할 연산"이라는 정의만으론 왜 트랜잭션 쓰는지 와닿지 않음.
계좌 이체 예시(A 계좌 출금 + B 계좌 입금 둘 다 성공 or 둘 다 실패) 추가하면
트랜잭션 필요성 명확해짐.
정규화도 언급만 하고 1NF, 2NF, 3NF 같은 단계별 설명이 없음.