수표와 외국 열쇠의 차이점은 무엇입니까?
외국인 KEY와 CHECK 제약의 차이에 대해 상당히 혼란스럽습니다. 동일한 결과를 얻는 것으로 보입니다.
테이블을 만들고 다른 테이블에 Foreign 키를 적용할 수는 있지만 CHECK를 만들어 다른 테이블의 값을 보장할 수는 있습니다.
이것과 다른 것을 언제 어떻게 사용할 것인가요?
외부 키 제약 조건은 항목이 존재하는지 확인합니다.
다른 테이블 편집
올바른 설명에 따라 다른 테이블에 존재... 아니면 같은 테이블.– 마크 바이어스
CHECK 제약 조건은 항목이 어떤 규칙을 따르도록 합니다.
CHECK 제약 조건은 열에서 허용하는 값을 제한하여 도메인 무결성을 적용합니다.이들은 열에 포함되는 값을 제어한다는 점에서 FOREN KEY 제약 조건과 유사합니다.그 차이는 어떤 값이 유효한지 결정하는 방법에 있습니다. FOREN KEY 제약 조건은 다른 테이블에서 유효한 값의 목록을 가져오고 CHECK 제약 조건은 다른 열의 데이터를 기반으로 하지 않는 논리식에서 유효한 값을 결정합니다.
외래 키 제약 조건은 CHECK 제약 조건보다 더 강력합니다.
외래 키 제약 조건은 열(현재 테이블에 있는)이 외래 테이블의 열에 이미 존재하는 값(동일한 테이블을 포함할 수 있음, 종종 계층 데이터에 대해 수행됨)만 가질 수 있음을 의미합니다.즉, 값 목록이 커지거나 작아지면 제약 조건을 업데이트할 필요가 없습니다.
검사 제약 조건은 현재 테이블 외부의 열을 참조할 수 없으며 하위 쿼리를 포함할 수 없습니다.종종 값은 다음과 같이 하드 코딩됩니다.BETWEEN 100 and 999
아니면IN (1, 2, 3)
제약 을 업데이트해야 것을 이는 상황이 변하면 매번 CHECK 제약 조건을 업데이트해야 한다는 것을 의미합니다.또한 ERD(Entity Relationship Diagram)에 외부 키 관계가 표시되는 반면 CHECK 제약 조건은 결코 표시되지 않습니다.이를 통해 여러 DESC 테이블 명령을 사용하지 않고 ERD를 읽고 ERD에서 쿼리를 구성하여 적절한 조인을 구성할 열이 어디에 있고 무엇과 관련이 있는지 알 수 있습니다.
가장 좋은 방법은 먼저 외래 키(및 지원 테이블)를 사용하는 것입니다.CHECK 제약 조건을 데이터 검증을 위한 주요 솔루션이 아니라 외부 키를 사용할 수 없는 상황에 대한 백업으로 사용합니다.
특정하지 않은 DBMS에 따라 다르지만, 어떤 의미에서는 맞는 말입니다. 외국 키 제약 조건은 체크 제약 조건의 특정한 경우입니다.체크 제약 조건으로 외국 키 제약 조건을 공식화할 수 없는 DBMS가 있습니다.
검사 제약 조건의 주된 목적은 표의 단일 행에 적용되는 조건을 설명하는 것입니다.예를 들어, 수소, 헬륨, ...와 같은 원소 표를 가지고 있는데, 원소의 기호는 대문자로 시작하도록 제한되어 있고 0, 1 또는 2개의 소문자가 뒤를 이룹니다(아직 발견되지 않았지만 예측된 원소의 경우 2개의 소문자).Uus - ununseptium (117), 막 분리되었지만 아직 이름이 붙여지지 않은).이는 CHECK 제약 조건의 대상이 될 수 있습니다.
CHECK(Symbol MATCHES "[A-Z][a-z]{0,2}")
MATCHS가 존재하며 적절한 정규 표현 언어를 지원한다고 가정합니다.
값을 비교하는 검사 제약 조건을 가질 수도 있습니다.
CHECK(OrderDate <= ShipDate OR ShipDate IS NULL)
외래 키 제약 조건을 체크 제약 조건으로 표현하려면 CHECK 절에서 쿼리를 실행할 수 있어야 합니다.가정적으로:
CHECK(EXISTS(SELECT * FROM SomeTable AS s
WHERE ThisTable.pk_col1 = s.pk_col1 AND
ThisTable.pk_col2 = s.pk_col2))
이 예제에서는 몇 가지 문제를 보여 줍니다.체크 제약 조건을 작성하는 테이블에 대한 편리한 테이블 별칭이 없습니다. 'ThisTable'인 줄 알았습니다.구문이 장황합니다.일부 테이블의 기본 키가 열에 선언되었다고 가정합니다.pk_col1
그리고.pk_col2
, 그러면 FOREN KEY 조항이 훨씬 더 압축됩니다.
FOREIGN KEY (pk_col1, pk_col2) REFERENCES SomeTable
또는 기본 키가 아닌 대체 키를 참조하는 경우:
FOREIGN KEY (pk_col1, pk_col2) REFERENCES SomeTable(ak_col1, ak_col2)
이것은 국제적으로 더 콤팩트하지 않기 때문에 틀릴 가능성이 적습니다. 그리고 특수한 표기법은 그것이 외국의 키 제약을 다루고 있다는 것을 알기 때문에 서버에 의해 특별한 케이스가 될 수 있습니다. 반면에 일반적인 체크 조항은 그것이 외국과 동등한 많은 가능한 형태 중 하나와 일치하는지를 자세히 조사해야 합니다.n키
체크 제약 조건을 언제 사용할 것인지, 외국 키 제약 조건을 언제 사용할 것인지를 묻는 질문입니다.
- CHECK 제약 조건을 사용하여 한 행에서 확인할 수 있는 기준을 지정합니다.
- FOREAN KEY 제약 조건을 사용하여 현재 행의 값이 일부 테이블의 다른 고유 키(대체 키가 아닌 후보 키, 일반적으로 기본 키)에 있는 행의 값과 일치해야 한다고 지정합니다. 이 값은 동일한 테이블이거나 (더 일반적으로) 다른 테이블일 수 있습니다.
다음과 같은 시나리오를 생각해 보십시오.
- 표 A에는 키워드 열이 있으며, 값은 제공되는 수천 개의 키워드 중 하나여야 합니다.
- 제약 조건을 어떻게 구현하시겠습니까?
하드 코딩된 체크 조건은 다음과 같습니다.check (keyword in ('a', 'b', 'c' .......))
또는 제공된 키워드를 다른 테이블로 가져오기만 하면 되고, 표 A의 키워드 열에 외래 키 제약 조건을 설정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2617941/what-is-the-difference-between-check-and-foreign-key
'programing' 카테고리의 다른 글
포크() 다음에 먼저 실행하는 사람은 부모입니까, 자식입니까? (0) | 2023.10.20 |
---|---|
준비 상태 변경 시 XMLHttpRequest가 여러 번 호출됨 (0) | 2023.10.20 |
Android의 strings.xml 파일에 오류가 발생했습니다. (0) | 2023.10.20 |
jQuery, JSON, PHP 및 gMap (0) | 2023.10.20 |
함수 내부의 구조를 정의할 때 "벌점"이 있습니까? (0) | 2023.10.20 |