데이터베이스 제약이란 무엇입니까? [닫은]


92

데이터베이스 제약의 명확한 정의는 무엇입니까? 제약 조건이 데이터베이스에 중요한 이유는 무엇입니까? 제약의 유형은 무엇입니까?


12
이 질문에는 명확한 답이 있습니다. "너무 광범위"하지 않습니다. 많은 수의 찬성 투표와 즐겨 찾기는 많은 사람들에게 얼마나 유용했는지 보여줍니다. 나는 문구를 정리하고 재개를 위해 지명했다.
La-comadreja 2015

@BasilBourque이 질문은 프로그래머 에게 매우 적합하지 않습니다. 신속하게 투표를 취소 하고 종료 할 수 있습니다. meta.programmers.stackexchange.com/questions/6483/을 참조 하세요. 추천 자료 : Programmers.SE는 어떻게 되나요? 스택 오버플로를위한 가이드
모기

1
@gnat이 페이지는 프로그래머 Stack Exchange의 주제에 대한 주제가 무엇인지에 대해 여전히 애매 모호하게 남아 있지만, 저는 게시 작성자가 처음으로 직접 관련된 위키피디아 기사 를 읽은 최소 임계 값을 이해하고 동의 할 수 있습니다 . 동일한 종류의 요약 또는 요약 개요가 Stack Exchange에서 요청됩니다.
Basil Bourque

2
제목은 광범위하고 하위 질문은 한 번에 여러 질문을 묻는 것입니다. -_- TomTom, P ரதீப், greg-449, bummi 및 Nit은 어떻게 원합니까? 설명 해주십시오. 어쨌든 제약에 대해 물어볼 수 있습니까?
Lealo

나는 질문에 대한 감정이 너무 복잡하고 의견에 기반을두고 있음을 이해하지만, 위키피디아 기사를 처음 읽는 요건에 동의하지 않습니다. "동일한 종류의 요약 또는 요약 개요"는 제공하지 않습니다. 허용되는 답변은 위의 wikipedia 링크보다 훨씬 더 요약되고 정확한 답변을 제공합니다.
영원히

답변:


117

제약 조건은 데이터베이스 스키마 정의의 일부입니다.

제약 조건은 일반적으로 테이블과 연관되며 CREATE CONSTRAINT또는 CREATE ASSERTIONSQL 문으로 생성됩니다 .

데이터베이스의 데이터가 준수해야하는 특정 속성을 정의합니다. 열, 전체 테이블, 둘 이상의 테이블 또는 전체 스키마에 적용 할 수 있습니다. 신뢰할 수있는 데이터베이스 시스템은 제약 조건이 항상 유지되도록합니다 (소위 지연 제약 조건의 경우 트랜잭션 내부를 제외하고 가능).

일반적인 제약 유형은 다음과 같습니다.

  • null이 아님 -열의 각 값은 NULL이 아니어야 합니다.
  • 고유 -지정된 열의 값은 테이블의 각 행에 대해 고유해야합니다.
  • 지정된 열의 기본 키 값은 테이블의 각 행에 대해 고유해야하며 NULL이 아니어야 합니다 . 일반적으로 데이터베이스의 각 테이블에는 기본 키가 있어야합니다. 개별 레코드를 식별하는 데 사용됩니다.
  • 외래 키 -지정된 열의 값 (들)은 다른 테이블의 기존 레코드를 참조해야합니다 ( 기본 키 또는 다른 고유 제약 조건을 통해 )
  • check- 제약 조건이 충족 되려면 true로 평가되어야하는 표현식이 지정됩니다.

3
+1, null이 아님, null이 아닌 PK 포함
gbn

+1, 여전히 FOREIGN KEY 시나리오를 확장하고 일부 링크를 제공 할 수 있습니다.
Unreason

2
Check Constraints는 false로 평가되지 않아야합니다. 사실 일 필요는 없습니다. 알 수없는 것도 괜찮습니다.
Martin Smith

2
유형 제약도 일반적인 종류가 아닐까요?
Martin

1
일반적으로 제약 조건이라고 부르지는 않지만 데이터 유형이 제약 조건의 한 형태라고 주장합니다. Int 또는 datetime으로 정의하면 필드에 입력 할 수있는 데이터 유형이 제한됩니다. 데이터 유형의 적절한 선택은 데이터 무결성을 보장하는 데 중요한 부분입니다.
HLGEM

36

제약이 필요한 이유를 이해하려면 먼저 데이터 무결성의 가치를 이해해야합니다.

