나는 다음과 같은 테이블이 있습니다 이 표는 group_systems CREATE ( GROUP_NAME, 여기서 system_name, SECTION_NAME, CREATED_DATE, decom_date, 상태 (활성, 비활성화) )구현하는 복잡한 점검 제한 조건
CREATE TABLE 시스템 ( system_name, section_name )
시스템 키 (system_name, section_name)로 식별됩니다. dup 시스템 이름은있을 수 있지만 dup 섹션 이름은 없을 수 있습니다.
그룹 테이블에서 그룹의 섹션에있는 하나의 시스템 만 활성화 될 수 있다는 제약 조건을 적용하고 싶습니다. 그러나 그룹 테이블은 히스토리 테이블이기 때문에 고유 제한 조건 (group_name, section_name, system_name) 만 사용할 수는 없습니다. 하위 쿼리를 실행하는 check 제약 조건을 사용해야합니다. 하위 쿼리 인 몇 가지 추가 제약 조건이 있습니다.
문제는 100k 레코드의 벤치 마크 삽입에는 (서브 쿼리로 인해) 시간이 오래 걸린다는 것입니다.
group_systems 테이블을 다시 참조하는 다른 테이블 active_systems_for_groups를 빌드하는 것이 더 좋습니까? 그렇게하면 그룹 당 섹션 당 하나의 활성 시스템 만 적용하고 더 많은 테이블을 추가하여 복잡한 제약 조건을 유지하는 active_systems_for_groups에 고유 제한 조건을 추가 할 수 있습니다.
복잡한 체크 제약 조건을 처리하는 더 좋은 방법이 있습니까?
어떤 RDBMS를 사용하고 있습니까? –
서브 쿼리를 지원하는'CHECK' 제약 조건을 가진 SQL 구현을 사용하고 있습니까? 내가 아는 유일한 것은 Access (ACE, Jet, 무엇이든)이며 SQL Server가 UDF를 사용하여 '가짜'로 만들 수 있다는 것을 알고 있습니다. 그것이 다른 것이라면, 나는 그것이 어떤 SQL인지 배우게 될 것이다. Firebird (귀하의 손에 의해 제안 된 바와 같이) AFAIK하지 않습니다. – onedaywhen