2009-09-25 4 views
6

나는 이벤트와 사진을 가지고있다. 지금은 두 개의 댓글 테이블이 있습니다. 하나는 이벤트와 관련된 댓글 용이고 다른 하나는 사진 댓글 용입니다. 스키마는이 유사합니다두 테이블이 매우 비슷한 경우 언제 결합해야합니까?

CREATE TABLE EventComments 
(
    CommentId int, 
    EventId int, 
    Comment NVarChar(250), 
    DateSubmitted datetime 
) 

CREATE TABLE PhotoComments 
(
    CommentId int, 
    PhotoId int, 
    Comment NVarChar(250), 
    DateSubmitted datetime 
) 

내 질문에 내가 그들을 결합하고, 별도의 상호 참조 테이블을 추가,하지만 난 그것을 제대로 할 수있는 방법을 생각할 수 없다할지 여부입니다. 나는 이것이 잘되어야한다고 생각한다. 당신의 생각은 무엇인가?

편집 월터의 대답은 (일부 빛 읽기)을 기반으로

, 나는이 함께 왔어요 :

CREATE TABLE Comments 
(
    CommentId int, 
    Comment NVarChar(250), 
    DateSubmitted datetime 
    CONTRAINT [PK_Comments] PRIMARY KEY 
    (
    CommentId 
) 
) 

CREATE TABLE EventComments 
(
    CommentId int, 
    EventId int 
) 

CREAT TABLE PhotoComments 
(
    CommentId int, 
    PhotoId int 
) 

ALTER TABLE EventComments ADD CONSTRAINT FK_EventComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId) 

ALTER TABLE PhotoComments ADD CONSTRAINT FK_PhotoComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId) 

는 구조 사이의 성능 차이는 정말 있습니까? 나에게 그것은 조금 선호하는 것처럼 보인다. 두 번째 스키마에서 이점을 볼 수 있습니다. 이벤트 주석이나 사진 주석에 몇 가지 특수성을 추가하려면 별도의 테이블을 사용해야하며 새 속성을 공유하려면 단일 테이블이 있어야합니다. 새 속성을 추가하십시오.

답변

9

Comments, PhotoComments 및 EventComments는 "일반화 전문화"패턴과 관련이 있습니다. 이 패턴은 객체 지향 언어의 간단한 상속에 의해 처리됩니다. 동일한 패턴을 캡처 할 테이블 스키마를 설정하는 것이 조금 더 복잡합니다.

하지만 잘 알고 있습니다. "일반화 전문화 관계형 모델링"에 대한 빠른 google 검색을 통해 주제에 대한 여러 좋은 기사를 얻을 수 있습니다.

+0

IMHO 페이지의 가장 순수한 디자인 주석. – Rap

+0

나는 약간의 연구를했고 질문을 업데이트했다.입력 해 주셔서 감사합니다. – scottm

+0

이 답변에 동의하지 않습니다. 실제로는 일관성없고 지저분한 데이터를 요구하고 있습니다. 댓글은 어떻게 삭제됩니까? 저는 ScottM이 수정 된 질문에서 구현 한 것처럼 자주 설정하는 것을 보았습니다. 거의 항상 코멘트에 주석이 있지만 EventComments 또는 PhotoComments의 관련 레코드는 삭제되고 주석에 매달린 레코드가 남아 있습니다. – JasonFruit

1

사진을 결합하거나 사진 또는 이벤트 용인지 여부를 나타내는 필드를 추가 할 수 있습니다.

두 개의 외래 키가 필요합니다. 하나는 사진 용이고 다른 하나는 이벤트 용이지만 하나의 테이블에두면 모든 의견을 처리 할 수있는 단일 코드 세트를 작성할 수 있습니다.

하지만 찢어졌습니다. 같은 목록에 두 개의 주석 유형을 섞어 놓을 필요가 없다면 (UNION을 필요로하는 경우) 분리 된 상태로 유지하는 것이 더 깔끔합니다.

+0

코멘트가 연결된 사진이나 이벤트를 식별하고 참조 무결성을 보장하려면 어떻게해야합니까? – scottm

+0

나는 그것의 부분이 조금 더 복잡 해짐에 동의한다. –

1

제 개인적인 디자인 스타일은 그들을 결합한 다음, 정수 플래그를 추가하여 설명이 무엇인지 알려줍니다. 나중에 추가 할 경우를 대비하여 확장 성도 제공합니다.

4

키 조합을하면 키 구조가 엉망이됩니다. 널 사용할 수있는 외래 키나 키의 "소프트"키 구조가 있어야하고 입력해야합니다. 나는 그들을 별개로 유지할 것이다.

+0

그래, 그게 내가 겪고있는 문제였다. – scottm

+1

두 개의 서로 다른 "엔티티"와 관련이있다. 나는 그들이 함께 속한다고 생각하지 않는다. – Gratzy

+0

그들은 서로 다른 엔티티와 관련되어 있지만 둘 다 주석이다. – scottm

관련 문제