2017-09-06 1 views
0

저는 화폐 거래 플랫폼을 연구 중입니다.데이터베이스 디자인 - 다른 속성을 가진 동일한 엔티티

발신자는 항상 특정 속성을 가진 등록 된 사용자입니다.

수신자는 플랫폼에 등록 된 사용자 (속성이 동일한 사용자)이거나 플랫폼 외부의 사용자 일 수 있습니다 (이 경우 은행 계좌 세부 정보를 다른 테이블에 저장해야 함).

내가 겪고있는 문제는 수신자를 식별하는 데 도움이되는 외래 키를 갖는 것입니다.

처음에는 하나의 외래 키가 여러 테이블을 참조 할 수 없다는 것을 알고 있으므로 두 개의 외래 키를 모두 사용할 수 있고 두 가지 유형의 사용자를 참조하는 트랜잭션 테이블에 외래 키를 추가했습니다.

이렇게하면 외래 키 중 적어도 하나에 값이 있으며 수신자 유형을 식별하는 데 도움이됩니다.

더 좋은 방법이 있나요?

+0

다음을보십시오 : https://stackoverflow.com/search?tab=votes&q=user%3a196713%20 하위 유형 –

+0

@DamirSudarevic별로 도움이되지 않았습니다. 중복 질문이 있으면 저를 지적 해 주시겠습니까? –

+0

@DamirSudarevic 필자의 경우 공통 속성이 없으므로 super/subtype 패턴을 사용하면 users 테이블에 id 속성 만 포함됩니다. –

답변

0

더 안전한 방법은 등록 된 사용자와 등록되지 않은 사용자 모두에 대해 레코드를 포함하는 단일 테이블로 사용자 테이블을 결합하는 것입니다. 그러면 거래 테이블에는 수신자에 대한 하나의 외래 키만 있습니다.

사용자가 별도의 프로필 테이블에 등록되어 있는지 여부에 따라 다를 수있는 필드를 분류해야합니다. usersregistered_profilesunregistered_profiles 테이블에 이중 외부 키를 포함하게 될 수 있습니다. 그러나 이것은 사용자가 둘 다 가지고있는 경우 항상 등록 된 프로파일을 선호한다는 것을 알고 있기 때문에 transactions 테이블의 이중 외부 키보다 훨씬 더 안정적입니다.

일반적으로 불확실성의 범위를 가능한 한 제한하고 싶습니다. 수신자가 등록되었거나 등록되지 않았는지 트랜잭션과 관련해서는 안되며 이는 사용자에게 중요합니다.

+0

예를 들어 주시겠습니까? 내 경우에는 등록 된 사용자와 등록되지 않은 사용자에 대한 공통 속성이 없으므로 사용자 유형이 상위 유형/하위 유형 패턴이라고 생각하는 제안을하면 users 테이블에는 id 속성 만 있습니다. 내가 말했듯이, 나에게 실제 디자인을 가진 예를 들어주세요. –

관련 문제