[데이터베이스] 팀별 미니프로젝트 _ 게시판 / 회원정보 ERD 만들기

    📑시퀀스

     : 여러 사용자에게 유일(UNIQUE)한 값을 생성해 주는 오라클 객체

    즉, 시퀀스를 사용하여 테이브르이 기본 키와 같이 순차적으로 증가하는 값을 가지는 컬럼 값을 자동으로 생성할 수 있음. 

    사용 예) CREATE SEQUENCE 시퀀스 명


    [START WITH n] : 시퀀스의 시작값을 n으로 지정(기본시작값은 1) 
    [INCREMENT BY n] : 시퀀스의 증가값을 n으로 지정(기본값은 1, 여기서 n은 0이 될 수 없음)  
    [MAXVALUE n | NOMAXVALUE] : 최대값 (NOMAX~무한대, MAX~1028 기본값)
    [MINVALUE n | NOMINVALUE] : 최소값 (기본값 1, NOMIN = 최소값 무한대로 지정 가능)
    [CYCKE | NOCYCLE] : 최대값까지 증가 후 MIN으로 돌아가는 옵션 ( 기본 NOC~)
    [CACHE | NOCACHE]; : 캐시 사용(NOC~ 기본값은 한번에 20개 캐시)

    --SEQUENCE 
    
    SELECT * FROM USER_SEQUENCES;
    
    CREATE SEQUENCE EX_SEQ
    INCREMENT BY 1 
    START WITH 50
    MINVALUE 1 
    MAXVALUE 99
    NOCYCLE
    NOCACHE;
    
    SELECT EX_SEQ.NEXTVAL
      FROM DUAL;
      
    SELECT EX_SEQ.CURRVAL
      FROM DUAL;
    
    SELECT* FROM DEPT;
    
    INSERT INTO DEPT VALUES (EX_SEQ.NEXTVAL, '기획팀', '서울강남구');
    
    CREATE SEQUENCE EX_TEST_SEQ
    INCREMENT BY 10
    START WITH 70
    MINVALUE 1
    MAXVALUE 90
    CYCLE
    NOCACHE;
    
    SELECT EX_TEST_SEQ.NEXTVAL
      FROM DUAL;
      
    DROP SEQUENCE EX_TEST_SEQ;
    
    --직원번호와 관련한 시퀀스 생성
    
    SELECT MAX (EMPNO) FROM EMP;
    
    CREATE SEQUENCE EX_EMPNO_SEQ
    INCREMENT BY 1
    START WITH 2004
    MINVALUE 1001
    MAXVALUE 9999
    NOCYCLE
    NOCACHE;
    
    SELECT MAX(EMPNO)+1 FROM EMP;
    --두가지 방법 ( MAX+1 / SEQUENCE )을 사용할 수 있다. 
    INSERT INTO EMP (EMPNO, ENAME, HIREDATE,DEPTNO) 
    VALUES ((SELECT MAX(EMPNO)+1 FROM EMP),'TEST1',SYSDATE,'20'); -- 이 경우 문제가 되는 것은 동시접속의 경우. 
    
    COMMIT;
    
    INSERT INTO EMP (EMPNO, ENAME, HIREDATE,DEPTNO) 
    VALUES(EX_EMPNO_SEQ.NEXTVAL,'TEST2',SYSDATE,'20');
    
    SELECT EX_EMPNO_SEQ.CURRVAL FROM DUAL;
    --SEQUENCE는 TABLE이랑 별도 객체이기 때문에. 실행에 실패했더라도 일단 COUNT 되고 넘어간다.

     

     

    팀별과제 (문제)

    1. 회원 테이블 만들기 

    회원(일반 사용자) 

    테이블명은 T_USER

    회원가입시 필요한 컬럼을 정의하고, 회원 상태(사용(Y), 정지(N))를 관리할 수 있도록 정의 

    각 컬럼에 대한 COMMENT를 적용하여 컬럼의 의미를 전달할 수 있도록 함. 

    사용자 ID를 PK로 정의함 (단, PK 정의는 TABLE 생성 후에) 

    2. 게시판 테이블(댓글 관련 자율) 

    테이블명은 T_BOARD로, 게시판 글 번호는 NUMBER(12)로 정하고, 시퀀스는 SEQ_BOARD로 정의함. 

    각 컬럼에 대한 COMMENT 적용하고, 컬럼의 의미를 전달할 수 있도록 함. 

    게시판 글 번호를 PK로 정의함. (단, 테이블 생성 후 PK 생성) 

    게시판 조회 갯수를 관리. 크기는 게시판 글 번호와 동일하게 적용함. 

    게시판 테이블은 글 제목, 글 내용(TEXTAREA) , 조회수 등으로 이루어져 있음.   

    CREATE TABLE T_USER (
        U_UNAME VARCHAR2(20), 
        U_EMAIL VARCHAR(20),
        U_PHONE NUMBER(12),
        U_BIRTH CHAR(8),
        U_GENDER CHAR(1),
        U_STATE CHAR(1)
            CONSTRAINT T_USER_U_STATE
            CHECK(U_STATE IN ('Y', 'N')),
        U_ID VARCHAR(10) NOT NULL,
        U_PASSWORD VARCHAR(12) NOT NULL,
        U_DATE DATE
    
    );
    
    COMMENT ON COLUMN T_USER.U_UNAME IS '이름';
    COMMENT ON COLUMN T_USER.U_ID IS '아이디';
    COMMENT ON COLUMN T_USER.U_PASSWORD IS '비밀번호';
    COMMENT ON COLUMN T_USER.U_EMAIL IS '이메일';
    COMMENT ON COLUMN T_USER.U_PHONE IS '전화번호';
    COMMENT ON COLUMN T_USER.U_BIRTH IS '생년월일';
    COMMENT ON COLUMN T_USER.U_GENDER IS '성별';
    COMMENT ON COLUMN T_USER.U_STATE IS '회원 상태';
    
    --PK 지정
    ALTER TABLE T_USER
      ADD CONSTRAINT PK_U_ID PRIMARY KEY (U_ID);
    
    --게시판 테이블 
    CREATE TABLE T_BOARD 
    (
       BOARD_N NUMBER(12), -- 게시판 글 번호 (PK)
       TITLE  VARCHAR2(20), -- 글 제목
       TEXTAREA CLOB, -- 글 내용
       U_ID VARCHAR2(10), -- 작성자 아이디 (FK)
       VIEW_N NUMBER(12), -- 조회수 
       WRITE_T DATE -- 글 작성 시간
    );
    
    COMMENT ON COLUMN T_BOARD.BOarD_N IS '게시판 글 번호';
    COMMENT ON COLUMN T_BOARD.TITLE IS '글 제목';
    COMMENT ON COLUMN T_BOARD.TEXTAREA IS '글 내용';
    COMMENT ON COLUMN T_BOARD.U_ID IS '작성자 아이디';
    COMMENT ON COLUMN T_BOARD.VIEW_N IS '조회수'; 
    COMMENT ON COLUMN T_BOARD.WRITE_T IS '글 작성 시간';
    
    --PK 지정
    ALTER TABLE T_BOARD 
        ADD CONSTRAINT PK_BOARD_N PRIMARY KEY (BOARD_N);
    --FK 지정   
    ALTER TABLE T_BOARD
    ADD CONSTRAINTS FK_U_ID FOREIGN KEY (U_ID) 
    REFERENCES T_USER(U_ID); 
    
    
    --시퀀스 ( 글번호 )
    CREATE SEQUENCE SEQ_BOARD
    INCREMENT BY 1
    START WITH 1
    MINVALUE 1
    MAXVALUE 999999999999
    NOCYCLE
    NOCACHE;
    
    
    --글번호 INSERT 문
    INSERT INTO T_BOARD (BOARD_N) 
    VALUES(EX_EMPNO_SEQ.NEXTVAL);
    
    DROP TABLE T_BOARD;
    DROP TABLE T_USER;
    
    
    --댓글 TABLE 
    CREATE TABLE T_COMMENT (
        COMMENT_N NUMBER(12),   --댓글번호
        T_TEXTAREA CLOB,        --글 내용
        T_DATE DATE DEFAULT SYSDATE, --작성일시
        BOARD_N NUMBER(12),      --게시판 글 번호(FK)
        U_ID VARCHAR2(10) --댓글작성자
    );
    --PK
    ALTER TABLE T_COMMENT
      ADD CONSTRAINT PK_COMMENT_N PRIMARY KEY (COMMENT_N);

     

    오류: 

    -생년월일의 경우 NUMBER 보다 CHAR(8) 타입이 좋다. 

    -첨부파일은 게시판 테이블에 넣기보다는 따로 빼야 한다. (파일명, 파일 확장자 식별 등)

    -불리언 타입의 경우 CHAR(1) 로 Y / N 처리

    -시퀀스 만들 때 조회수는 시퀀스가 필요 없음. (그냥 글을 SELECT 할때 업데이트 쳐줌 CNT++)

     

     

    댓글