테이블 외래키 설정

개인프로젝트 2019. 7. 17. 16:23

-각 테이블별 외래키(FK) 설정-


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
-- MEMBER_REPLY 테이블, MEMBER_BOARD 테이블, MEMBER_BEST_BOARD 테이블을 다시 생성 기본키만 처음에 추가하고 
-- 외래키는 테이블 생성후 테이블 내용을 변경해서 삽입할 예정
 
--베스트 게시물 테이블 (속성 2개짜리도 삭제)
drop table BEST_BOARD cascade constraints;
 
 
--어제는 회원게시판(일반게시물)에 있는 추천수가 회원게시판(베스트게시물)과 연동된다고 생각해서 테이블을 정규화시켜서
--나누려고 생각했었는데, 확인해보니 게시물이 복사될때 추천수는 복사되지 않고 별개로 된다는 것을 확인해서 
--추가할 부분을 추가하고, PK와 FK가 꼬였기 때문에 다시 테이블을 생성하였다.
 
create table MEMBER_REPLY(
rno number(10not null primary key,
user_id varchar(20not null,
member_bno number(10not null,
r_content varchar(200not null,
reg_date date default sysdate,
join_date date default sysdate,
recommend number(10not null
);
 
 
CREATE TABLE MEMBER_BOARD(
member_bno number(20not null primary key,
user_id varchar(20not null,
reg_date date default sysdate,
viewcnt number(20not null,
title varchar(20not null,
rcnt number(10not null,
content varchar(400not null,
recommend number(10not null
);
 
 
CREATE TABLE MEMBER_BEST_BOARD(
best_bno NUMBER(10NOT NULL PRIMARY KEY,
member_bno NUMBER(10NOT NULL,
user_id VARCHAR(20NOT NULL,
reg_date DATE default sysdate,
viewcnt NUMBER(10NOT NULL,
title VARCHAR(20NOT NULL,
rcnt NUMBER(10NOT NULL,
content VARCHAR(400NOT NULL,
recommend number(10NOT NULL
);
 
 
--각 테이블별 외래키 생성
 
--댓글 테이블의 ID와 게시글번호를 외래키로 설정
ALTER TABLE MEMBER_REPLY
ADD CONSTRAINT user_id FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id);
 
ALTER TABLE MEMBER_REPLY
ADD CONSTRAINT member_bno FOREIGN KEY (member_bno)
REFERENCES MEMBER_BOARD(member_bno);
 
 
--회원게시판(일반게시물) 테이블의 ID를 외래키로 설정
ALTER TABLE MEMBER_BOARD
ADD CONSTRAINT user_id2 FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id);
 
 
--회원게시판(베스트게시물) 테이블의 ID를 외래키로 설정해서 MEMBER 테이블을 참조하도록 설정
ALTER TABLE MEMBER_BEST_BOARD
ADD CONSTRAINT user_id3 FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id);
 
 
--회원게시판(베스트게시물) 테이블의 member_bno를 외래키로 설정해서 MEMBER_BOARD 테이블을 참조하도록 설정
ALTER TABLE MEMBER_BEST_BOARD
ADD CONSTRAINT member_bno2 FOREIGN KEY (member_bno)
REFERENCES MEMBER_BOARD(member_bno);
 
 
--관리자 테이블, 공지게시판 테이블, 공지게시판 댓글 테이블의 FK 제약조건을 설정
ALTER TABLE ADMIN_BOARD
ADD CONSTRAINT admin_id FOREIGN KEY (admin_id)
REFERENCES ADMIN(admin_id);
 
 
--데이터타입이 다르므로 실행 오류가 발생한다. 따라서 데이터타입을 바꿔주어야 한다.
ALTER TABLE ADMIN_BOARD_REPLY
ADD CONSTRAINT bno FOREIGN KEY (bno)
REFERENCES ADMIN_BOARD(bno);
 
 
--댓글 게시판 BNO의 타입을 변경 (참조할 컬럼의 데이터타입과 일치하도록..)
ALTER TABLE ADMIN_BOARD_REPLY modify(bno number(10));
 
 
--공지게시판의 댓글 테이블에 ID를 회원 테이블의 ID를 참조하도록 외래키로 설정
ALTER TABLE ADMIN_BOARD_REPLY
ADD CONSTRAINT user_id4 FOREIGN KEY (user_id)
REFERENCES MEMBER(user_id);
 
cs


: