2011-09-23 5 views
4

우리는 비즈니스 응용 프로그램에서 특정 엔터티에 대한 사용자 또는 시스템 생성 "주석"을 저장할 필요가 있습니다. 예를 들어 고객, 주문 또는 구매 주문에 대한 설명을 작성할 수 있습니다. 이 주석은 모두 참조 된 엔티티를 제외하고는 많은 동일한 특성을 공유합니다.유사한 구조를위한 이상적인 데이터베이스 스키마

모든 댓글에는 날짜, 시간, 사용자 및 설명 텍스트가 필요합니다. 또한 특정 엔티티에 대한 주석을 찾을 수 있도록 참조 된 테이블에 외래 키가 필요합니다.

현재 애플리케이션에는 각 유형의 댓글 (예 : customer_comments, order_comments, purchaseOrder_comments)에 대한 별도의 표가 있습니다. 이 테이블의 스키마는 날짜, 시간, 사용자 및 주석 텍스트와 모두 동일하지만 각각 주석이있는 각 테이블에 대해 FK가 있습니다.

이 디자인이 가장 좋습니까? 아니면 더 좋은 디자인입니까? 그것은 나를 있었다면

답변

2

을 가지고, 하나의 주석 테이블을 만든 다음 엔터티 (고객, 주문 등) 당 하나의 교차 테이블을 사용하여 주석을 엔터티와 연결합니다.

enter image description here

+0

나는 너와 거기에있다. 이것은 FK 제약 조건을 적용/적용 할 수있는 현재 제안 된 답변 중 유일합니다. 필자는 동등한 아키텍처 (여러 외부 테이블에 대한 참조)로 작업했으며 적어도 하나의 프로세스가 잘못된 관계에 속하는 행을 점유했습니다. –

+0

예, FK 관계를 시행하는 것이 중요하다고 생각합니다.이 스키마는 분명히 그렇게합니다. 감사! –

1

, 나는 다른 어딘가에 당신이 좋겠 ... 나는 댓글 등 customer 기관, order 기관, 사용할 수 있는지 여부에 매핑 추가 comment_type_id 필드 단일 Comments 테이블을했을 것 같아요 comment_type_id이 참조하는 comment_type 테이블이 있어야합니다. 당신이 의견에 메타 데이터의 추가 조각을 추가하기로 결정한 경우

이 방법, 당신은 단지 개인적으로 ... 등, 오히려 customer_comments, order_comments보다 하나의 Comments 테이블에 그것을 할

+0

이 구조체에 대한 우려는 그것은 FK 관계의 집행을 허용하지 않는다. 모호한 FK 필드가 있습니다. 나는 FK 집행이 요구 사항임을 분명히해야한다고 생각한다. –

1

당신은 하나 개의 테이블 comments 이러한 모든 의견을 넣어 그것을 다형성 ManyToOne 만들 것 다른 열 commented_table을 추가 할 수 있습니다. Rails의 ActiveRecord와 같은 일부 프레임 워크/옴스는 지원하지 않습니다. 사용하는 것이 무엇이든간에 기본적으로 또 다른 where 절을 추가하는 것만 큼 간단합니다.