Infra & Security Eng/Database Engineering

공장(Factory) 테이블 제약조건 실습하기

엔지니어 E 2026. 2. 10. 10:56
반응형
다음 구조를 갖는 테이블을 생성 한다. 각 테이블에는 필요한 PK와 FK를 지정 한다 - 데이터 타입이나 길이는 임의로 각자 결정하고 테이블 생성 순서에 주의 한다 

factory 테이블(공장)
fno(공장번호), fname(공장이름), loc(지역)
goods 테이블(제품)
: gno(제품번호), gname(제품명), pri(표준단가), fac_no(생산공장)
prod 테이블(출고 상품)
s_num(일련번호), gno(제품번호), pri (출고단가), pdate(생산일자)

 

1. 삭제 단계: 자식(prod)부터 지워야 부모(factory)를 지울 수 있다 (연결고리 때문)
DROP TABLE prod;
DROP TABLE goods;
DROP TABLE factory;
PURGE RECYCLEBIN; ---+ 지워진 테이블을 휴지통에서 완전히 삭제해 공간을 비운다

2. 공장(부모) 생성
CREATE TABLE factory (    
    fno     VARCHAR2(8),   --- 번호에 문자가 섞일 수 있도록 유연하게 설정
    fname   VARCHAR2(50), 
    loc     VARCHAR2(100),
    CONSTRAINT factory_pk_fno PRIMARY KEY (fno) ---  이 테이블의 주인공은 fno이며, 절대 중복될 수 없다
);

3. 제품(자식) 생성
CREATE TABLE goods (    
    gno     VARCHAR2(8),
    gname   VARCHAR2(50),
    pri     NUMBER(10,2),  -- 소수점 2자리까지 단가를 정확히 표현 (예: 100.50원)
    fac_no  VARCHAR2(8),
    -- [제약2] 이 테이블의 주인공은 gno입니다.
    CONSTRAINT goods_pk_gno PRIMARY KEY (gno),           ---> 이 테이블의 주인공은 gno 이다
    fac_no는 반드시 위 factory 테이블의 fno에 있는 번호여야만 합니다.
    CONSTRAINT goods_fk_fac_no FOREIGN KEY (fac_no) REFERENCES factory (fno) ---> fac_no(생산공장)는 반드시 위 factory 테이블의 fno에 있는 번호여야 한다 
);

기본키 (PRIMARY KEY) 쪼개기

CONSTRAINT factory_pk_fno PRIMARY KEY (fno) 

구성 요소 명칭 기능 및 의미
CONSTRAINT 키워드 (Keyword) 제약 조건을 정의하겠다는 선언
factory_pk_fno 제약 조건 명 (Name) 이 규칙에 부여하는 고유 이름. 관리 및 에러 확인 시 사용
PRIMARY KEY 제약 유형 (Type) 중복 불가능(Unique)과 빈칸 불가능(Not Null)을 동시에 적용하는 규칙
(fno) 대상 컬럼 (Column) 위 규칙을 적용할 특정 열(Column)을 지정

기본키 (PRIMARY KEY) 쪼개기

CONSTRAINT goods_pk_gno PRIMARY KEY (gno)

구성 요소 명칭 기능 및 의미
CONSTRAINT 키워드 제약 조건을 정의하겠다는 선언
goods_pk_gno 제약 조건 명 이 규칙의 이름(테이블명_종류_컬럼명)
PRIMARY KEY 제약 유형 gno(제품번호)를 이 테이블의 유일한 식별자로 지정
(gno) 대상 컬럼 규칙을 적용할 대상 칸. 중복값과 빈칸을 허용하지 않음



4. 출고(손자) 생성
CREATE TABLE prod (    
    s_num   VARCHAR2(16),  --- 긴 형태의 일련번호를 담을 수 있게 길게 설정
    gno     VARCHAR2(8),
    pri     NUMBER(10,2),
    hdate   DATE,          -- 생산/출고 날짜 타입
    CONSTRAINT prod_pk_snum PRIMARY KEY (s_num),  ---> 출고 건 마다 붙는 유일한 일련번호 이다         
    CONSTRAINT prod_fk_gno FOREIGN KEY (gno) REFERENCES goods (gno) ---> gno(제품번호)는 반드시 위 goods 테이블의 gno에 등록된 제품이어야 한다
);

기본키 (PRIMARY KEY) 쪼개기

CONSTRAINT prod_pk_snum PRIMARY KEY (s_num)

구성 요소 명칭 기능 및 의미
CONSTRAINT 키워드 제약 조건을 정의하겠다는 선언
prod_pk_snum 제약 조건 명 이 규칙의 이름 (prod 테이블의 PK인 s_num)
PRIMARY KEY 제약 유형 s_num(일련번호)을 이 테이블의 유일한 식별자로 지정
(s_num) 대상 컬럼 출고될 때마다 붙는 번호로, 중복되거나 비어있을 수 없음

외래키 (FOREIGN KEY) 쪼개기

CONSTRAINT prod_fk_gno FOREIGN KEY (gno) REFERENCES goods (gno)

구성 요소 명칭 기능 및 의미
CONSTRAINT 키워드 제약 조건을 정의하겠다는 선언
prod_fk_gno 제약 조건 명 이 규칙의 이름(prod 테이블의 FK인 gno)
FOREIGN KEY (gno) 제약 유형 및 컬럼 gno(제품번호) 칸을 부모 테이블과 연결하는 통로로 설정
REFERENCES 참조 선언 어디에 있는 정보를 확인할지 지정하는 키워드
goods (gno) 참조 대상 goods 테이블의 gno에 실제로 등록된 제품만 팔 수 있게 확인