데이터베이스 제약이란 무엇입니까?
데이터베이스 제약의 명확한 정의는 무엇입니까?데이터베이스에 제약이 중요한 이유는 무엇입니까?제약의 종류는 무엇입니까?
제약조건은 데이터베이스 스키마 정의의 일부입니다.
되어 있으며, is조조음 、 음음음음음 a a a a a a a a a a a a a a a a a a a a a 로 됩니다.CREATE CONSTRAINT ★★★★★★★★★★★★★★★★★」CREATE ASSERTIONSQL »
데이터베이스의 데이터가 준수해야 하는 특정 속성을 정의합니다.열, 전체 테이블, 둘 이상의 테이블 또는 전체 스키마에 적용할 수 있습니다.신뢰할 수 있는 데이터베이스 시스템은 제약이 항상 유지되도록 보장합니다(이른바 지연 제약에 대해서는 트랜잭션 내부를 제외).
일반적인 제약사항의 종류는 다음과 같습니다.
- not null - 열의 각 값은 NULL일 수 없습니다.
- unique - 지정된 열의 값은 테이블의 각 행에 대해 고유해야 합니다.
- 프라이머리 키 - 지정된 열의 값은 테이블의 각 행에 대해 고유해야 하며 NULL이 아니어야 합니다.일반적으로 데이터베이스의 각 테이블에는 프라이머리 키가 있어야 합니다.이 키는 개별 레코드를 식별하는 데 사용됩니다.
- 외부 키 - 지정된 열의 값은 기본 키 또는 다른 고유한 제약 조건을 통해 다른 테이블의 기존 레코드를 참조해야 합니다.
- 체크 - 제약 조건을 충족하려면 true로 평가해야 하는 식이 지정됩니다.
제약이 필요한 이유를 이해하려면 먼저 데이터 무결성의 가치를 이해해야 합니다.
데이터 무결성은 데이터의 유효성을 나타냅니다.데이터가 유효한가요?데이터는 자신이 설계한 것을 나타내고 있습니까?
이상한 질문이라고 생각하실 수도 있지만, 안타깝게도 데이터베이스가 가비지 데이터로 가득 차거나 다른 테이블의 행에 대한 잘못된 참조가 이미 사라진 경우가 너무 많습니다.솔루션 비즈니스 로직에는 더 이상 의미가 없는 가치를 부여합니다.
이 모든 가비지는 퍼포먼스를 저하시키는 경향이 있을 뿐만 아니라, 애플리케이션 로직 하에서는 최종적으로 인식하도록 설계되지 않은 데이터를 취득하는 시한폭탄이 됩니다.
제약조건은 설계 시 데이터가 손상되지 않도록 보호하는 규칙입니다.데이터베이스 솔루션에서 심장 자녀의 장기 생존을 위해 필수적입니다.제약이 없다면 시간과 사용량에 따라 솔루션이 쇠퇴할 것입니다.
데이터베이스 설계를 설계하는 것은 솔루션의 탄생에 불과하다는 것을 인정해야 합니다.그 후에는 (바람직하게) 오래 지속되어야 하며 최종 사용자(클라이언트 애플리케이션)에 의한 모든 종류의 (이상한) 행동을 견뎌야 합니다.그러나 이 설계 단계는 솔루션의 장기적인 성공을 위해 매우 중요합니다.그것을 존중하고, 그것에 필요한 시간과 관심을 기울이세요.
현명한 사람은 "데이터는 스스로를 보호해야 한다!"라고 말했다.그리고 이것이 제약이 하는 일입니다.이는 데이터베이스의 데이터를 가능한 한 유효하게 유지하는 규칙입니다.
여기에는 여러 가지 방법이 있지만 기본적으로 다음과 같이 요약됩니다.
- 외부 키 제약조건은 가장 많이 사용되는 제약조건이며 참조할 대상 행이 실제로 존재하는 경우에만 다른 테이블에 대한 참조가 허용됩니다.이로 인해 참조된 행을 삭제하여 데드링크를 생성함으로써 이러한 관계를 끊을 수도 없습니다.
- 제약 조건을 확인하여 특정 열에서 특정 값만 사용할 수 있습니다.VARCHAR 열에 'Yellow' 또는 'Blue' 단어만 사용할 수 있는 제약 조건을 만들 수 있습니다.다른 값은 모두 오류가 발생합니다.체크 제약 조건의 사용에 대한 아이디어를 얻으려면
sys.check_constraints샘플 의 뷰AdventureWorks - SQL Server의 규칙은 재사용 가능한 Check Constraints(제한조건 확인)일 뿐입니다(한 곳에서 구문을 유지하여 다른 데이터베이스에 제약을 쉽게 배포할 수 있습니다).
여기서 힌트를 드렸듯이 데이터베이스 설계에 가장 적합한 가장 방어적인 제약 방식을 구축하려면 몇 가지 철저한 검토가 필요합니다.먼저 위의 여러 제약 조건 유형의 가능성과 제한을 알아야 합니다.추가 판독치에는 다음이 포함됩니다.
행운을 빕니다.;)
제약은 데이터상의 규칙에 불과합니다.유효한 데이터와 유효하지 않은 데이터는 제약 조건을 사용하여 정의할 수 있습니다.따라서 데이터의 무결성을 유지할 수 있습니다.널리 사용되는 제약사항은 다음과 같습니다.
- 기본 키 : 데이터를 고유하게 식별합니다. 이 제약 조건이 특정 열에 대해 지정된 경우 해당 열에 중복 데이터를 입력할 수 없습니다.
- 체크: 예를 들어 다음과 같습니다.
NOT NULL여기서 특정 열에 입력할 수 있는 데이터와 해당 열에 예상되지 않는 데이터를 지정할 수 있습니다. - [Foreign key] : 다른 테이블의 행을 참조하는 외부 키.따라서 다른 테이블에서 한 테이블로 참조되는 데이터는 항상 참조 테이블에서 사용할 수 있습니다.
제약 조건을 사용하여 데이터의 특정 속성을 적용할 수 있습니다.간단한 예는 int 열을 [0-100000] 값으로 제한하는 것입니다.이 소개가 좋을 것 같아요.
제약조건은 데이터베이스 내의 데이터에 유효한 값을 지정합니다.예를 들어 a 값이 null이 아님을 적용할 수 있습니다(a).NOT NULL제약) 또는 다른 테이블에서 고유한 제약으로 존재하는 경우(a)FOREIGN KEY또는 이 테이블 내에서 고유하다는 점(a)UNIQUE제약 또는 아마도PRIMARY KEY(요건에 따라 다름)보다 일반적인 제약조건은 제약조건을 사용하여 구현할 수 있습니다.
SQL Server 2008의 제약에 관한 MSDN 매뉴얼을 참조하는 것이 가장 좋습니다.
UNIQUE(이것에 대해) 제약PRIMARY KEY구속조건은 바리안트입니다).특정 필드의 모든 값이 테이블 전체에서 고유한지 확인합니다.이것은X-축 구속조건(표준)CHECK(이것에 대해) 제약NOT NULL구속조건은 바리안트입니다).특정 조건이 같은 레코드의 필드에 대해 표현식을 유지하는지 확인합니다.이것은Y-축 구속조건(필드)FOREIGN KEY제약이 있습니다.필드 값이 다른 테이블의 필드 값 중 있는지 확인합니다.이것은Z-축 구속조건(표준).
데이터베이스는 개념(또는 비즈니스) 모델의 컴퓨터화된 논리 표현으로 비공식 비즈니스 규칙 집합으로 구성됩니다.이러한 규칙은 사용자가 이해한 데이터의 의미입니다.컴퓨터는 형식적인 표현만 이해하기 때문에 비즈니스 규칙을 데이터베이스에서 직접 나타낼 수 없습니다.이들은 일련의 무결성 제약으로 구성된 형식 표현, 논리 모델에 매핑되어야 합니다.이러한 제약 조건(데이터베이스 스키마)은 비즈니스 규칙 데이터베이스의 논리적 표현이며, 따라서 DBMS가 이해하는 데이터 의미입니다.따라서 DBMS가 비즈니스 규칙을 나타내는 제약 조건의 전체 집합을 인식하지 못하거나 적용하지 않는 경우, DBMS는 데이터의 의미를 완전히 이해하지 못하기 때문에 (a) 파손을 방지함으로써 데이터의 무결성을 보장할 수 없습니다.(b) DBMS에서 도출한 추론의 무결성을 보증할 수 없습니다.쿼리 결과) - 이것은 DBMS가 기껏해야 불완전하다는 것을 나타내는 또 다른 방법입니다.
주의: DBMS의 의미(정합성 제약)는 사용자가 이해하는 의미(비즈니스 규칙)와 동일하지 않습니다.다만, 의미가 없어지더라도, 데이터로부터 논리적인 추론을 기계화할 수 있습니다.
파비안 파스칼의 "오래된 오류 클래스"
SQL에는 기본적으로 4가지 주요 제약사항이 있습니다.
도메인 제약: 새 태플에 대해 제공된 속성 값 중 하나가 지정된 속성 도메인에 속하지 않은 경우
키 제약: 새 태플의 키 속성 값이 이미 관계의 다른 태플에 존재하는 경우
Referential Integrity: 새로운 태플의 외부 키 값이 참조된 관계에 존재하지 않는 프라이머리 키 값을 참조하는 경우
엔티티 무결성: 새 태플의 프라이머리 키 값이 null인 경우
제약조건은 특정 조건을 검증할 수 있는 조건입니다.데이터베이스와 관련된 제약사항에는 도메인 무결성, 엔티티 무결성, 참조 무결성, 사용자 정의 무결성 제약사항 등이 있습니다.
언급URL : https://stackoverflow.com/questions/2570756/what-are-database-constraints
'sourcecode' 카테고리의 다른 글
| 다음 항목을 사용해야 하는 경우:Amazon EC2, Google App Engine, Microsoft Azure 및 Salesforce.com? (0) | 2023.04.23 |
|---|---|
| XAML 테두리에 마우스 오버 이벤트/트리거를 설정하는 방법 (0) | 2023.04.18 |
| libgcc_s_dw2-1.dll이 없기 때문에 프로그램을 시작할 수 없습니다. (0) | 2023.04.18 |
| 리모트 Git 브랜치를 작성하려면 어떻게 해야 하나요? (0) | 2023.04.18 |
| SQL Server 연결 문자열에서 포트 번호를 지정하는 방법 (0) | 2023.04.18 |