코딩 노트
데이터베이스 외래키 본문
외래키는 references 키워드를 사용한다.
-- 몬스터와 속성(1대 다 관계)구현
CREATE TABLE pocketmon(
NO NUMBER PRIMARY KEY,
name varchar2(30) NOT null
);
CREATE TABLE pocketmon_type(
TYPE varchar2(9) NOT NULL,
NO REFERENCES pocketmon(no) --외래키(FK, Foreign Key)
);
INSERT INTO pocketmon(NO, name) VALUES(1, '이상해씨');
INSERT INTO pocketmon_type(TYPE, no) VALUES('풀',1);
INSERT INTO pocketmon_type(TYPE, no) VALUES('독',1);
COMMIT;
SELECT * FROM pocketmon WHERE NO = 1;
SELECT * FROM pocketmon_type WHERE NO = 1;
CREATE TABLE quiz(
quiz_no NUMBER PRIMARY key,
quiz_content varchar(300) NOT null
);
CREATE TABLE choice(
choice_no NUMBER PRIMARY key,
choice_content varchar2(300) NOT null,
choice_correct char(1) NOT NULL,
CHECK(UPPER(choice_correct) IN ('Y', 'N')),
-- 외래키 설정시 부여 가능한 옵션
-- 아무것도 안붙이면 하위요소를 지워야 상위요소가 삭제됨
-- on delete cascade를 붙이면 상위요소를 지우면 하위요소가 자동삭제
-- on delete set null을 붙이면 상위요소를 지우면 외래키가 null로 바뀜
-- 결제와 관련된 것은 외래키를 쓰면 안 된다.
quiz_no REFERENCES quiz(quiz_no) ON DELETE CASCADE --문제를 지우면 보기가 같이 날라감
);
INSERT INTO quiz(quiz_no, quiz_content) VALUES(1,'한국의 수도는?');
INSERT INTO choice(choice_no, choice_content, choice_correct, quiz_no) VALUES(
1,'서울','Y',1);
INSERT INTO choice(choice_no, choice_content, choice_correct, quiz_no) VALUES(
2,'평양','N',1);
INSERT INTO choice(choice_no, choice_content, choice_correct, quiz_no) VALUES(
3,'홍콩','N',1);
INSERT INTO choice(choice_no, choice_content, choice_correct, quiz_no) VALUES(
4,'도쿄','N',1);
COMMIT;
SELECT * FROM quiz WHERE quiz_no = 1;
SELECT * FROM choice WHERE quiz_no = 1;
제 1 정규화 도메인의 원자성을 지켜라
제 2 정규화 부분 함수 종속을 제거하라(복합키)
제 3 정규화 이행함수 종속 제거(기본키를 제외한 식별자가 있으면 안 됨)
'Database' 카테고리의 다른 글
데이터베이스 - 수정 (0) | 2023.07.25 |
---|---|
데이터베이스 조회 최종 형태2(product) (0) | 2023.07.24 |
데이터베이스 조회 최종 형태1(member) (0) | 2023.07.24 |
데이터베이스6 - 모듈화 (0) | 2023.07.24 |
데이터베이스5 - JDBC (0) | 2023.07.21 |