데이터베이스 제약의 명확한 정의는 무엇입니까? 제약 조건이 데이터베이스에 중요한 이유는 무엇입니까? 제약의 유형은 무엇입니까?
데이터베이스 제약의 명확한 정의는 무엇입니까? 제약 조건이 데이터베이스에 중요한 이유는 무엇입니까? 제약의 유형은 무엇입니까?
답변:
제약 조건은 데이터베이스 스키마 정의의 일부입니다.
제약 조건은 일반적으로 테이블과 연관되며 CREATE CONSTRAINT
또는 CREATE ASSERTION
SQL 문으로 생성됩니다 .
데이터베이스의 데이터가 준수해야하는 특정 속성을 정의합니다. 열, 전체 테이블, 둘 이상의 테이블 또는 전체 스키마에 적용 할 수 있습니다. 신뢰할 수있는 데이터베이스 시스템은 제약 조건이 항상 유지되도록합니다 (소위 지연 제약 조건의 경우 트랜잭션 내부를 제외하고 가능).
일반적인 제약 유형은 다음과 같습니다.
제약이 필요한 이유를 이해하려면 먼저 데이터 무결성의 가치를 이해해야합니다.
데이터 무결성은 데이터의 유효성을 나타냅니다. 데이터가 유효합니까? 귀하의 데이터는 귀하가 설계 한 것을 나타내는가?
내가 묻는 이상한 질문은 생각할 수도 있지만 슬프게도 너무 자주 데이터베이스는 가비지 데이터, 다른 테이블의 행에 대한 유효하지 않은 참조로 가득 차 있으며 오래 전에 사라진 ... 및 비즈니스 논리에 아무런 의미가없는 값으로 가득 차 있습니다. 더 이상 솔루션의.
이 모든 쓰레기는 성능을 저하시키는 경향이있을뿐만 아니라 애플리케이션 로직 아래에서 이해하도록 설계되지 않은 데이터를 검색하는 시간 폭탄입니다.
제약 조건은 데이터가 손상되지 않도록 보호하기 위해 디자인 타임에 만드는 규칙입니다. 데이터베이스 솔루션의 심장 자식의 장기 생존을 위해 필수적입니다. 제약이 없으면 솔루션은 시간과 사용량에 따라 확실히 쇠퇴 할 것입니다.
데이터베이스 디자인을 디자인하는 것은 솔루션의 탄생일뿐임을 인정해야합니다. 여기에서 (희망적으로) 오랫동안 살아야하며 최종 사용자 (예 : 클라이언트 응용 프로그램)에 의한 모든 종류의 (이상한) 행동을 견뎌야합니다. 그러나이 설계 단계는 솔루션의 오랜 성공을 위해 매우 중요합니다! 그것을 존중하고 필요한 시간과주의를 기울이십시오.
한 현자는 "데이터는 스스로를 보호해야합니다!" 라고 말했습니다. . 그리고 이것이 제약이하는 일입니다. 데이터베이스의 데이터를 가능한 한 유효하게 유지하는 것이 규칙입니다.
이를 수행하는 방법에는 여러 가지가 있지만 기본적으로 다음과 같이 요약됩니다.
sys.check_constraints
AdventureWorks 샘플 데이터베이스에서보기 확인여기에서 언급했듯이 데이터베이스 설계를위한 최선의 방어적인 제약 접근 방식을 구성하려면 몇 가지 철저한 고려 사항이 필요합니다. 먼저 위의 다양한 제약 유형의 가능성과 제한 사항을 알아야합니다. 추가 읽기에는 다음이 포함될 수 있습니다.
행운을 빕니다! ;)
제약은 데이터에 대한 규칙 일뿐입니다. 유효한 데이터와 유효하지 않은 데이터는 제약 조건을 사용하여 정의 할 수 있습니다. 따라서 데이터의 무결성을 유지할 수 있습니다. 다음은 널리 사용되는 제약 조건입니다.
NOT NULL
. 여기에서 특정 열에 대해 입력 할 수있는 데이터와 해당 열에 대해 예상되지 않는 데이터를 지정할 수 있습니다.제약 조건은 데이터베이스의 데이터에 유효한 값을 지정합니다. 예를 들어 값이 null이 아니 NOT NULL
거나 ( 제약 조건), 다른 테이블에서 고유 제약 조건으로 존재하거나 ( FOREIGN KEY
제약 조건)이 테이블 내에서 고유 한 값 ( UNIQUE
제약 조건 또는 PRIMARY KEY
요구 사항에 따라 제약 조건)을 적용 할 수 있습니다. ). 제약을 사용하여보다 일반적인 제약을 구현할 수 있습니다 CHECK
.
SQL Server 2008의 제약 조건에 대한 MSDN 설명서는 아마 가장 좋은 출발점이다.
UNIQUE
제약 ( PRIMARY KEY
제약은 변형). 주어진 필드의 모든 값이 테이블 전체에서 고유한지 확인합니다. 이것은 X
-axis 제약 (레코드)입니다.
CHECK
제약 ( NOT NULL
제약은 변형). 동일한 레코드의 필드에서 표현식에 대해 특정 조건이 유지되는지 확인합니다. 이것은 Y
축 제약 (필드)입니다.
FOREIGN KEY
강제. 다른 테이블의 필드 값 중에서 필드 값이 있는지 확인합니다. 이것은 Z
축 제약 (테이블)입니다.
CHECK
왜 다르게 분류합니까? 즉 " Y
-axis"(그게 무슨 뜻이든간에).
FOREIGN KEY
사용하여 어떻게 구현 CHECK
합니까?
SELECT
쿼리입니다. 의 CHECK
제약 조건에서는 하위 쿼리 (또는 현재 레코드 외부의 값을 참조하는 다른 구문)를 사용할 수 없습니다 SQL Server
.
데이터베이스는 비공식 비즈니스 규칙 세트로 구성된 개념 (또는 비즈니스) 모델의 컴퓨터 화 된 논리적 표현입니다. 이러한 규칙은 사용자가 이해하는 데이터의 의미입니다. 컴퓨터는 공식적인 표현 만 이해하기 때문에 비즈니스 규칙은 데이터베이스에서 직접 표현할 수 없습니다. 그것들은 일련의 무결성 제약으로 구성된 논리적 모델 인 형식적 표현에 매핑되어야합니다. 이러한 제약 조건 (데이터베이스 스키마)은 비즈니스 규칙의 데이터베이스에서 논리적으로 표현되므로 DBMS가 이해하는 데이터 의미입니다. 따라서 DBMS가 비즈니스 규칙을 나타내는 전체 제약 조건을 인식하지 못하거나 적용하지 않는 경우 데이터가 의미하는 바를 불완전하게 이해하므로
참고 : DBMS (무결성 제약)의 "이해"의미는 사용자가 이해 한 의미 (비즈니스 규칙)와 동일하지 않지만 일부 의미의 손실에도 불구하고 데이터에서 논리적 추론을 기계화 할 수있는 능력을 얻습니다.
Fabian Pascal의 "오래된 오류 클래스"
제약은 특정 조건을 검증 할 수있는 조건입니다. 데이터베이스와 관련된 제약은 도메인 무결성, 엔티티 무결성, 참조 무결성, 사용자 정의 무결성 제약 등입니다.