뷰에는 자체 외래 키 제약 조건이 필요합니까?


10

면책 조항 : 저는 DBA가 아닌 프로그래머이므로 나와 함께하십시오 ...

두 엔티티를 함께 매핑하는 데 사용하는 관점이 있습니다. 그것을 얻기 위해 몇 가지 다른 테이블을 조인해야합니다.

CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS (
SELECT SG.SCREENING_GROUP_ID, V.SITE_ID
FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD
WHERE VD.VISIT_ID = V.VISIT_ID 
AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID);

위의 내용은 단지 컨텍스트에 대한 것이므로 너무 걱정하지 마십시오. 알아야 할 것은 새 V_SCREENING_GROUP_SITES 뷰 (SCREENING_GROUP_ID 및 SITE_ID)의 필드를 SCREENING_GROUP 및 SITE 테이블의 외래 키로 만드는 방법입니다. 아니면 중요합니까?

그것이 테이블이라면 :

ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...

그러나 그것은 분명히 작동하지 않는 견해이기 때문에. FK를 설정하는 ALTER VIEW 구문을 찾을 수 없습니다. 어떻게해야합니까?

(이것은 MySQL 데이터베이스입니다)

답변:


12

뷰는 하나 이상의 실제 테이블을 기반으로하는 논리 테이블입니다. 기본 테이블에 외래 키 관계가 있으면 뷰에 나타납니다. 뷰는 파생 된 테이블에 전적으로 의존하므로 외래 키를 추가하는 것은 불가능합니다.


1
훌륭합니다. 그래서 아무것도 할 필요가 없습니다 (기본 테이블에 이미 FK 제약 조건이 있습니다). 답변 해주셔서 감사합니다.
트로이

1
이것이 요점이라고 생각합니다. 기본 테이블에 FK가 있으면 뷰에서 FK가 필요하지 않습니다.
데릭 다우니

2
@DTest-확인, 고유 및 외래 키 제약 조건을 포함한 제약 조건을 뷰에 적용하는 것이 매우 유용 할 수 있습니다 (특히 뷰가 데이터를 집계하는 경우). 현재 RDBMS가 뷰를 작성하도록 허용하더라도 뷰에 대한 제한 조건을 적용하지 않습니다.
잭 topanswers.xyz 시도라고

@JackDouglas 정확히 맞아! 사실 나는 MySQL이 그러한 기능을 지원하는지 알아 내려고 노력했다.
Stijn de Witt

3

엄밀히 말하면, 뷰에 외래 키를 설정할 수 없습니다. 이유는 다음과 같습니다.

InnoDB는 외래 키를 특징으로하는 MySQL을위한 유일한 내장 스토리지 엔진입니다. 모든 InnoDB 테이블은 engine = 'InnoDB' 로 information_schema.tables에 등록됩니다 .

information_schema.tables에 등록 된 뷰에는 NULL 스토리지 엔진이 있습니다. MySQL에는 정의되지 않은 스토리지 엔진이있는 테이블에 외래 키를 갖는 메커니즘이 없습니다.

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