제약 조건
•
데이터베이스를 사용할 때는 정확성을 지키기 위해서 항상 특정 조건을 만족시키는 데이터 값들만 저장하고 싶은 경우들이 존재
•
예
◦
테이블에 성별을 저장하는 컬럼이 있다고 하면 여기 저장하는 값은 항상 'm' 또는 'f'여야 한다
◦
이메일을 저장하는 컬럼에 저장되는 값은 항상 문자열 "@"가 있어야 한다
◦
고유 학생 번호는 다른 학생과 겹치면 안 되며, 항상 8자리 정수여야 한다.. 등등
•
이렇게 특정 컬럼이 항상 만족해야 되는 조건들을 데이터 모델링에서는 제약 조건, 영어로는 constraint이라고 부릅니다.
•
다행히도 대부분의 DBMS들은 테이블들에 제약 조건들을 걸게 해주는 기능이 있습니다.
◦
데이터 타입도 일종의 제약 조건.
◦
"겹치는 값이 없어야 한다", "값이 특정 범위, 길이, 또는 값이어야 한다".
◦
이런 내용들을 미리 정해놓고, 어기는 값을 저장하려고 시도하면 자체적으로 오류를 내서 원하지 않는 값이 저장되는 걸 미리 막아준다
ALTER TABLE student
ADD CONSTRAINT st_rule
CHECK (registeration_number < 3000000);
-- 제약사항 삭제
ALTER TABLE student
DROP CONSTRAINT st_rule;
ALTER TABLE student
ADD CONSTRAINT st_rule
CHECK (email LIKE '%@%' AND gender IN ('m','f'));
INSERT INTO student (name, registration_number, email, gender)
VALUES ('김준성', 20130827, '^^ 장난쳐야지', 'm');
-- 'Check constraint 'st_rule' is violated.'
SQL
복사
•
물리적 모델링 범위에서는 이런 제약 조건들을 실제 데이터베이스에 걸어주는 게 아니라 찾아내야 합니다.
◦
이 단계에서는 비즈니스 룰을 사용하거나, 저장하려는 데이터의 성질을 파악해서 각 테이블, 또는 컬럼에 대한 제약 조건들을 찾아냅니다.
•
제약 조건은 ERM에 표현하기 힘들기 때문에, 따로 종이나 메모 같은 곳이 이 내용들을 하나씩 적어준 후, 실제로 데이터베이스에 계획된 내용을 반영할 때 SQL 또는 ORM을 사용