2009-10-15 4 views
1

특정 이벤트 그룹에 대한 사용자 가입이있는 웹 응용 프로그램을 개발 중입니다. 예 : 사용자가 BLOB에 주석을 만들고이 블로그에 가입 한 모든 사용자는이 이벤트를 목록에 포함해야합니다.웹 응용 프로그램의 사용자 이벤트 구독

Currenly, 우리는이 데이터를 저장할 데이터 모델을 찾고 있습니다. (예제에서 : 주석 참조)

  • 대상 :
  • 등록 가능 객체 (예 : 블로그 참조)
  • 하나 개의 테이블에있는 모든 이벤트

    스토어보기의 유용성 지점에서 좋은 아이디어를 보인다

  • 이벤트 유형 이벤트를 양산
  • 사용자 (같은 : 업데이트 작성 등)

구독 이벤트 s는 특정 사용자에 대해 사용자 가입으로 이벤트를 필터링하는 SQL 쿼리에 의해 수집 될 수 있습니다.

이 데이터 모델의 문제는 구독 가능한 개체에 '상속'이있을 수 있다는 것입니다. 예 : 사용자가 블로그 구독 또는 블로그의 특정 게시물을 보유하고있을 수 있습니다. 즉, 블로그 구독이 게시물 구독을 확장하고이 데이터 모델에이 동작이 반영되지 않습니다. 이 경우 2 개의 이벤트를 생성해야합니다 : 하나는 블로그 용이고 다른 하나는 게시물 용입니다.

모든 이벤트를 한 테이블에서 처리하거나 다른 테이블로 분할하는 것이 좋은 생각입니까? 어쨌든 이벤트 테이블에는 엄청난 양의 데이터가 있습니다. 이벤트 로깅을 구성하는 것이 더 좋은 생각입니까?

답변

1

한 테이블의 하위 클래스와 별도의 테이블의 하위 클래스는 일반적인 질문입니다.

"좋은 아이디어"답변이 없습니다. 두 가지 모두 좋은 아이디어입니다.

하나의 질문은 질문하는 방법입니다.

모든 개별 이벤트 하위 유형의 조합을 거의 수행하지 않고 기능이 거의 겹치지 않으면 별도의 테이블이 제대로 작동 할 수 있습니다.

여러 이벤트 별 하위 유형을 함께 가져 오는 조합 스타일 쿼리를 수행하거나 겹치는 기능이 많은 경우 단일 테이블이 제대로 작동 할 수 있습니다.

또 다른 질문은 다형성 중 하나입니다.

모든 이벤트 부속 유형이 적절하게 다형성이면 응용 프로그램 (및 데이터베이스)은 여러 이벤트 부속 유형 콜렉션에 대해 작업합니다. 이렇게하면 하나의 테이블로 연결됩니다.

이벤트 부속 유형이 모두 매우 다르고 다형성으로 사용할 수없는 경우에는 별도의 테이블에 있어야합니다.

결과들 하나 개의 테이블에있는 모든 하위 유형

, 당신은 모든 하위 유형에 공통없는 그 속성에 대한 NULLABLE 컬럼을 사용해야합니다. 행이 나타내는 부속 유형을 알려주는 C 럼이 있어야합니다.

단일 테이블에 여러 개의 부속 유형을 넣을 때, 행이 있어야하는 부속 유형을 알려주는 판별 자 열이 있어야합니다.

하위 유형을 별도의 테이블에 넣을 때 두 가지 디자인이 있습니다.

  • 모든 테이블에서 공통 요소를 반복하십시오. 공통점이 거의 없을 때 이것을하십시오.

  • 부속 유형 테이블을 수퍼 유형 테이블에 조인하고 공통 요소를 하나의 테이블에 넣으십시오. 거의 모든 것이 공통적 일 때 이것을하십시오.

+0

다음 기능을 알고 있습니다. 다음은 이벤트를 생성 한 사용자별로 이벤트 그룹을 만듭니다. 즉, 모든 이벤트 객체 유형의 합집합을 의미합니다. 하나의 테이블에 저장하는 궁극적 인 이유 인 것 같습니다. –