데이터 무결성은 데이터의 유효성을 나타냅니다. 데이터가 유효합니까? 귀하의 데이터는 귀하가 설계 한 것을 나타내는가?

내가 묻는 이상한 질문은 생각할 수도 있지만 슬프게도 너무 자주 데이터베이스는 가비지 데이터, 다른 테이블의 행에 대한 유효하지 않은 참조로 가득 차 있으며 오래 전에 사라진 ... 및 비즈니스 논리에 아무런 의미가없는 값으로 가득 차 있습니다. 더 이상 솔루션의.

이 모든 쓰레기는 성능을 저하시키는 경향이있을뿐만 아니라 애플리케이션 로직 아래에서 이해하도록 설계되지 않은 데이터를 검색하는 시간 폭탄입니다.

제약 조건은 데이터가 손상되지 않도록 보호하기 위해 디자인 타임에 만드는 규칙입니다. 데이터베이스 솔루션의 심장 자식의 장기 생존을 위해 필수적입니다. 제약이 없으면 솔루션은 시간과 사용량에 따라 확실히 쇠퇴 할 것입니다.

데이터베이스 디자인을 디자인하는 것은 솔루션의 탄생일뿐임을 인정해야합니다. 여기에서 (희망적으로) 오랫동안 살아야하며 최종 사용자 (예 : 클라이언트 응용 프로그램)에 의한 모든 종류의 (이상한) 행동을 견뎌야합니다. 그러나이 설계 단계는 솔루션의 오랜 성공을 위해 매우 중요합니다! 그것을 존중하고 필요한 시간과주의를 기울이십시오.

한 현자는 "데이터는 스스로를 보호해야합니다!" 라고 말했습니다. . 그리고 이것이 제약이하는 일입니다. 데이터베이스의 데이터를 가능한 한 유효하게 유지하는 것이 규칙입니다.

이를 수행하는 방법에는 여러 가지가 있지만 기본적으로 다음과 같이 요약됩니다.

  • 외래 키 제약 조건 은 아마도 가장 많이 사용되는 제약 조건이며 참조 할 대상 행이 실제로 존재하는 경우에만 다른 테이블에 대한 참조가 허용되도록합니다. 또한 데드 링크를 만드는 참조 된 행을 삭제하여 이러한 관계를 끊는 것도 불가능합니다.
  • 제약 조건 을 확인하면 특정 열에 특정 값만 허용됩니다. VARCHAR 열에 'Yellow'또는 'Blue'라는 단어 만 허용하는 제약 조건을 만들 수 있습니다. 다른 모든 값은 오류를 생성합니다. 검사 제약 조건 사용에 대한 아이디어 얻기 sys.check_constraintsAdventureWorks 샘플 데이터베이스에서보기 확인
  • SQL Server의 규칙 은 재사용 가능한 Check Constraints입니다 (단일 위치에서 구문을 유지하고 제약 조건을 다른 데이터베이스에 쉽게 배포 할 수 있음).

여기에서 언급했듯이 데이터베이스 설계를위한 최선의 방어적인 제약 접근 방식을 구성하려면 몇 가지 철저한 고려 사항이 필요합니다. 먼저 위의 다양한 제약 유형의 가능성과 제한 사항을 알아야합니다. 추가 읽기에는 다음이 포함될 수 있습니다.

외래 키 제약-Microsoft

외래 키 제약-w3schools

제약 조건 확인

행운을 빕니다! ;)


necro-comment로, 이제 Microsoft에서 규칙을 비난하는 것 같습니다.
gary

6

제약은 데이터에 대한 규칙 일뿐입니다. 유효한 데이터와 유효하지 않은 데이터는 제약 조건을 사용하여 정의 할 수 있습니다. 따라서 데이터의 무결성을 유지할 수 있습니다. 다음은 널리 사용되는 제약 조건입니다.

  1. 기본 키 : 데이터를 고유하게 식별합니다. 이 제약 조건이 특정 열에 대해 지정되면 해당 열에 중복 데이터를 입력 할 수 없습니다.
  2. 확인 : NOT NULL. 여기에서 특정 열에 대해 입력 할 수있는 데이터와 해당 열에 대해 예상되지 않는 데이터를 지정할 수 있습니다.
  3. 외래 키 : 다른 테이블의 행에 대한 외래 키 참조. 따라서 다른 테이블의 한 테이블에서 참조 된 데이터는 항상 참조 테이블에서 사용할 수 있습니다.

3

