책 내용 질문하기
2권데이터베이스 p81 문제 1번
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
81
조회수
53
작성일
2018-09-21
작성자
탈퇴*원
첨부파일
sql다시 풀어보는 중에 제약조건 check가 헷갈려서요. 제가 p81 문제1번 답에check(sex='f',sex='m')으로 썼었는데 답을 보니 or로 되어있더군요. 근데 p75쪽 도메인 예제에 나오는 제약조건 check에서는 쉼표로 나와 있습니다.. check가 도메인에서 쓸때랑 table생성에서 쓸때랑 다른건가요? 아니면 둘 다 상관없이 써도 되는건가요?
답변
2018-09-27 13:25:30

안녕하세요. 길벗 수험서 운영팀입니다.

create domain에서 제약조건을 설정할 때는

constraint (제약조건명) check (범위 값);

create table에서 제약조건을 설정할 때는

constraint (제약조건명) check (조건 식);

입니다.

이 때 (범위 값)과 (조건 식)은 동일하게 사용할 수 있으나, 회원님이 말씀하신 것처럼 다른 부분이 있습니다.

테이블과 달리 도메인은 단일 속성에 대한 것만을 선언한다는 점입니다.

즉, 테이블 내에서 한 속성에 대해서 제약을 걸 때는 해당 속성을 언급해줘야 하지만, 도메인 내에서 속성에 대한 제약을 걸 때는 도메인 자체가 한 속성에 대해서만 그 특성을 정의하기 때문에 속성명을 언급할 필요가 없습니다.

CREATE TABLE patient
( id CHAR(5) PRIMARY KEY,
name CHAR(10),
sex CHAR(1),
phone CHAR(20),
CONSTRAINT sex_ck CHECK (sex=‘f’ or sex=‘m’),
CONSTRAINT id_fk FOREIGN KEY(id) REFERENCES doctor(doc_id) );

라는 sql문이 있을 때, 첫 번째 constraint절을 아래와 같이 바꿔쓸 수 있습니다.

constraint sex_ck check (sex in('f', 'm'),

CREATE DOMAIN SEX CHAR(1)
DEFAULT ‘남’
CONSTRAINT VALID-SEX CHECK (VALUE IN (‘남’, ‘여’));

위의 create domain문에서 사용된 constraint절과 유사함을 알 수 있습니다.

차이점은 속성명이 들어간 sex부분이 value로 바뀌었다는 것이죠. 이 것은 위에서 언급한 create domain의 특성 때문입니다.

두 명령문의 차이를 확실히 기억하여, SQL문을 작성하시기 바랍니다.

행복한 하루되세요.^^

  • *
    2018-09-27 13:25:30

    안녕하세요. 길벗 수험서 운영팀입니다.

    create domain에서 제약조건을 설정할 때는

    constraint (제약조건명) check (범위 값);

    create table에서 제약조건을 설정할 때는

    constraint (제약조건명) check (조건 식);

    입니다.

    이 때 (범위 값)과 (조건 식)은 동일하게 사용할 수 있으나, 회원님이 말씀하신 것처럼 다른 부분이 있습니다.

    테이블과 달리 도메인은 단일 속성에 대한 것만을 선언한다는 점입니다.

    즉, 테이블 내에서 한 속성에 대해서 제약을 걸 때는 해당 속성을 언급해줘야 하지만, 도메인 내에서 속성에 대한 제약을 걸 때는 도메인 자체가 한 속성에 대해서만 그 특성을 정의하기 때문에 속성명을 언급할 필요가 없습니다.

    CREATE TABLE patient
    ( id CHAR(5) PRIMARY KEY,
    name CHAR(10),
    sex CHAR(1),
    phone CHAR(20),
    CONSTRAINT sex_ck CHECK (sex=‘f’ or sex=‘m’),
    CONSTRAINT id_fk FOREIGN KEY(id) REFERENCES doctor(doc_id) );

    라는 sql문이 있을 때, 첫 번째 constraint절을 아래와 같이 바꿔쓸 수 있습니다.

    constraint sex_ck check (sex in('f', 'm'),

    CREATE DOMAIN SEX CHAR(1)
    DEFAULT ‘남’
    CONSTRAINT VALID-SEX CHECK (VALUE IN (‘남’, ‘여’));

    위의 create domain문에서 사용된 constraint절과 유사함을 알 수 있습니다.

    차이점은 속성명이 들어간 sex부분이 value로 바뀌었다는 것이죠. 이 것은 위에서 언급한 create domain의 특성 때문입니다.

    두 명령문의 차이를 확실히 기억하여, SQL문을 작성하시기 바랍니다.

    행복한 하루되세요.^^

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.