문제

a에 대한 답 DB 디자인에 대한 광산 문제 단일 테이블 상속이라는 것을 제안했습니다. 나는 그것에 대해 약간의 검색을했지만, 그것에 대해 그다지 명확한 정보를 찾을 수는 없습니다.

기본적으로 내가 이해하는 것은 모든 필드와 유형 필드가있는 큰 테이블이 있다는 것입니다. 그런 다음 ORM 레이어는 유형 필드를 사용하여 다른 객체보기를 제공합니다. 그 맞습니까?

더 중요한 것은 단일 테이블 상속이 '승인 된'데이터베이스 설계 기술입니까? 그것은 그것을 사용하는 것이 '현명하다'는 것을 의미합니까? 또한 사용하는 것이 안전합니까, 아니면 문제가 발생합니까?

다른 문제는 이것이 철도에서 얼마나 잘 작동 하는가입니다. 나는 레일에서 그것에 대한 몇 가지 언급을 발견했지만, 비 전통적인 방식으로 일을함으로써 문제를 일으킨다.

도움이 주셔서 감사합니다.

도움이 되었습니까?

해결책

좋은 생각인가요? 때에 따라 다르지. 테이블에 단일 목적이 없다는 점에서 정규화를 중단합니다. n 번째 기본 클래스를 연장하면 어떻게됩니까? 테이블에 열을 추가해야합니다. 대부분의 최신 DBS는 테이블을 수정할 수 있으므로 문제가 없지만 수정 및 클래스를 제거하는 것은 어떻습니까? 이제 목적이없는 열이 있습니다.

경험의 규칙 - 대부분의 디자인이 해결 된 경우 사용하는 것이 안전 할 것입니다. 디자인이 자주 변하는 경우 다른 문제가 있으므로 사용 사례/사용자 요구 사항을 잠쳐야합니다. (예, 실제로 XP 친화적이지 않습니다)

나는 Rails 효과에 대해 모른다.

다른 팁

STI는 객체와 데이터베이스 지향적 사고 사이의 불일치를 다루는 방법입니다. 데이터베이스 내 정보를 합리적으로 표현하고 객체 모델 내에서 다른 표현을 허용합니다.

예를 들어, 각 제품에 하나 이상의 수수료가 포함 된 응용 프로그램이 있으며 각각은 약간 다르게 계산됩니다. 내 객체 모델 내에서 나는 수수료 클래스의 서브 클래스를 원합니다. 각각은 스스로 계산하는 방법을 알고 있습니다. 그래도 수수료 당 테이블을 갖고 싶지는 않습니다. 값이 관련 하위 클래스의 이름에 해당하는 열. activerecord는 그 후 배관을 처리합니다.

요컨대, 단일 테이블 상속 (STI)은 데이터베이스에 OOP 상속 관계를 매핑 할 수있는 설계 패턴입니다. ActiveRecord 모델 객체에서 서브 클래스를 정의하면 STI를 고려해야합니다.

STI는 (원래?) Martin Fowler의 'Enterprise Application Architecture의 패턴'책에 기록되어 있으며 DHH의 Canonical Rails Book 'Rails with Rails'(섹션 18.4, 생각합니다)에도 설명되어 있습니다. 그들은 내가이 공간에서 할 수있는 것보다 훨씬 더 나은 설명을 제공합니다.

나는 www.matthewpaulmoore.com (이 스레드에서 Robintw에 의해 링크 된)에서 표현 된 감정에 강력하게 동의하지 않습니다. 이것은 OOP 상속의 사용을 할인하는 다소 순진한 견해 인 것 같습니다. 나는 STI를 사용하여 레일에 우아한 솔루션을 만들었지 만 디자인 패턴을 남용 할 수 있다고 생각합니다.

결정적인 참조. 단일 테이블이 공통 기본 클래스가있는 여러 객체를 저장할 수 있습니다.

Ruby on Rails는 라이브러리를 사용합니다 활성 기록. 이것은 STI를 지원하는 일반적인 루비 프레임 워크입니다.

테이블 당 유형 (TPT) 기능을 포함하는 (신규) Ado Entity 프레임 워크 관점에서만 말할 수 있습니다.

여기 핵심 개념 (엔티티 프레임 워크 사용)을 소개하는 일련의 블로그 게시물이며 MSDN 용지도 있습니다. 여기.

TPT에 nhibernate를 사용할 때 약간의 지침이있는 것 같습니다. 여기.

이 링크가 설명되어 있습니다 SQL Server의 테이블 당 유형 상속. 이것은 개념에 대한 좋은 요약과 소개를 가진 것 같습니다.

나는 그것이 레일에 어떤 영향을 미칠지 잘 모르겠습니다.

방금 봤어요 http://www.matthewpaulmoore.com/articles/1276-ruby-on-rails-code-quality-checklist#sti 그것은 나쁜 생각을 암시합니다.

일반적으로 나는 그것이 유용하다고 생각하지만 나는 몇 가지 버그를 발견했습니다

해당 링크의 예는 사용 방법에 대한 유용한 그림을 제공 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top