제약 조건을 사용하여 데이터의 특정 속성을 적용 할 수 있습니다. 간단한 예는 int 열을 [0-100000] 값으로 제한하는 것입니다. 소개는 괜찮아 보입니다.


3

제약 조건은 데이터베이스의 데이터에 유효한 값을 지정합니다. 예를 들어 값이 null이 아니 NOT NULL거나 ( 제약 조건), 다른 테이블에서 고유 제약 조건으로 존재하거나 ( FOREIGN KEY제약 조건)이 테이블 내에서 고유 한 값 ( UNIQUE제약 조건 또는 PRIMARY KEY요구 사항에 따라 제약 조건)을 적용 할 수 있습니다. ). 제약을 사용하여보다 일반적인 제약을 구현할 수 있습니다 CHECK.

SQL Server 2008의 제약 조건에 대한 MSDN 설명서는 아마 가장 좋은 출발점이다.


2
  1. UNIQUE제약 ( PRIMARY KEY제약은 변형). 주어진 필드의 모든 값이 테이블 전체에서 고유한지 확인합니다. 이것은 X-axis 제약 (레코드)입니다.

  2. CHECK제약 ( NOT NULL제약은 변형). 동일한 레코드의 필드에서 표현식에 대해 특정 조건이 유지되는지 확인합니다. 이것은 Y축 제약 (필드)입니다.

  3. FOREIGN KEY강제. 다른 테이블의 필드 값 중에서 필드 값이 있는지 확인합니다. 이것은 Z축 제약 (테이블)입니다.


제약 조건을 사용하여 고유 제약 조건과 외래 키 제약 조건을 작성할 수 있는데 CHECK왜 다르게 분류합니까? 즉 " Y-axis"(그게 무슨 뜻이든간에).
onedaywhen

2
@onedaywhen : 제약 조건을 FOREIGN KEY사용하여 어떻게 구현 CHECK합니까?
Quassnoi

1
@onedaywhen :이 제약 조건으로 테이블을 만들어보십시오.
Quassnoi

1
@onedaywhen : 시도하기가 너무 어렵습니까? 힌트 : 작동하지 않습니다.
Quassnoi

3
@onedaywhen : 작성한 쿼리가 검사 제약을 생성하지 않습니다. 단순한 SELECT쿼리입니다. 의 CHECK제약 조건에서는 하위 쿼리 (또는 현재 레코드 외부의 값을 참조하는 다른 구문)를 사용할 수 없습니다 SQL Server.
Quassnoi

2

데이터베이스는 비공식 비즈니스 규칙 세트로 구성된 개념 (또는 비즈니스) 모델의 컴퓨터 화 된 논리적 표현입니다. 이러한 규칙은 사용자가 이해하는 데이터의 의미입니다. 컴퓨터는 공식적인 표현 만 이해하기 때문에 비즈니스 규칙은 데이터베이스에서 직접 표현할 수 없습니다. 그것들은 일련의 무결성 제약으로 구성된 논리적 모델 인 형식적 표현에 매핑되어야합니다. 이러한 제약 조건 (데이터베이스 스키마)은 비즈니스 규칙의 데이터베이스에서 논리적으로 표현되므로 DBMS가 이해하는 데이터 의미입니다. 따라서 DBMS가 비즈니스 규칙을 나타내는 전체 제약 조건을 인식하지 못하거나 적용하지 않는 경우 데이터가 의미하는 바를 불완전하게 이해하므로

참고 : DBMS (무결성 제약)의 "이해"의미는 사용자가 이해 한 의미 (비즈니스 규칙)와 동일하지 않지만 일부 의미의 손실에도 불구하고 데이터에서 논리적 추론을 기계화 할 수있는 능력을 얻습니다.

Fabian Pascal의 "오래된 오류 클래스"


2

SQL에는 기본적으로 4 가지 유형의 주요 제약 조건이 있습니다.

  • 도메인 제약 : 새 튜플에 제공된 속성 값 중 하나가 지정된 속성 도메인이 아닌 경우

  • 키 제약 : 새 튜플의 키 속성 값이 관계의 다른 튜플에 이미 존재하는 경우

  • 참조 무결성 : 새 튜플의 외래 키 값이 참조 된 관계에 존재하지 않는 기본 키 값을 참조하는 경우

  • 엔티티 무결성 : 새 튜플에서 기본 키 값이 null 인 경우


-1

제약은 특정 조건을 검증 할 수있는 조건입니다. 데이터베이스와 관련된 제약은 도메인 무결성, 엔티티 무결성, 참조 무결성, 사용자 정의 무결성 제약 등입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.