OBJECT 실습 - SEQUENCE 이용

Liberte Koo·2022년 12월 27일
0

Database

목록 보기
10/12

/문제/

계정 생성 : libertekoo
권한 부여 : connect,resource

테이블 2개 생성
회원테이블(MEMBER), 게시판테이블(BOARD)

<회원테이블>
MEMBER_NO(NUMBER) -- 회원 고유 순번 (자동 증가) PRIMARY KEY
MEMBER_USERID (VARCHAR2(20)) -- 회원 아이디 UNIQUE, NOT NULL
MEMBER_USERPWD (CHAR(20)) -- 회원 비밀번호 NOT NULL
MEMBER_NICKNAME (VARCHAR2(20)) -- 회원 닉네임 UNIQUE, NOT NULL
MEMBER_GENDER (VARCHAR2(3)) -- 회원 성별('남' 혹은 '여') NOT NULL
MEMBER_EMAIL (VARCHAR2(30)) -- 회원 이메일 NOT NULL

-> 회원 고유 번호는 1000번 부터 시작하여 1씩 증가 해야함
-> MAX 번호는 1000000 번 까지
-> 성별은 '남' 또는 '여' 만 데이터 삽입이 가능 해야함

<게시판 테이블>
BOARD_NO (NUMBER) -- 글 번호(자동 증가) PRIMARY KEY
BOARD_TITLE (VARCHAR2(20)) -- 글 제목 NOT NULL
BOARD_CONTENT (VARCHAR2(200)) -- 글 내용 NOT NULL
BOARD_WRITEDATE (DATE) -- 글 작성시간 NOT NULL
BOARD_NICKNAME (VARCHAR2(20)) -- 글 작성자(닉네임) NOT NULL 및 FOREIGN KEY

-> 글 번호는 1번부터 시작하여 1씩 증가 해야함
-> MAX 번호는 500000번 까지
-> BOARD_NICKNAME은 MEMBER 테이블의 회원 닉네임을 사용하여 외래키로 지정
(MEMBER 테이블에 존재하지 않는 사용자가 글을 작성할 순 없음)

<추가적인 OBJECT 생성하기>
1. 위에 사항을 확인하고 필요한 SEQUENCE 객체 만들기
2. 회원번호 , 회원닉네임, 회원 이메일, 회원 작성글 제목 을 볼 수 있는 VIEW 만들기
3. MEMBER와 BOARD 테이블을 'M' 과 'B' 로도 검색 할 수 있게 만들기
ex) SELECT * FROM M; -- MEMBER 테이블 정보가 보여야 함

/문제풀이 /

관리자 화면(admin)

CREATE USER libertekoo IDENTIFIED BY 1111;
GRANT CONNECT, RESOURCE TO libertekoo;
GRANT CREATE VIEW TO libertekoo;
GRANT CREATE SYNONYM TO libertekoo;
GRANT CREATE SYNONYM TO M;
GRANT CREATE SYNONYM TO B;

사용자화면(libertekoo/user)

CREATE SEQUENCE MEMBER_SEQ
START WITH 1000
INCREMENT BY 1
MAXVALUE 1000000
NOCYCLE;

CREATE TABLE MEMBER(
MEMBER_NO NUMBER PRIMARY KEY,
MEMBER_USERID VARCHAR2(20) UNIQUE NOT NULL,
MEMBER_USERPWD CHAR(20) NOT NULL,
MEMBER_NICKNAME VARCHAR2(20) UNIQUE NOT NULL,
MEMBER_GENDER VARCHAR2(3) CHECK(MEMBER_GENDER IN('남','여')) NOT NULL,
MEMBER_EMAIL VARCHAR2(30) NOT NULL
);
SELECT * FROM MEMBER;
INSERT INTO MEMBER VALUES(MEMBER_SEQ.NEXTVAL,'USER01','1111','유저1','여','aaa@gmail.com');
INSERT INTO MEMBER VALUES(MEMBER_SEQ.NEXTVAL,'USER02','2222','유저2','남','bbb@gmail.com');
INSERT INTO MEMBER VALUES(MEMBER_SEQ.NEXTVAL,'USER03','3333','유저3','여','ccc@gmail.com');

CREATE SEQUENCE BOARD_SEQ
START WITH 1
INCREMENT BY 1
MAXVALUE 500000
NOCYCLE;

SELECT BOARD_SEQ.NEXTVAL FROM DUAL;

CREATE TABLE BOARD(
BOARD_NO NUMBER PRIMARY KEY,
BOARD_TITLE VARCHAR2(20) NOT NULL,
BOARD_CONTENT VARCHAR2(200) NOT NULL,
BOARD_WRITEDATE DATE NOT NULL,
BOARD_NICKNAME VARCHAR2(20) NOT NULL REFERENCES MEMBER(MEMBER_NICKNAME)
);
SELECT * FROM BOARD;
INSERT INTO BOARD VALUES(BOARD_SEQ.NEXTVAL,'board01','111',SYSDATE,'유저1');
INSERT INTO BOARD VALUES(BOARD_SEQ.NEXTVAL,'board02','222',SYSDATE,'유저2');
INSERT INTO BOARD VALUES(BOARD_SEQ.NEXTVAL,'board03','333',SYSDATE,'유저3');

CREATE VIEW MEM_VIEW
AS
SELECT MEMBER_NO, MEMBER_NICKNAME, MEMBER_EMAIL, BOARD_TITLE
FROM MEMBER
JOIN BOARD ON(MEMBER_NICKNAME=BOARD_NICKNAME);

SELECT * FROM MEM_VIEW;

CREATE SYNONYM M FOR MEMBER;
CREATE SYNONYM B FOR BOARD;

SELECT * FROM M;

profile
A previous generalist who strives to become a genuine Specialist.

0개의 댓글