2017-12-03 10 views
3

SuperPerson 테이블과 Disaster 테이블이있는 실습 Super Hero SQL 데이터베이스가 있습니다. SuperPerson과 Disaster 사이에는 Create and Prevent라는 두 가지 관계가 있습니다. SuperPerson 테이블에는 악의적인지 또는 양호한지를 알려주는 Disposition 열이 있습니다. 좋은 관계의 슈퍼 유저 만이 Create 관계에 참여할 수 있고 Create 관계에 대해서는 반대가되도록 어떻게 만들 수 있습니까?특정 요구 사항을 충족하는 경우 엔티티가 관계에 참여할 수 있도록 허용하는 SQL

SuperPerson 테이블을 참조하는 두 개의 새 테이블, SuperHero 및 SuperVillian을 작성하는 것이 가장 논리적 인 일입니까, 아니면이 제약 조건을 적용하는 데 사용할 수있는 PL/SQL입니까?

편집 :

add constraint fk_disaster_create 
    foreign key (create, 'good') references superperson (superpersonid, disposition); 

불행하게도, 상수 등 참조를 사용할 수 없습니다 : Here's a link to a schema of the database so far

+0

특정 멤버 만 관계에 참여할 수있는 경우 데이터 모델이 두 가지 유형의 엔터티를 서로 연결하고 있음을 나타내는 좋은 지표입니다. 제약 조건을 적용하는 데 필요한 PL/SQL은 일반적으로 단순히 두 개의 테이블을 갖는 것보다 복잡합니다. –

+0

@JeffreyKemp 이것은 사실이지만,이 맥락에서 나는 수퍼 퍼슨을 슈퍼 히어로와 슈퍼 빌리 언으로 나눌 것입니다. 이것은 테이블 낭비입니까? –

+0

'Prevent' 관계를 생성하는 동안 좋은'SuperPerson'을 쿼리 할 수 ​​있고'Create'의 경우도 마찬가지입니다. 왜 엔터티 수준에서 제약 조건을 넣고 싶습니까? – Aman

답변

1

이상적인 같이 외래 키를 정의하는 것입니다. 한 가지 방법은 두 값으로 고정 된 열을 정의하는 것입니다.

alter table disaster add disposition_good varchar2(255) default 'good'; 
alter table disaster add disposition_evil varchar2(255) default 'evil'; 

alter table disaster add constraint fk_disaster_create 
    foreign key (create, 'good') references superperson (superpersonid, disposition); 
+0

트리거를 사용하여 입력되는 슈퍼 피처의 처분이 좋든 나쁠지를 점검하고, 그렇지 않은 경우 오류를 던질 수 있습니까? –

+0

@JackCassidy. . . 물론 대신 트리거를 사용할 수 있습니다. –

+0

트리거가 참조하는 테이블 이외의 테이블에서 속성 값을 확인할 수 있습니까? 예를 들어 행이 HeroDisaster 테이블에 삽입되면 SuperPerson 테이블에서 해당 SuperID가있는 Disposition 값을 요청할 수 있습니까? –