
DBMS는 사용자에 대한 정보나 어떤 테이블이 필요한지 등 사용자 서비스에 대한 테이블을 저장하고 있어야 한다.
그런 내용은 어떤 공간에 이런 데이터를 모아 놓고 있는데 그 공간을 DATA DICTIONARY라고 한다.
그러나 이 DATA DTCTIONARY를 뒤질 일이 없다.
왜냐하면 클라이언트 프로그램에서 이 DATA DITCTIONRY를 보기 편하게 만들어 놓았기 때문이다.
이 DICTIONARY는 VIEW형태로 저장된다. 이는 TABLE에 대한 직접적인 접근을 할 수 없다는 것으 의미한다.

두 개의 테이블을 참조해서 VIEW를 만드는 것은 이해되지만 굳이 한개의 테이블의 참조하는데 VIEW를 사용해야할까? 사실 VIEW는 간편식에 해당되지만 보안상의 이유로 사용하기도 한다.
✔️오라클이 제공하는 DATA DICTIONARY에 대한 내용 조회하기

👆 SELECT * FROM DICT;

👆 SELECT FROM USER_TABLE;

👆 SELECT FROM USER_TAB_COLUMNS;
도메인 제약조건 :COLUMN애다가 유효한 값을 입력하는데 그 유효한 값의 형식에 대한 기본적인 가이드
예를 들어보자
만약에 ID가 중복되어 들어가면 ID '333'회원의 정보를 삭제할 떼 여러 유저의 데이터가 함께 삭제된다.
또는 HIT라는 조회수 칼럼에 -7이라는 유효하지 않은 값들이 들어갈 수 있기 때문에
유리는 도메인 제약조건을 건다.

이렇게 제약을 거는 방법은 크게 3가지 있다.
1. 필수로 입력하게 하는 NOT NULL
2. NOT NULL이지만 사용자가 입력하는 것이 아닌 내가 알아서 설정해 놓은 값 = 기본값 DEFAULT
EX) 조회수, 등록일, 관리자가 부여하는 비번
3. 유효한 범위를 잘 체크할 수 있도록 하는 체그범위 CHECK
먼저 NOT NULL, DEFAULT에 대해서 알아보자.
-ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) DEFAULT '11';
-INSERT INTO TEST('ID','PHONE') VALUES('NEWLEC','010-2222-2222');

위와 같이 직접 문장을 통해서 하지 않고 테이블 편집을 통해서도 가능하며

기본값에 함수도 넣을 수 있다.
앞서 도메인 제약조건을 거는 3가지 방법 중 2가지 방법인 NOT NULL, DEFAULT에 대해서 배웠다. 이번 시간에는 3번째 방법인 체크 제약조건에 대해서 배운다.
체크 제약조건 : 값의 범위/형식을 확인해서 알맞지 않으면 값이 들어가지 않도록 제약 오류를 내는 것
방법은 총 3가지
1. 처음부터 건다
테이블 생성이 아닌 ALTER TABLE 테이블이름 ADD CONSTRAINT 제약조건이름 CHECK(칼럼명 LIKE '010-%-____');을 통해서 건다.

테이블 편집에서 제약조건 추가하기

앞 서 배웠던 체크 제약조건은 더 정밀하게 다루고자할 때 한계가 있다.
-CREATE TABLE TEST
(
ID VARCHAR2(50) NULL,
PHONE VARCHAR2(200) CHECK(PHONE LIKE '010-%-____') NOT NULL,
VARCHAR2(500) NULL
)
이 경우는 PHONE의 레코드에 010-aaaa-bbbb가 들어갈 수도 있다.
따라서 우리는 정규식을 이용하자
2가지 방법을 정규식을 넣을 수 있다.
1. 테이블 편집> 제약조건> 검사조건 : REGEXP_LIKE(PHONE, '^01[01]-\d{3,4}-\d{4}$')
정규식에 대한 설명은 생략, 앞에서 배웠다.
도메인 제약조건 : 도메인 범위 내 즉 칼럼들이 올바른 값을 가지도록 거는 조건
테이블 전체로 범위를 확대했을 때 올바른 테이터가 들어갔냐에 대한 문제는 도메인 제약조건으로 판단할 수 없기 때문에 이를 해결할 수 있는 방법에 대해서 알아보자.
중복된 레코드가 없도록 제한한다. 즉 각 레코드들을 식별할 수 있는 뭔가가 있어야 한다. 우리는 이런 칼럼을 식별 칼럼, PRIMARY KEY라고 한다.
+) 추가로 식별 칼럼 이외에도 중복되어서는 안되는 칼럼 하지만 NULL이 들어올 수 있는 칼럼을 UNIQUE KEY라고 부른다.


시퀀스 = 일련번호
공지사항에서 이 ID라는 값을 입력할 때 NUMBER로 ID를 넣을 수도 있다.
중복 X , 계속 증가
<< 그렇다면 새로운 레코드가 들어올 때 일련 번호는 무엇으로 할까?>>
1. 기존꺼 들어가서 확인 -> 너무 귀찮음
2. 따라서 바로바로 확인하도록 하자 -> 시퀀스를 이용하자
1단계

2단계

C : 시작하는 값 설정
D : 얼마씩 증가시킬 것인지 설정
F : 얼마까지 증가시킬 것인지
캐시 : 미리 값을 설정해놓을 공간 , 만약 20이라면 20개의 일련번호를 미리 만들어 놓는다
주기 : 최대값으로 간다음 다시 초기화시켜 처음부터 다시 시작할 것인지 설정
혹은
저기서 DDL을 눌러서 직접 생성

3단계

4단계
INSERT INTO NOTICE(ID,TITLE, WRITER_ID)
VALUES (NOTICE_ID.NEXTVAL,’시퀀스 예제’,’newlec’);
하지만 매번 저렇게 ID에 NOTICE_ID.NEXTVAL이렇게 넣기가 귀찮다.
따라서
INSERT INTO NOTICE(TITLE, WRITER_ID)
VALUES(시퀀스 예제’,’newlec’);
이렇게만 써도 알아서 자동으로 만들어준다.
끝 완강이다.
하지만 부족한 부분이 많기 때문에 '오라클 SQL과 PL/SQL' 책을 통해서
더 깊이 공부해볼 생각이다.
다시 SERVLET/JSP 나머지 공부하자