Leonardo Go

오라클 강의자료 2011.09.21 (쌍용교육센터) 본문

Database/Oracle

오라클 강의자료 2011.09.21 (쌍용교육센터)

Leonardo Go 2011. 9. 21. 15:51


--2011.09.21
   제약조건
      1. 테이블에 부적절한 자료가 입력되는 것을 방지
          (각 필드마다 여러 쿠칙을 적용)
      2. 데이터 베이스 내에 데이터의 정확성을 유지
          사용자가 원치않는 데이터를 저장, 수정, 삭제할시에 방지하는 것
      3. 컬럼단위, 테이블 단위
          차이점 : 컬럼+제약조건(동시에 설정) - 컬럼단위
                         id varchar2(10) PRIMARY KEY
                       컬럼을 먼저 생성하고 나중에 제약조건을 설정하는 방식 - 테이블 단위
      4. 제약조건의 종류
          NOT NULL   : 해당 컬럼의 값으로 NULL을 허용하지 않는다.(nn)
          UNIQUE   : 테이블 내에서 해당 컬럼값은 항상 유일한 값을 가진다.(uq)
          PRIMARY KEY : 테이블에서 반드시 존재한다.(NOT NULL+UNIQUE) (pk)
          FOREIGN KEY : 해당 컬럼의 닶이 타 컬럼의 값을 참조해야 한다.(fk)
                                 참조되는 컬럼에 없는 값을 입력이 불가능하다.
                                 CHECK   : 값의 범위를 지정 (ck)

                  emp    dept
                  empno   : PRIMARY KEY  deptno : PRIMARY KEY
                  ename   : NOT NULL  dname  : CHECK
                  job     : CHECK    loc    : CHECK
                  mgr    
                  hiredate
                  sal
                  comm
                  deptno  : FOREIGN KEY
       5. 형식
          1) 이름 부여 (권고) : 테이블명_필드명_제약조건
              emp_empno_pk
              emp_deptno_fk
              emp_ename_nn
              emp_job_ck

--컬럼 단위 제약조건
        CREATE TABLE mydept1(deptno NUMBER(2) PRIMARY KEY,
                                                   dname VARCHAR2(15) CHECK(dname IN('영업','개발','기획')), 
                                                   loc VARCHAR2(15) CHECK(loc IN('서울','경기','대전')));
--테이블 단위 제약조건
CREATE TABLE mydept2(deptno NUMBER(2)
       CONSTRAINT mydept2_deptno_pk PRIMARY KEY,
       dname VARCHAR2(15)
       CONSTRAINT mydept2_dname_ck CHECK(dname IN('영업','개발','기획')),
       loc VARCHAR2(15)
       CONSTRAINT mydept2_loc_ck CHECK(loc IN('서울','경기','대전')));

commit;
SELECT table_name, constraint_type, constraint_name, search_condition;
FROM user_constraints WHERE table_name='mydept2';
SELECT table_name, column_name, constraint_name FROM user_cons_columns;

   테이블 제작

   *******게시판
    게시물번호 : PRIMARY KEY
    이름 : NOT NULL
    이메일
    제목 : NOT NULL
    내용 : NUT NULL
    비번 : NOT NULL
    조회수 --자동
    작성일 --자동  sysdate
    그룹번호 --자동 
    그룹출력순서--자동
    그룹간격 --자동
    루트번호(삭제)
    깊이(삭제)
   
   *******댓글
    댓글번호 : PRIMARY KEY
    게시물번호  : FOREIGN KEY
    이름 : NOT NULL
    내용 : NOT NULL
    작성일 --자동

   1. 기능
    목록출력(페이지 나누기)
    내용보기
    글쓰기
    수정하기 - 숙제
    답변하기(댓글달기)
    삭제하기
    찾기
   

DROP TABLE reply;
DROP TABLE board;

CREATE TABLE board(no NUMBER
   CONSTRAINT board_no_pk PRIMARY KEY,
   name VARCHAR2(128)
   CONSTRAINT board_name_nn NOT NULL,
   email VARCHAR2(50),
   subject VARCHAR2(500)
   CONSTRAINT board_subject_nn NOT NULL,
   content VARCHAR2(4000)
   CONSTRAINT board_content_nn NOT NULL,
   pwd VARCHAR2(10)
   CONSTRAINT board_pwd_nn NOT NULL,
   writeday DATE,
   readenum NUMBER,
   ref NUMBER,
   step NUMBER,
   jump NUMBER,
   root NUMBER,
   depth NUMBER);

CREATE TABLE reply(no NUMBER
   CONSTRAINT reply_no_pk PRIMARY KEY,
   boardno NUMBER
   CONSTRAINT reply_boardno_fk REFERENCES board(no),
   name VARCHAR2(128)
   CONSTRAINT reply_name_nn NOT NULL,
   content VARCHAR2(500)
   CONSTRAINT reply_content_nn NOT NULL,
   writeday DATE);

DROP SEQUENCE board_no_seq;
CREATE SEQUENCE board_no_seq START WITH 1 INCREMENT BY 1;

INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,0,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,1,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,2,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,3,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,4,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,5,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,6,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,7,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,8,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,9,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,10,0,0,0,0);

COMMIT;