- 테이블, 행, 열의 정보를 구조화하는 방식
- 테이블을 조인하여 정보 간 관계 또는 링크를 설정할 수 있는 기능이 있어, 여러 데이터 포인트 간의 관계를 쉽게 이해하고 정보를 얻을 수 있습니다.
- 비즈니스에서 데이터를 구성, 관리, 연결하는 데 도움이 되는 스프레드시트 파일 모음
- 실제, 독립체라는 뜻으로 데이터 모델링에서 사용되는 객체
- 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 "어떤 것(Thing)"
- 시스템을 구축하고자 하는 업무에서 필요로 하고 관리하고자 하는 정보여야만 한다.
- 엔터티는 유일한 식별자가 있어야 한다. (기본키)
- 두 개 이상의 인스턴스의 집합이어야 한다.
- 반드시 속성을 포함해야 합니다.
- 다른 엔터티 간의 관계가 존재해야 합니다. (존재적 연관성, 행위적 연관성)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 개체의 특성을 기술
- 데이터 항목 또는 데이터 필드에 해당
- 속성의 수를 디그리(Degree) 또는 차수라고 한다.
- 여러 개의 인스턴스를 담고 있는 엔터티에서 인스턴스를 구별하기 위한, 즉 엔터티를 대표하는 속성을 의미
- 반드시 하나의 유일한 식별자가 존재해야 한다.
- 엔터티내에서 특정 인스턴스를 구별하는 방법으로 식별자를 이용
- 유일성 - 주식별자에 의해 엔터티내에 모든 인스턴스들을 유일하게 구분할 수 있어야 함
- 최소성 - 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
- 불변성 - 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
- 존재성 - 주식별자가 지정되면 반드시 데이터 값이 존재 해야함(Null값 안됨)
<주 식별자>
- 엔터니 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자
<보조 식별자>
- 엔터티 내에서 칵 어커런스를 구분할 수 있는 구분자이지만 대표성을 가지지 못해 참조관계 연결을 못함
내부 식별자
- 엔터티 내부에서 스스로 만들어지는 식별자
외부식별자
- 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
단일식별자(Single Identifier)
- 하나의 속성으로 구성된 식별자
복합식별자
- 둘 이상의 속성으로 구성된 식별자
- 한 릴레이션에는 똑같은 튜플이 포함될 수 없음
- 한 릴레이션에 포함된 튜플 사이에는 순서가 없음
- 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변함
- 릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않음
- 속성의 유일한 식별을 위해 속성의 명칭은 유일해야 함
- 속성을 구성하는 값은 동일한 값이 있을 수 있음
- 릴레이션을 구성하는 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키로 설정
- 속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만을 저장
- 데이터의 무결성을 지키기위해 입력받은 데이터에 대한 제한을 두는 것을 의미
Create Table 테이블(
필드명 INT NOT NULL //해당 필드는 Null값 저장x
);
//기본적인 Unique
Create Table 테이블(
필드명 INT UNIQUE
);
//제약조건에 이름부여(constraint)
Create Table 테이블(
필드명 INT ,
...
CONSTRAINT 제약조건 UNIQUE 필드명
);
//기본적인 Primary
Create Table 테이블(
필드명 INT PRIMARY KEY
);
//제약조건에 이름부여(constraint)
Create Table 테이블(
필드명 INT ,
...
CONSTRAINT 제약조건 PRIMARY KEY 필드명
);
Create Table 테이블(
필드명 INT ,
...
CONSTRAINT 제약조건 FOREIGN KEY (필드명)
REFERENCES 테이블명 (필드명)
);
이 경우 특정 테이블의 삭제 및 수정을 진행할 때, 연관된 필드가 어떤 동작을 수행할지 지정해 줄 수 있습니다. 아래는 예제코드입니다.
//삭제 및 수정 시 연관되어있는 필드 같이 삭제
ON DELETE CASCADE
ON UPDATE CASCADE
//삭제 및 수정 시 연관되어있는 필드 null
ON DELETE SET NULL
ON UPDATE SET NULL
//삭제 및 수정 시 연관되어있는 필드 기본값으로 설정
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT
//참조하는 테이블에 데이터 남아있으면 삭제 불가
ON DELETE RESTRICT
ON UPDATE RESTRICT
Create Table 테이블(
필드명 INT DEFAULT '기본값'
);
- 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미
- 정확성이란 중복이나 누락이 없는 상태를 뜻하고, 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 뜻한다.
- 무결성을 설계하지 않으면 테이블에 중복된 데이터 존재, 부모와 자식 데이터 간의 논리적 관계 깨짐, 잦은 에러와 재개발 비용 발생 등과 같은 문제가 발생
- 기본 키 제약이라고도 하며, 테이블은 기본키를 지정하고 그에 따른 무결성 원칙을 지켜야 하는 조건
- 기본 키(Primary Key)에는 Null 값이 올 수 없음
- 기본 키는 테이블 내에 오직 하나의 값만 존재해야 함 (하나의 테이블 내에 동일한 기본 키를 가진 레코드는 존재할 수 없음)
** 기본 키란? -> 테이블에서 특정 레코드를 구별하기 위해 후보 키 중에서 선택된 고유한 식별자 키
- 외래 키 제약이라고도 하며, 테이블 간의 참조 관계를 선언하는 제약조건
- 외래 키(Foreign Key)의 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 함
- 외래 키 속성은 참조할 수 없는 값을 지닐 수 없음 (즉, 외래 키 속성 값이 상위 테이블의 인스턴스에 반드시 존재하거나 Null이어야 함)
** 외래 키란? -> 한 테이블의 키 중에서 다른 테이블의 레코드를 유일하게 식별할 수 있는 키
- 테이블에 존재하는 필드의 무결성을 보장하기 위한 것
- 필드의 타입, Null 값 허용 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는지 확인하는 조건
- Ex) 주민등록번호 필드에 문자가 입력되는 경우엔 도메인의 무결성이 깨졌다고 볼 수 있음
- 테이블의 특정 속성 값이 Null이 될 수 없게 하는 조건
- 테이블의 특정 속성에 대해 각 레코드들이 갖는 값들이 서로 달라야 하는 조건
- 하나의 테이블에는 적어도 하나의 키가 존재해야 하는 조건
- 테이블의 어느 한 레코드의 삽입 가능 여부 또는 한 테이블과 다른 테이블의 레코드들 사이의 관계에 대한 적절성 여부를 지정한 조건
장점 - 스키마를 정의할 때 일관성 조건을 오직 한 번만 명시하고, 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로 응용 프로그램들은 일관성 조건을 검사할 필요가 없음
단점 - 프로그래밍 작업이 훨씬 복잡해지고, 무결성 제약조건을 반복해서 구현해야 하고, 무결성 제약조건들 간에 서로 충돌이 발생할 수 있음
- 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조라고 한다.
- 인덱스 생성 시 데이터를 오름차순으로 정렬하기 때문에 정렬된 주소체계라고 표현할 수 있다.
- 가장 큰 특징은 데이터들이 정렬이 되어있다.
<풀 스캔>
테이블을 만들고 안에 데이터가 쌓이게 되면 테이블의 레코드(row : 행)는 내부적으로 순서가 없이 뒤죽박죽으로 저장이 된다.
WHERE절에 특정 조건에 맞는 데이터들을 찾아낼 때도 레코드의 처음부터 끝까지 다 읽어서 검색 조건과 맞는지 비교해야 한다.
<인덱스 스캔>
- 절차형 SQL을 활용하여 특정 기능을 수행하는 일종의 트랜잭션 언어이며 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업을 수행한다.
- 여러 프로그램에서 호출하여 사용 가능하고, 시스템의 일일 마감 작업, 일괄 작업 등에 주로 사용된다.
- 프로시저의 BODY는 BEGIN과 END 사이의 코드 작성 부분이며 하나 이상의 SQL 문이 있어야 한다.
- 프로시저 실행을 위해 EXECUTE, CALL, EXEC로 사용할 수 있다. ex) EXEC 프로시저명; 제거를 위해서는 DROP PROCEDURE를 사용한다.
- DECLARE : 프로시저의 명칭, 변수, 인수, 데이터 타입을 정의하는 선언부 (필수)
- BEGIN / END : 프로시저의 시작과 종료를 의미 (필수)
- CONTROL : 조건문 또는 반복문이 삽입, 순차적 처리
- SQL : DML, DCL이 삽입돼, 조회, 추가, 수정, 삭제 작업을 수행
- EXCEPTION : 구문 실행 중 예외 발생 시 처리 방법 정의
- TRANSACTION : 작업들을 DB에 적용할지 취소하리 결정하는 처리부
- 미리 정의된 기능을 통해 데이터를 좀 더 편리하게 조작할 수 있도록 도와줍니다.
- 사용자가 입력 값 X를 넣으면 정해 놓은 출력 값 Y가 나오는 개념이다.
- 함수를 이용하여 문자, 숫자, 날짜 값 등을 조작할 수 있으며, 각 데이터 타입(data type, 자료형)끼리 변환할 수도 있습니다(단일 행 함수 기능).
- 복수의 행을 조합하여 그룹당 하나의 결과로도 출력할 수 있습니다(그룹 함수 기능).
- 특정 테이블에 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
- 사용자가 직접 호출하는 것이 아니라, 데이터베이스에서 자동적으로 호출하는 것이 가장 큰 특징
- 테이블과 뷰 데이터베이스 작업을 대상으로 정의할 수 있으며, 전체 트랜잭션 작업에 대해 발생되는 트리거(Trigger)와 각행에 대해 발생되는 트리거(Trigger)가 있습니다.
- 데이터베이스에 의해 자동 호출되지만 결국 INSERT, UPDATE, DELETE 구문과 하나의 트랜잭션 안에서 일어나는 일련의 작업들이라 할 수 있습니다.
- 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것이다.
- 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.
- 테이블을 어떻게 분해되는지에 따라 정규화 단계가 달라진다.
- 정규화는 데이터 조회(select) 시에 조인(join)을 유발하기 때문에 CPU와 메모리를 많이 사용한다는 단점이 있다.
- 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
- 반 정규화는 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
1) 정규화에 충실하여 종속성, 활용성은 향상 되었지만 수행속도가 느려진 경우
2) 다량의 범위를 자주 처리해야하는 경우
3) 특정 범위의 데이터만 자주 처리하는 경우
4) 요약/집계 정보가 자주 요구되는 경우
1) 계산된 컬럼 추가 - 배치 프로그램으로 총판매액, 평균잔고, 계좌평가를 미리 계산하고 그 결과를 특정 칼럼에 추가한다.
2) 테이블 수직 분할 - 하나의 테이블의 두 개 이상의 테이블로 분할한다. 즉, 칼럼을 분할하여 새로운 테이블을 만드는 것이다.
3) 테이블 수평분할 - 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법이다.
- GRANT - 사용자에게 권한을 부여하는 명령어
- REVOKE - 사용자에게 권한을 삭제하는 명령어
- 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함.
- 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.
- CREATE - 테이블 등을 생성
- ALTER - 테이블을 수정
- DROP - 테이블을 삭제
- TRUNCATE - 테이블을 초기화
- SELECT - 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함
- COMMIT -
- ROLLBACK
- SAVEPOINT
- 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말함.