안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 6-5. 데이터 무결성 - 규칙(RULE)을 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이번에 진행할 강좌는 데이터 무결성 - 규칙(RULE)입니다.
TL;DR
규칙(RULE)은 차기 버전에서 제거할 예정이며, CHECK 제약 사용을 가이드하고 있습니다. CHECK 제약을 활용하여 데이터의 무결성을 유지하고 사용하세요.
규칙 - RULE
지난 4-1. SQL Server 데이터베이스와 데이터베이스 개체의 이해 강좌에서 언급한 것처럼, 규칙은 SQL Server 차기 버전에서 제거될 예정입니다. CHECK 제약으로 RULE을 옮길 수 있으니, CHECK 제약 사용을 마이크로소프트는 공식 가이드 하고 있습니다.
짧게 이런 RULE이라는 데이터베이스 개체가 있구나 정도만 이해하고 다음 강좌를 진행하겠습니다. 공식 가이드 대로, 가급적이면 CHECK 제약을 이용하세요.
--RULE 테스트 USE AdventureWorks; GO -- 만약 테이블, Rule이 존재하면 삭제 IF OBJECT_ID(N'dbo.rule_test', N'U') IS NOT NULL DROP TABLE dbo.rule_test; IF OBJECT_ID(N'dbo.KR_SSN_rule', N'R') IS NOT NULL DROP RULE dbo.KR_SSN_rule; GO --테이블을 생성합니다. CREATE TABLE rule_test( idx INT, KR_SSN VARCHAR(15) ); GO -- 주민등록번호 패턴을 체크하는 예제 RULE 생성(실제로는 애플리케이션에서 하세요) CREATE RULE KR_SSN_rule AS @value LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'; GO --생성한 RULE을 테이블 컬럼에 바인딩 EXEC sp_bindrule 'KR_SSN_rule', 'dbo.rule_test.KR_SSN'; GO INSERT INTO rule_test VALUES(1, '123456-1234567'); -- 정상 GO INSERT INTO rule_test VALUES(2, 'A23456-1234567'); -- RULE 위반 GO 오류 메시지 메시지 513, 수준 16, 상태 0, 줄 859 열 삽입이나 업데이트가 이전 CREATE RULE 문에서 설정한 규칙과 충돌하여 문이 종료되었습니다. 데이터베이스 'AdventureWorks', 테이블 'dbo.rule_test', 열 'KR_SSN'에서 충돌이 발생했습니다. 문이 종료되었습니다.
RULE은 별칭 데이터 형식(alias data type)이나 컬럼에 바인딩해 사용할 수 있습니다. CHECK 제약이 테이블에 연동된다면, RULE은 독립 데이터베이스 개체로 생성하고 바인딩해 사용하는 차이가 있습니다.
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.