모든 업무 프로세스는 주체, 행위, 대상으로 집약된다
(주체는 인물주체와 사물주체로 세분된다)
Master Table(주체)
업무의 핵심 개체인, 주체에 대한 기본적인 정보를 담고 있다.
필드 수가 많아 1행 당 사이즈가 크다
History Table과 같은 Child Table이 부속되어 있다
(Mater Table의 변경 이력은 History Table에 저장된다)
가장 최신의 상태와 속성 정보를 유지, 관리한다
속성은 가변 속성과 불변 속성으로 분류할 수 있는데, 이러한 가변 속성을 관리하기 위한 테이블이 History Table이다.
Transactional Table(행위)
ex) 어떤 거래를 취소한다고 할 때, 해당 거래를 삭제하는 게 아니라 해당 거래가 취소되었다는 기록을 등록하는 것이다
History Table(대상)
Mater Table의 변경된 상태 속성 정보를 보관한다
구조에 따른 분류
Mater Table의 외부에 Mater Table과 동일한 구조를 가지고 있는 Outer History Table의 형태를 가질 수도 있고,
Master Table의 내부에 상위키(upper key) 칼럼을 포함시켜 내부순환(recursive) 구조를 가진 Inner History Table의 형태를 가질 수도 있으며,
Mater Table의 중요 상태정보만을 관리하는(즉, 일부 칼럼만 관리하는) Hot-Item History Table 구조로 구성될 수도 있다
데이터의 성격에 따른 분류
Line History Table
변경된 상태정보를 시작 시점 ~ 종료 시점의 구간으로 하는 형태
Point History Table
변경 시점을 기준으로 하는 형태
Code Table
Key, Value의 쌍으로 구성된 집합
타입스크립트의 변수화의 개념이 있는 듯...?
코드 | 코드명 |
---|---|
100 | 대한민국 |
200 | 미국 |
식별관계
어떤 테이블의 기본키가 다른 테이블의 외래키이자 기본키로 사용될 때, 이를 식별관계라 한다.
ex) 테이블 A, 테이블 B가 있을 때, 이 둘의 기본키를 외래키로 삼는 테이블 C가 있을 때 이 역시 식별관계이다.
이러한 식별 관계는 ERD에서 실선으로 표현하다
이런 식별 관계 하에서 참조되는 테이블을 강한 개체, 참조하는 테이블을 약한 개체라 한다.
비식별관계
어떤 테이블의 기본키가 다른 테이블의 외래키로 사용되었지만, 그 외래키를 기본키로 사용하지 않는 관계이다.
eX) 테이블 A, 테이블 B가 있을 때, 테이블 C가 이 둘의 기본키를 외래키로 삼았지만 별도의 기본키를 설정한 경우
(이 때의 별도의 기본키를 인조키라고 한다)
이러한 비식별 관계는 ERD에서 점선으로 표현한다
외래키로 참조되는 테이블의 기본키가 변경되는 경우도 발생할 수 있으므로 가능하면 인조키를 기본키로 사용하는 비식별관계가 권장된다
Synonym
테이블의 별칭을 짓는 역할
보통 다른 유저의 객체(테이블, 뷰, 프로시저?, 함수?, 패키지?, 시퀀스? 등)를 참조할 때 사용
Synonym을 사용하면 다른 유저의 객체를 사용할 때 유저의 이름과 객체의 실제이름을 사용하지 않기에 데이터베이스의 보안이 향상된다
(그런데 애초에 다른 계정에 있는 테이블을 갖다 쓸 일이 잘 없다고 한다)
CREATE (OR REPLACE) [PUBLIC] SYNONYM 별칭 FOR 유저이름.테이블이름;
-- PUBLIC은 모든 사용자에게 접근 권한 허용
-- PUBLIC을 선언해주지 않으면 기본적으로 PRIVATE으로 간주
-- 어떤 글에는 OR REPLACE가 있고, 어떤 글에는 없고 뭘까
DROP SYNONYM 별칭;
synonym은 GRANT문 정리할 때 보충!
Sequence
자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체
보통 PK에 중복값을 방지하기 위한 용도로 사용
CREATE SEQUENCE 시퀀스 별칭
INCREMENT BY 정수
-- 디폴트는 1
START WITH 기준값
-- 증가일 때의 디폴트는 MINVALUE, 감소일 때의 디폴트는 MAXVALUE
NOMINVALUE | MINVALUE 최소값
-- NOMINVALUE : 디폴트 값 설정, 증가일 때 1, 감소일 때 -1028(???)
-- MINVALUE : 최소값 설정, 기준값 이하이며 MAXVALUE 미만이어야 한다
NOMAXVALUE | MAXVALUE 최대값
-- NOMAXVALUE : 디폴트 값 설정, 감소일 때 1027(???), 증가일 때 -1(???)
-- MAXVALUE : 최대값 설정, 기준값 이상이며 MINVALUE 초과여야 한다
CYCLE | NOCYCLE
-- CYCLE : 최대값에 도달하면 최소값부터 다시 시작
-- NOCYCLE : 최대값 도달시 시퀀스 생성 중지
CACHE | NOCACHE
-- CACHE : 메모리에 시퀀스 값을 미리 할당(???)
-- NOCACHE : 메모리에 시퀀스 값을 할당하지 않음(???)
SELECT 시퀀스 별칭 FROM DUAL;
-- 해당 시퀀스 값 조회
SELECT * FROM USER_SEQUENCES;
-- 전체 시퀀스 조회
ALTER SEQUENCE 시퀀스 별칭
INCREMENT BY 정수
NOMINVALUE | MINVALUE 최소값
NOMAXVALUE | MAXVALUE 최대값
CYCLE | NOCYCLE
CACHE | NOCACHE
시퀀스는 DDL문이기에 ALTER를 사용하여 수정 가능
기준값을 수정 불가
증가일 경우, 현재 들어있는 값들보다 높은 최소값 설정 불가
감소일 경우, 현재 들어있는 값들보다 낮은 최대값 설정 불가
DROP SEQUENCE 시퀀스 별칭;