[DB] Data Integrity(데이터 무결성)
● Data Integrity(데이터 무결성) 1) 데이터 무결성을 지키기 위한 종류와 방법 - 실체(Entity) 무결성 a. 중복된 데이터 방지 b. Primary key, Unique - 영역(Domain) 무결성 a. 범위 -> 내가 정해놓은 범위의 데이터만 사용될 수 있게 방지 b. Check - 참조(Refereance) 무결성 a. 참조 -> 참조 당하는 테이블을(부모테이블) , 참조 하려는 테이블을(자식테이블) 데이터 값이 맞는지 다른테이블에 확인할 때 참조한다. b. Foreign Key Constraint(제약) : Primary key, Unique, Check, Foreign key -> 잘못된 데이터가 들어올때 제약을 걸어주는 역할을 한다. 2) 컬럼의 속성 - NN(Not Null) 속성 : Null값을 거부할수있는 속성을 가짐 a. Primary key = not null + unique가 합쳐진 기능 b. not null - ND(Not Duplicate) 속성 : 중복된 값을 거부할수 있는 속성을 가짐 a. Primary key b. Unique - NC(No change) 속성 : 수정하는 것을 거부할수 있는 속성을 가짐 a. foreign key |
▶ 실체(Entity) 무결성 TEST
테이블 작성 CREATE TABLE tblExam( id number, name varchar2(10) ); 데이터 넣기 INSERT INTO tblExam(name) VALUES('홍길동'); INSERT INTO tblExam(id, name) VALUES(1, '홍길동'); □ PRIMARY KEY PRIMARY KEY의 조건 1) 절대로 중복이 될수 없는 필드에 줄수 있다. ( 이번 테이블에서는 ID에게 주어야한다.) 2) 처음에 테이블을 만들때 적용, 수정할때 적용 할수 있다. 3) 여러 개의 필드를 묶어서 설정 가능 (1) 테이블 만든 후 PRIMARY KEY 수정해서 적용하는 방법 ALTER TABLE tblExam ADD CONSTRAINT pk_id PRIMARY KEY(id); -> 이대로 적용하면 null 값을 포함하고 있다며 error가 난다. 그러므로 아래의 명령어로 데이터를 지워준 후 다시 PRIMARY KEY적용해준다. DELETE FROM tblExam; -> PRIMARY KEY가 적용되어 Null값을 넣을수 없게 되었다. (2) 테이블 만들기 전에 PRIMARY KEY값 넣는 방법 CREATE TABLE tblExam( id number primary key, name varchar2(10) ); (3) PRIMARY KEY에 대해 구분할수 있게 이름을 붙여서 테이블 생성하는 방법 1) 첫번째 유형 CREATE TABLE tblexam( id number CONSTRAINT pk_id primary key, name varchar2(10) ); 유저의 제약 정보를 확인하는 명령어 SELECT constraint_name, table_name FROM USER_CONSTRAINTS; 2) 두번째 유형 - 여러개 필드를 하나로 묶을 수 있는 방법 CREATE TABLE tblexam( id number , name varchar2(10), CONSTRAINT pk_id primary key(id, name) ); SELECT constraint_name, table_name FROM USER_CONSTRAINTS; (4) PRIMARY KEY를 삭제해야 하는 상황에서 삭제하는 방법 - Data를 테스트 할때 제약이 걸려있을 경우 확이 이 힘들기에 PK를 삭제해줄때 사용 ALTER TABLE tblExam DROP CONSTRAINT pk_id; SELECT constraint_name, table_name FROM USER_CONSTRAINTS; □ UNIQUE 1) 중복된 데이터만 막아준다 (ND 속성) 2) 하나의 테이블에 여러 개 사용 가능 CREATE TABLE tblexam( id number, name varchar(10), CONSTRAINT uk_id UNIQUE(id) ); INSERT INTO tblExam VALUES(1, '홍길동'); INSERT INTO tblExam VALUES(1, '홍길동'); -> 중복된 데이터를 넣었을 때는 오류를 반환한다. INSERT INTO tblExam(name) VALUES('홍길동'); -> Null은 막아주지 않는다 |
▶ 영역(Domain) 무결성 TEST
□ Check CREATE TABLE tblexam( id number, name varchar2(10), city varchar2(10), CONSTRAINT ck_city CHECK (city in ('서울','인천','경기','수원')) ); INSERT INTO tblexam VALUES(1, '홍', '서울'); INSERT INTO tblexam VALUES(2, '임', '제주'); - 필드 추가 (age number) ALTER TABLE tblexam ADD age number; - 제약 추가(나이를 20~50세까지만 입력 받을 수 있게) ALTER TABLE tblexam ADD CONSTRAINT ch_age CHECK(age>=20 and age<=50); INSERT INTO tblexam(id, name, city, age) VALUES(3, '이', '경기', 25); INSERT INTO tblexam(id, name, city, age) VALUES(4, '김', '경기', 55); |
▶ 참조(Refereance) 무결성 TEST
Foreign Key 1) 참조 당하는(부모) 테이블이 PK 또는 UNIQUE를 설정해 줘야 참조할수 있다. CREATE TABLE tbldept( deptno char(3), dname varchar2(10) ); INSERT INTO tbldept VALUES('100', '영업부'); INSERT INTO tbldept VALUES('101', '마케팅부'); CREATE TABLE tblemp( empno number, ename varchar2(10), hiredate date, deptno char(3) ); ALTER TABLE tbldept ADD CONSTRAINT pk_deptno PRIMARY KEY(deptno); ALTER TABLE tblemp ADD CONSTRAINT fk_deptno FOREIGN KEY(deptno) REFERENCES tbldept(deptno); INSERT INTO tblemp VALUES(1, '홍', sysdate, '103'); -> 참조하고 있는 tbldept 테이블에 부서번호 103번이 없기에 에러나고 있다 INSERT INTO tblemp VALUES(1, '홍', sysdate, '100'); -> 참조하고 있는 tbldept 테이블에 부서번호 100번이 있기에 행이 만들어진다. UPDATE tbldept SET deptno=105 WHERE deptno=100; -> 자식 테이블을 참조하고 있기 때문에 변경할 수 없다. DROP TABLE tbldept; 테이블이나 데이터를 삭제하려면 1) 참조키를 지운다. 2) CASECADE를 이용해서 지운다. 3) 자식 테이블을 지운다. |
▶ SEQUENCE TEST
□ Sequence CREATE SEQUENCE seq_num; INSERT INTO tblExam VALUES(seq_num.nextVal, '홍길동'); INSERT INTO tblExam VALUES(seq_num.nextVal, '홍길동'); INSERT INTO tblExam VALUES(seq_num.nextVal, '홍길동'); INSERT INTO tblExam VALUES(seq_num.nextVal, '홍길동'); INSERT INTO tblExam VALUES(seq_num.nextVal, '홍길동'); -> 데이터를 넣고 select로 조회하면 시퀀스 생성 완료 DROP Sequence seq_num; 2씩 증가하는데 100부터 시작 CREATE SEQUENCE seq_num INCREMENT BY 2 START WITH 100; |
▶ Default, 필드관리 TEST
□ Default CREATE TABLE tblexam( id number default 0, name varchar(10) default '무명씨' ); INSERT INTO tblExam(name) VALUES('홍길동'); INSERT INTO tblExam(id) VALUES(1); □ 필드 관리 명령어 Null값을 수정하는 방법 ALTER TABLE tblExam ADD age number not null; 필드를 수정하는 방법 ALTER TABLE tblExam MODIFY name varchar2(20) not null; 필드를 삭제하는 방법 ALTER TABLE tblExam DROP COLUMN age; |