2016-10-14 1 views
0

이 제약 조건을 표현하고 싶습니다. 둘 이상의 밴드에 가수가 있습니다.이 제약 조건을 표현하는 방법 : 둘 이상의 밴드에 가수가 있습니다.

다음은 Band 및 Singer를 선언합니다. 관계 '밴드'는 가수를 밴드에 매핑합니다.

sig Band {} 

sig Singer { 
    band: Band 
} 

이 원하는 제약 조건을 표현하기 위해 나타납니다

some s: Singer | some s.band 

반사되면, 나는 그 올바른 생각하지 않습니다. 그것은 (나는 믿는다) 가수가 하나 이상에 있다고 말한다. (나는 수정이 있습니까?)

나는 제약 이상의 대역 가수가 있다는 것을 말하고 싶습니다.

some s: Singer | #s.band > 1 

그러나 합금 도구는 인스턴스가 생성 될 수 없음을 말한다 :

나는이 원하는 제약 조건을 표현한다 생각. 왜? 왜 잘못 되었습니까? 원하는 제약 조건을 표현하는 올바른 방법은 무엇입니까?

답변

1

합금 분석기는 필드 밴드가 선언 된 방식 때문에 인스턴스를 생성 할 수 없다고 말합니다.

기본적으로 필드 선언에 multiplicity 키워드를 사용하지 않으면 다중성이 이고 정확히 하나는입니다. 당신이 준 합금 모델에서, 밴드 필드는 주어진 가수와 정확하게 하나의 밴드를 연관 시키므로, 가수가 하나 이상의 밴드에서 노래하는 모든 인스턴스를 배제합니다.

필드 선언에 복수형 키워드 을 추가하면이 트릭을 수행해야합니다.

sig Band {} 

sig Singer { 
    band: some Band 
} 

마지막 제안 제약

some s: Singer | #s.band > 1 참으로 하나 이상의 서명자가 하나 개의 밴드보다 확실히 더에서 노래를해야 적용됩니다.

+0

고맙습니다. Loic! –

+0

내 기쁨 ;-) –

관련 문제