3

Rails 프로젝트의 데이터베이스 다이어그램을 계획 중입니다.
답글 (게시물에서 상속), 질문 (게시물에서 상속) 및 댓글과 같은 엔티티가 있습니다.
설명은 답변 또는 질문에 속합니다.
어떻게해야합니까?Rails 데이터베이스의 상속

저는 각 질문과 각 답변에 대한 항목이있는 질문 및 답변 테이블을 가지고있는 동안 게시 테이블을 만드는 방법을 생각했습니다. 그렇다면 주석과 게시물을 연결하는 표가 있습니다.
이 솔루션은 깨끗하지 않고 충분히 일반 적이라고 생각합니다.

가장 효과적인 방법은 무엇입니까?

편집 :
은 내가 STI (단일 테이블 상속) 솔루션에 관심이 아니에요. 우리는 효율적인 솔루션을 찾고 있습니다. (희망적으로) 많은 게시물을 가진 대규모 프로젝트가 될 것이기 때문입니다.

+0

STI가 효율적입니다. –

+0

@Hizki 당신은 결국 무엇을 했습니까? –

답변

3

기본 Rails 상속 모델은 단일 테이블 상속이며 가장 간단하고, 가장 깨끗하고, 가장 일반적이고, 데이터베이스와 관련없는 대부분의 작업입니다.

단순히 답과 질문을 게시에서 상속 받아 수행합니다. 그런 다음 게시, 응답 및 질문에서 원하는 모든 필드가있는 게시물 테이블을 만듭니다.

게시물 테이블의 모든 행이 모두 게시, 응답 및 질문 필드를 갖기 때문에 단일 테이블 상속이 가장 공간 효율적인 기술은 아닙니다. 하지만 기존의 방식과 달리 공간 문제에 직면하면 다중 테이블 상속과 같은보다 확장 성이 뛰어난 데이터 모델로 마이그레이션하는 것이 유리합니다. 단일 테이블 상속은 ID별로 게시물을 찾기 위해 단일 쿼리 만 필요하다는 점에서 효율적입니다. 다른 데이터 모델에서는 게시물이 포함 된 테이블 (게시, 질문, 답변)을 찾는 추가 쿼리가있을 수 있습니다.

댓글과 게시물을 연결하는 경우 댓글을 가리키는 게시물 모델에서 게시물을 가리키는 댓글 모델과 has_many 관계를 belongs_to 릴레이션으로 사용할 수 있습니다. 이 작업을 수행하려면 주석 테이블에 post_id 정수 필드를 추가해야합니다.

cf. http://guides.rubyonrails.org/association_basics.html

게시물의 모든 댓글을 빠르게 쿼리하려면 post_id에 대한 의견 색인을 추가해야합니다 (http://guides.rubyonrails.org/migrations.html).

+0

나중에 대체 할 수있는 확장 불가능한 솔루션으로 시작하는 것이 좋다고 생각하지 않습니다. 그런 다음 같은 질문을 할 것입니다 ... – hizki

+1

단일 테이블 상속이 아닙니다. "비 확장 성"이면 데이터베이스에 열을 추가하기 만하면됩니다.단일 테이블 상속을 권장하는 이유는 Rails에서 상속을 수행하는 것이 일반적인 방법입니다. –

+0

당신은 어딘가 어딘가에서 "더 확장 성있는 데이터 모델로 마이그레이션"하고 싶다고 썼습니다. 그 해결책을 처음부터 찾지 않는 이유는 무엇입니까? – hizki

2

STI 사용을 통한 다형성 연관을 사용해야합니다.

예를 들어, 귀하의 경우 실제로 수퍼 클래스 게시를 원할지 여부를 질문해야합니다. 어쩌면 질의 응답은 같은 iherarchy에 속해서는 안되며 어쩌면 둘 다 polymorphic association을 통해 수업 댓글에 연결되어야합니다. 즉 : 아마도 '주석 가능'으로 표시되어야합니다.

+0

@gkop의 솔루션에 대한 내 의견보기 ... 귀하의 것과 거의 같습니다. .. – hizki

+0

죄송합니다. 이것은 실수였습니다. 나는 그것을 고쳤다. 사실 다형성 협회를 고려해 보라고 조언하고 싶었습니다. 이것들은 쉽게 색인화 될 수 있으며 (id와 type에 구성된 키) 개별 테이블에 모든 것을 가질 수 있습니다. 그것은 확장 성 또는 비 확장 성의 문제가 아닙니다. 데이터베이스가 STI가 허용하는 것보다 더 정상화되기를 바랄 때와 더 관련이 있습니다. –