質問

DB設計に関する私の質問に対する回答は、単一テーブル継承と呼ばれるものを示唆しています。少し検索をしましたが、それほど明確な情報が見つからないようです。

基本的に、そこからすべてのフィールドとタイプフィールドを持つ大きなテーブルがあり、ORMレイヤーがタイプフィールドを使用してさまざまなオブジェクトビューを提供していることを理解しています。正しいですか?

さらに重要なことは、単一テーブルの継承は「承認された」データベース設計手法ですか?それによって、私はそれを使用することが「賢明」であることを意味しますか?使用しても安全ですか、それとも問題を引き起こしますか?

他の問題は、これがレールでどれだけうまく機能するかです。レールからいくつかの参照を見つけましたが、従来とは異なる方法で物事を行うと問題が発生しますか?

ご協力ありがとうございます。

役に立ちましたか?

解決

それは良い考えですか?場合によります。テーブルが単一の目的を持っていないという点で、正規化を壊します。基本クラスをn回拡張するとどうなりますか?テーブルに列を追加する必要があります。最近のDBのほとんどは、テーブルを変更できるので問題はありませんが、クラスのリファクタリングと削除はどうですか。これで目的のない列ができました。

経験則-デザインのほとんどがうまく機能していれば、おそらく安全に使用できます。設計が頻繁に変更される場合-他の問題があり、ユースケース/ユーザー要件をロックダウンする必要があります。 (はい、実際にはXPフレンドリーではありません)

Railsの効果については知りません。

他のヒント

STIは、オブジェクト指向とデータベース指向の考え方の不一致に対処する方法です。データベース内の情報の合理的な表現とオブジェクトモデル内の異なる表現が可能になります。

たとえば、各製品に1つ以上の料金が含まれ、それぞれがわずかに異なる方法で計算されるアプリケーションがあります。オブジェクトモデル内で、Feeクラスのサブクラスが必要です。各サブクラスは、それ自体の計算方法を知っています。しかし、実際には料金タイプごとにテーブルを持ちたくないので、基本クラスとしてFeeを作成し、すべてのサブタイプに必要なすべてのフィールドの和と「type」quot ;関連するサブクラスの名前に対応する値を持つ列。 ActiveRecordはその後配管を処理します。

要するに、Single Table Inheritance(STI)は、OOP継承関係のデータベースへのマッピングを可能にする設計パターンです。 ActiveRecordモデルオブジェクトからサブクラスを定義する場合は、STIを検討する必要があります。

STIは(元々?)Martin Fowlerの「Patterns of Enterprise Application Architecture」の本に記載されており、DHHの標準Rails本「Agile Web Development with Rails」にも記載されています(セクション18.4、と思います)。これらの本は、このスペースで私が望んでいたよりもはるかに良い説明を提供するからです。

www.matthewpaulmoore.com(このスレッドのrobintwにリンク)で表明された感情には、STIが本質的に悪いことであることに強く反対します。これは、OOP継承の使用を軽視する、やや素朴なビューのようです。 STIを使用してRailsでエレガントなソリューションを作成しましたが、デザインパターンを悪用する可能性があります。

決定的な参照。単一のテーブルに、共通の基本クラスを持つ複数のオブジェクトを保存できます。

Ruby on Railsは、アクティブレコードというライブラリを使用します。これは、STIをサポートする一般的なRubyフレームワークです。

タイプごとのテーブル(TPT)機能を含む(新しい)ADO Entity Frameworkパースペクティブからのみ話すことができます。

ここはコアフレームワーク(Entity Frameworkを使用)を紹介する一連の優れたブログ投稿と、MSDNの論文もありますこちら

TPTにnHibernateを使用する際のガイダンスもあるようです。こちら

table-per-typeの継承を説明するこのリンクがあります。 SQL Serverで。これは概念のかなり良い要約と紹介があるようです。

Railsにどのような影響があるかわかりません。

通常は便利ですが、いくつかのバグが発生しました

そのリンクの例は、あなたがそれをどのように使用するかの有用な図を提供するかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top