버글버글
DataBase 수업 기록 (3) 관계모델링 본문
반응형
▶ 1 : M 관계 (일 대 다)
- 한 쪽의 엔티티가 관계를 맺은 다른 엔티티 쪽의 여러 객체를 가질 수 있다.
- 현실 세계에서 가장 흔한 관계이다.
예시) 엄마가 자식을 3명 낳으셨다. 엄마(1) : 자식(3)
* 일 대 다 관계의 테이블 생성(할때 고려하여야 할 것)
1. 명칭
1) 부모 테이블 : 일(1), (중복이 없는)PK를 가진 테이블
2) 자식 테이블 : 다(M), FK를 가진 테이블
2. 생성
1) 부모 테이블을 먼저 생성하고, 자식 테이블을 나중에 생성
3. 삭제
1) 자식 테이블을 먼저 삭제하고, 부모 테이블을 나중에 삭제
* 생성과 삭제는 역순 이다. ( 생성 : 부모 먼저, 자식 나중 / 삭제 : 자식 먼저, 부모 나중)
예시)
-- 학교 테이블 = 부모 테이블 : PK를 가진 테이블
DROP TABLE SCHOOL;
CREATE TABLE SCHOOL(
SCH_CODE NUMBER(1) NOT NULL,
SCH_NAME VARCHAR2(20 BYTE) NOT NULL,
CONSTRAINT PK_SCHOOL PRIMARY KEY(SCH_CODE)
);
-- 학생 테이블 = 자식 테이블 : FK를 가진 테이블
CREATE TABLE STUDENT(
STU_NO CHAR(5 BYTE) NOT NULL,
SCH_CODE NUMBER(1) NOT NULL,
STU_NAME VARCHAR2(20 BYTE) NULL,
CONSTRAINT PK_STUDENT PRIMARY KEY(STU_NO),
CONSTRAINT FK_STUDENT_SCHOOL FOREIGN KEY(SCH_CODE) REFEREBCES SCHOOL(SCH_CODE)
);
▶ M : N 관계 (다 대 다)
- 관계를 가진 양쪽 모두에게 1:M 관계가 존재할 때 나타난다.
- 현실 세계에서 의외로 빈번하게 발생하는 관계이다.
예시) 학생들이 수강신청을 한다. 학생도 여러 명(M) : 과목도 여러 과목(N)
- 1:M 관계 2개를 이용해서 구현한다.
예시)
DROP TABLE REQUEST; -- 수강신청 테이블
DROP TABLE SUBJECT; -- 과목 테이블
DROP TABLE STUDENT; -- 학생 테이블
-- 학생테이블
CREATE TABLE STUDENT(
STU_NO CHAR(5 BYTE) NOT NULL,
STU_NAME VARCHAR2(20 BYTE) NOT NULL,
STU_AGE NUMBER(3) NOT NULL,
CONSTRAINT PK_STUDENT PRIMARY KEY(STU_NO)
);
-- 과목 테이블
CREATE TABLE SUBJECT(
SUB_CODE CHAR(5 BYTE) NOT NULL,
SUB_NAME VARCHAR2(20 BYTE) NULL,
SUB_PRO VARCHAR2(20 BYTE) NULL,
CONSTRAINT PK_SUBJECT PRIMARY KEY(SUB_CODE)
);
-- 수강신청 테이블
CREATE TABLE REQUEST(
REQ_NO NUMBER(2) NOT NULL,
STU_NO CHAR(5 BYTE) NOT NULL,
SUB_CODE CHAR(5 BYTE) NOT NULL,
CONSTRAINT PK_REQUEST PRIMARY KEY(REQ_NO),
CONSTRAINT FK_REQUEST_STUDENT FOREIGN KEY(STU_NO) REFERENCES STUDENT(STU_NO),
CONSTRAINT FK_REQUEST_SUBJECT FOREIGN KEY(SUB_CODE) REFERENCES SUBJECT(SUB_CODE)
);
* 참고 : 아래 코드는 외래키 제약조건을 무시하고 테이블 삭제가 가능하다. (순서에 상관없이 삭제할 수 있음)
DROP TABLE STUDENT CASCADE CONSTRAINTS;
반응형
'Database > database 수업 기록' 카테고리의 다른 글
DataBase 수업 기록 (6) SCOTT 계정 초기화 (0) | 2022.08.30 |
---|---|
DataBase 수업 기록 (5) 모델링(Modeler) (0) | 2022.08.29 |
DataBase 수업 기록(4) 오브젝트생성 (0) | 2022.08.28 |
DataBase 수업 기록 (2) RDB(관계형 데이터베이스) (0) | 2022.08.26 |
DataBase 수업 기록 (1) 기초, 사용자 생성 및 권한 (0) | 2022.08.25 |