2

개발자 및 데이터베이스 디자이너, 안녕하세요!데이터베이스 스키마 디자인 관련 문제

내 프로젝트에 데이터베이스 스키마를 디자인합니다.

프로젝트에는 '생산자'와 '소비자'간의 관계가 포함됩니다. 그러나 '프로듀서'가 '사용자'와 '조직'모두 일 수있는 경우 '소비자'는 '사용자'일 수 있습니다 (단지 지금은). 프로젝트의 객체 모델을 고려한다면, 주로 '생산자'와 '소비자'라는 두 개의 기본 인터페이스로 구성됩니다. 관계는 'Organization'과 'User'라는 주 클래스의 인스턴스 사이에 있으며, 'Organization'클래스는 'Producer'인터페이스를 구현하고 'User'클래스는 'Producer'와 'Сonsumer'의 인터페이스를 구현합니다. 예를 들어, 내 응용 프로그램을 사용하는 특정 기간 동안 일부 사용자는 다른 사용자에게 항목을 판매 할 수 있어야하며 다른 사람에게 물건을 살 수 있어야합니다. 향후

enter image description here

, 나는이 프로젝트에 가장 요구 결제 시스템을 통합 할 계획입니다. 지불 시스템 사용 경험이 있다면 모델 및 데이터베이스 스키마가 어떻게 변경되는지 알려주십시오. '법인'과 '개인'의 엔티티를 추가해야합니까?

위의 설명에 따라 ER 다이어그램을 디자인했지만 몇 가지 단점이 있습니다.

enter image description here

첫째, ER-설명 및 UML 설명 사이에 완전한 일치가 없다. 인터페이스에 대해 분리 된 테이블을 할당해야합니까? 나도 몰라. 사실,이 경우 ER 기술에 따르면 '생산자'와 '소비자'가 '조직'과 '사용자'의 수퍼 클래스라고 할 수 있습니다. 그러나 사실 그들은 단지 인터페이스 일뿐입니다.

둘째, 불필요한 'JOIN'없이 스토리지에 대한 액세스를 충분히 유연하게 제공하는 가장 간단한 설계가 필요합니다. 어쩌면 인터페이스 구현을 완전히 포기해야할까요? 그러나 나는 OOP 부를 사용하기위한 모든 것입니다. 데이터베이스 레벨에서 인터페이스 구현을 사용할 수 있습니까? 상속을 사용할 수 있다는 것을 알고 있습니다. 그러나 이러한 모든 트릭이 생산성에 어떻게 영향을 미치는지는 알지 못합니다. 이전의 모든 프로젝트에서 수퍼 클래스와 인터페이스를 사용할 필요가 없었기 때문입니다. PostgreSQL을 관계형 DBMS로 사용하겠습니다.

성공적인 데이터베이스 구성에 대한 경험과 구현을 알려주십시오.

UPDATE

나는 테이블 '생산자'와 '소비자'의 역할을 할당 할 경우, 내가 그들을 엔티티 '사용자'와 '조직'의 특성을 속성을 제공해야합니다. 한편, 역할의 수가 증가하면 속성의 수가 증가합니다. 이 경로는 테이블 속성의 혼잡을 수반합니다. 그리고 다른 역할에 대한 일부 속성은 NULL 값을 따릅니다. 반면에 하나의 역할에 대한 하나의 속성은 다른 역할에 대한 여러 속성을 따를 수 있습니다. 예를 들어 엔터티 'Organization'에 대한 'name'특성은 엔터티 'User'에 대한 'firstname', 'middlename', 'lastname'및 'username'특성을 따릅니다. 셋째, 여전히 '프로듀서', '조직', '사용자'및 '소비자'모델을 서로 분리하고 싶습니다.

enter image description here

+1

당신이 고민하고 있다고 생각하는 것은 "역할"의 주제입니다. 매우 일반적인 문제입니다. 사람은 많은 역할을 할 수 있습니다. 그렇다고해서 항상 그럴 수밖에 없다는 것을 의미하기 때문에 사람을 일종의 역할로 만드는 것은 아닙니다. 롤 플레잉 관계를 만들면 문제를 해결할 수 있지만 문제를 신중하게 분석 할 시간이 없다는 것을 알 수 있습니다. 당신은 또한 실재물 (예 : 생산자로서의 사람)이 역사와 다른 사실들을 유지하는데 도움이된다는 것을 발견 할 수 있습니다. –

+0

참으로 까다 롭습니다. 짐이 말하는 것은 옳다. 나는 저녁 늦게 이것을 들여다 보겠다. (짐이 좋은 대답을 제시하지 않는 한). –

+1

나는 한 번에 너무 많은 질문을하고 있다고 생각합니다. 나는 4 가지 명시 적 질문과 몇 가지 더 암묵적인 질문을 세운다. 모든 것은 문제 영역에 존재하는 것의 부정확 한 모델에 기인합니다. 그 문제를 해결하는 것이 좋습니다. UML과 ER은 둘 다 쉽게 맞출 수 있습니다. 사실 하나의 UML 모델은 OOP와 DB의 기반을 제공 할 수 있습니다. –

답변

1

아마 여러 가지가 있습니다 아무도는 최적입니다. 따라서 건축가로서 당신은 건축의 여러 장단점에 무게를 둘 필요가 있습니다. 아마도 데이터베이스 추상화를 구축하는 것으로 시작할 것입니다.여기에 얼마나 많은 것들이 당신의 객체의 지속성을 필요로하는지에 달려 있습니다. 즉, 즉각적인 지속성이 필요합니까 아니면 백그라운드에서 작동 할 수있는 그림자가 생길만큼 충분히 좋을까요?

enter image description here

그래서 기본적으로는 해당 클래스에 따라 테이블을 가지고있다. 이 종속성이 어떻게 실현되는지 간단하게 열어 둘 수 있습니다. 특정 프로그래밍 언어는 스캐 폴딩을 통해 서로를 매핑합니다. 이것은 편리하고 많은 타이핑/디자인을 절약합니다. 물론 매우 유연하지 않습니다. 그래서 이것을 바탕으로 다양한 옵션을 고려해야합니다. 클래스 내에서 데이터베이스 액세스를 구현하고 일부 serializer 인터페이스를 구현해야합니까? 미세 조정 및 성능 옵션을 많이 제공 확실히 것이다

enter image description here

. 하지만 구현 오버 헤드가 발생할 수도 있습니다.

또는 상태를 동시에 저장하도록 가입 할 수있는 섀도 잉 메커니즘을 사용하는 것이 더 좋을까요?

enter image description here

그래서, 당신은 객체와 데이터베이스가 서로 관련되고 얼마나 강한이 바인딩 요구되는 방법을 생각해야 올바른 설계 결정을 얻기 위해서이다. 불행히도 은색 총알은 없습니다.