| 구분 | 정의 | 예시 |
|---|---|---|
| 데이터베이스(Database) | 데이터의 집합으로, 형식을 갖추지 않아도 됨 | 엑셀 파일 모음, CSV 파일 모음 |
| DBMS(Database Management System) | 데이터를 효과적으로 관리하기 위한 시스템 | Oracle, MySQL, SQL Server, PostgreSQL |
DBMS의 장점:
| 구성 요소 | 설명 |
|---|---|
| 계정 | 데이터 접근 제한을 위한 업무별/시스템별 계정 |
| 테이블 | DBMS의 DB 안에서 데이터가 저장되는 기본 형식 |
| 스키마 | 테이블의 구조와 정보를 정의하는 기본 구조 |
소유권: 하나의 테이블은 반드시 하나의 유저(계정) 소유여야 함
관계: 테이블 간 관계는 일대일(1:1), 일대다(1:N), 다대다(N:N)의 관계가 가능
이름: 테이블명은 중복될 수 없으나, 소유자가 다른 경우 같은 이름으로 생성 가능
-- 예시: SCOTT 계정과 HR 계정에 모두 EMP 테이블 존재 가능
SCOTT.EMP
HR.EMP
데이터 조작: 테이블은 행 단위로 데이터가 입력, 삭제되며 수정은 값 단위로 가능
-- 행 단위 삽입
INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
-- 행 단위 삭제
DELETE FROM emp WHERE empno = 7839;
-- 값 단위 수정
UPDATE emp SET sal = 5500 WHERE empno = 7839;
| SQL 유형 | 포함 명령어 | 설명 |
|---|---|---|
| DQL | SELECT | 데이터 조회 언어 |
| DML | INSERT, UPDATE, DELETE | 데이터 조작 언어 |
| DDL | CREATE, ALTER, DROP, TRUNCATE | 데이터 정의 언어 |
| DCL | GRANT, REVOKE | 데이터 제어 언어 |
| TCL | COMMIT, ROLLBACK, SAVEPOINT | 트랜잭션 제어 언어 |
| 특징 | 설명 |
|---|---|
| 속도 | 데이터의 분류, 정렬, 탐색 속도가 빠름 |
| 신뢰성 | 데이터의 무결성 보장으로 신뢰성이 높음 |
| 구조 변경 | 기존 작성된 스키마 수정이 어려움 |
| 부하 분석 | 데이터베이스 부하 분석이 어려움 |
| 무결성 유형 | 설명 | 예시 |
|---|---|---|
| 개체 무결성 | 테이블의 기본키(PK) 컬럼은 NULL값이나 중복값을 가질 수 없음 | 학생 테이블의 학번은 NULL이 될 수 없고, 중복될 수 없음 |
| 참조 무결성 | 외래키 값은 NULL이거나 참조 테이블의 기본키 값과 동일해야 함 | 수강신청 테이블의 학번은 학생 테이블의 학번에 존재해야 함 |
| 도메인 무결성 | 주어진 속성 값이 정의된 도메인에 속한 값이어야 함 | 성별 컬럼에는 'M'과 'F'만 입력 가능 |
| NULL 무결성 | 특정 속성에 대해 NULL을 허용하지 않는 특징 | 이름 컬럼에는 NULL을 허용하지 않음 |
| 고유 무결성 | 특정 속성에 대해 값이 중복되지 않는 특징 | 이메일 주소는 중복되지 않아야 함 |
| 키 무결성 | 하나의 릴레이션(관계)에는 적어도 하나의 키가 존재해야 함 | 모든 테이블은 최소 하나의 키를 가져야 함 |
무결성 위반 예시:
개체 무결성 위반:
INSERT INTO students (student_id, name) VALUES (NULL, 'John'); -- 기본키가 NULL
INSERT INTO students (student_id, name) VALUES (1001, 'John'); -- 이미 존재하는 학번(중복)
참조 무결성 위반:
INSERT INTO enrollments (student_id, course_id) VALUES (9999, 'CS101'); -- 존재하지 않는 학생 ID
도메인 무결성 위반:
INSERT INTO students (student_id, gender) VALUES (1002, 'X'); -- 정의된 도메인(M/F) 외의 값
ERD는 데이터베이스 설계에서 중요한 도구로, 데이터베이스의 구조를 시각적으로 표현한다.
| 구성요소 | 설명 |
|---|---|
| 엔터티(Entity) | 업무가 관리하고자 하는 데이터 객체(사람, 장소, 개념 등) |
| 속성(Attribute) | 엔터티가 가지는 특성이나 성질 |
| 관계(Relationship) | 엔터티 간의 연관성 |
| 기호 | 의미 |
|---|---|
| 직사각형 ⬜ | 엔터티(Entity) |
| PK | 기본키(Primary Key) 속성 |
| FK | 외래키(Foreign Key) 속성 |
| 실선 ─── | 식별 관계(Identifying Relationship): 부모 테이블의 기본키가 자식 테이블의 기본키의 일부가 됨 |
| 점선 - - - | 비식별 관계(Non-identifying Relationship): 부모 테이블의 기본키가 자식 테이블의 일반 속성이 됨 |
| ─────|< | 다중성(N, 까마귀발): 관계의 한쪽 끝이 여러 인스턴스를 가질 수 있음 |
| ─────── | 단일성(1, 막대): 관계의 한쪽 끝이 단 하나의 인스턴스를 가짐 |
| ────O | 선택적 관계(Optional): 관계가 필수적이지 않음 (원 표시) |
| ────── | 필수적 관계(Mandatory): 관계가 반드시 존재해야 함 (원 없음) |
| 기호 | 의미 |
|---|---|
| 직사각형 ⬜ | 엔터티(Entity)와 그 속성들 |
| # | 기본키(Primary Key) 속성 |
| * | 필수(NOT NULL) 속성 |
| (FK) | 외래키(Foreign Key) 속성 |
| 실선 ─── | 필수적 관계(Mandatory): 관계가 반드시 존재해야 함 |
| 점선 - - - | 선택적 관계(Optional): 관계가 필수적이지 않음 |
| ───◀ | 다중성(N, 까치발): 관계의 한쪽 끝이 여러 인스턴스를 가질 수 있음 |
| ─── | 단일성(1): 관계의 한쪽 끝이 단 하나의 인스턴스를 가짐 |
| ▲ | 관계선 위의 화살표: 관계의 방향을 나타냄 |
| 요소 | IE 표기법 | Barker 표기법 |
|---|---|---|
| 엔터티 표현 | 직사각형에 이름만 표시 | 직사각형 안에 이름과 속성 목록 |
| 기본키 표시 | PK 또는 밑줄 | # 기호 |
| 필수 속성 표시 | (M) 또는 표시 없음 | * 기호 |
| 외래키 표시 | FK | (FK) |
| 1:N 관계 표현 | ────|< (까마귀발) | ───◀ (까치발) |
| 식별 관계 | 실선 | 명시적으로 구분하지 않음 |
| 비식별 관계 | 점선 | 명시적으로 구분하지 않음 |
| 필수 관계 | 원 없음 (──────) | 실선 (─────) |
| 선택적 관계 | 원 표시 (────O) | 점선 (- - -) |