코드를 생성 할 수있는 데이터베이스 모델링 도구로 작업 할 때 거의 지원되지 않는 특정 관계 유형이 있습니다.0 또는 1 대 0 또는 하나의 관계 문제
이들은 1 대 1, 다 대다 및 0 또는 1 대 0 또는 1.1 : 1, : 및 0..1 : 0..1을 포함합니다.
처음 두 개는 쉬운 해결책이 있습니다. 1 또는 1 : 0..1
1 대 1은 행 1 0..1 또는 1 대 0..1 0..1로 변환함으로써 해결 될 수있다.
대다 관계는 다음의 중간에있는 테이블을 사용하여 해결 될 수중 1 * 및 1 또는 0..1 : 및 * 0 .. 1 또는 이와 유사한 조합. 나는 그것을 해결할 수있는 4 가지 조합이 있다고 생각한다.
그러나 나는 0..1에서 0.1 사이에 붙어 있습니다. 사실, 나는이 논리적 인 관계를 가지고있는 것처럼 보이는 테이블을 가지고 있습니다.
제 경우에는 4 개의 테이블이 있습니다. 논증의 목적으로, 모두 INT 타입의 기본 키를 가지고 있다고 가정합니다. 이 테이블은 People, Organizations, Customers 및 Employees입니다.
로직에 대한 단어입니다. 조직은 People을 가질 수 있으며 관계에서 Contacts라고 불립니다. 사람들은 고객이나 직원 또는 둘 다 될 수 있습니다.
조직 < -> 사람이 연락처로 < -> 있습니다. 이것은 0..1 : * 관계입니다. 즉, 사람은 조직의 유무에 관계없이 존재할 수 있으며 조직에는 많은 사람이 있거나없는 사람이있을 수 있습니다.
직원은 개인 레코드가 있어야하며 그 관계도 의미가 있습니다. 이는 0..1 : 1 관계로, 직원이 Person을 보유해야하지만 Person은 직원 기록이 0 또는 1 일 수 있습니다.
그러나 이것은 상속이 논리적으로 양방향으로 흐르기 때문에 이해가되지 않습니다. 고객에 대한 인물 또는 조직의 경우. 고객은 조직 또는 사람이 될 수 있지만 둘 다일 수는 없으며 선택은 유형 플래그 필드를 통해 이루어집니다. 사람이 반드시 고객 일 필요는 없으며 나중에 직원 또는 다른 연락 유형이 될 수 있습니다. 나는 사람을 고객으로 요구할 수 없으며 나는 고객이 사람이되도록 요구할 수 없다. 마찬가지로 저는 조직이 고객이되도록 요구할 수 없으며 고객이 조직이되도록 요구할 수 없습니다. 그래서 상속의 단절이 필요합니다. 고객 : 사람과 고객 : 조직 모두의 경우에 둘 다 0..1 : 0..1 및 0..1 : 0..1을 구현해야합니다. 그러나 언어 도구는이를 지원하지 않습니다. 강력한 형식의 언어이기 때문에 엔터티 상속은 단일 방향으로 만 흐를 수 있습니다. 약한 유형의 언어로조차도, 닭이나 계란과 같은 상황에서 여전히 바람을 피울 수 있습니다.
JavaScript는 객체 유형의 구조를 동적으로 변경할 수 있기 때문에이 경우에 적합 할 수 있으며이 경우 객체를 명시 적으로 선언 할 수 없더라도 항상 두 순서로 결합 할 수 있습니다. 방법.
그러나 오늘의 도구는 Microsoft LightSwitch이며, 전혀 사용하지 않습니다. 필자는이 관계 유형을 허용 할 강력한 유형의 언어 코드를 생성하고 생성하는 현대 모델링 도구가 존재하지 않는다고 생각합니다.
이 관계를 극복하는 트릭이 있습니까, 0..1 : 0..1, 또는 내가 아직 이해하지 못했던 근본적인 것이 있습니까? 나는 한 쪽을 선택하기 위해 여기에 머물러 있으며, 어느 쪽이 승리하고 있는지 알지 못합니다 : 고객 또는 사람, 고객 또는 조직. 하지만 두 가지 경우 모두를 해치지 않으면 서 내가 할 수있는 일이있을 수 있습니다. 깨진 모델에 대해 뭔가 있습니까?
감사합니다.