レールのSTI(単一テーブル継承)は、混乱したデータモデルと準最適なデータベースにつながるので、私たちは皆知っています。ActiveRecordのPostgreSQL継承?
しかし、PostgreSQLは継承をきれいに処理するようです!
痛いほどワイドなテーブルと "タイプ"の列ではなく、Postgresの継承を利用しながら、レールのきれいなSTI APIを取得する方法はありますか?
レールのSTI(単一テーブル継承)は、混乱したデータモデルと準最適なデータベースにつながるので、私たちは皆知っています。ActiveRecordのPostgreSQL継承?
しかし、PostgreSQLは継承をきれいに処理するようです!
痛いほどワイドなテーブルと "タイプ"の列ではなく、Postgresの継承を利用しながら、レールのきれいなSTI APIを取得する方法はありますか?
短くても、今のところあなたが達成しようとしているものに対してはきれいなSTI APIはありません。
私は実際には約一年前にそのAに見て、それはいくつかの理由のために良いアイデアではないという結論に達した:
ほとんどのITの問題は、本当にこれに降りてくる:給付対努力を。あなたのケースでは
あなた自身にこの質問をする必要があります。
PS:また
あなたのアプリでSTIを構造上のクイックヒント:あなたはすべてを継承しProductCategory、CommentCategory、PhoneCategory、ClientCategoryのようにSTIを使用する機種の多くを持っていることが判明した場合Cateogoryから - 私はモデルディレクトリ内のフォルダにそれらを整理する傾向があります。 PostgreSQLは非常に美しく、継承を扱うように見えるしかしconfig.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/**}')]
過程で今まであなたを持っている場合あなたのキャリアスイッチ本番データベースエンジンの?:P私は、ビッグ・ボーイの企業の話ではなく、ご自分のHSの友人と始めた「起動」とあなたは最高経営責任者(CEO)だと、彼女は、真のCTO – Volte
ソートだとしています。はい、あなたは通常、あなたがそうしなければ、多くのことを実用的な実装に切り替えることはありません.Twitter&Facbookは、春に心に響く主要な例です。あなたはしばらくの間、新しい設定に移行しました。 - それは私に数回起こった私は、古い時代遅れのセットアップから内部のアプリケーションを移行する必要がありました – konung
@bwicklund - 。ほかの質問はActiveRecordの中のPostgreSQL&STI(レール)について、そこにあればでした答えは単純な場合を除いてSTIを処理するためのいいクリーンな方法がなかったということでした。なぜ私はその理由を説明しました。ちょうどあなたがそれが間違っているという意味ではないという答えが気に入らないからです。あなたがより良い説明を持っているなら、あなた自身の答えを自由に提供してください。 – konung
:次にapplication.rbにだけ行を追加します!
本当に?small print in the manualを詳しく見ましたか?例えば:
capitals
はcities
を伸ばします。 address
テーブルはcities
を参照したいと考えています。できる。しかし、capital
のアドレスは使用できません。これら二つのことは、小さな「Hello World」のプロジェクトを超えたもので非常に重要です。だから、PostgreSQLの継承を使用して生産性を実現できるとは想像もできません。
実際に私が理解しているように、テーブルシャーディングには非常に便利です。しかし、現時点でモデル空間の継承には適していないことは事実です。 – Divide
ほとんどの場合、これを使ってテーブルシャーディングを行うことはできません。複数のユニーク制約がある場合は、ネジ止めされます。また、ほとんどのフレームワークでは代理キーが使用されるため、アプリケーションデータに固有の制約が1つもないことがあります。 –
もちろん、サロゲートキーを使用している場合、シャーディングはしばしば難しくなります。 PSQLドキュメントは、シャーディングの良い例があります。http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html – Divide
「だから、我々はすべてそれが雑然とデータモデルと次善のデータベースにつながるため、RailsのSTI(単一テーブル継承)が不快であることを知っています。」 ---私はこの前提を受け入れません。 –
オーケー、多分それは一般化のビットがあります..しかし、それはあなたがの完全な大規模なワイド・テーブルで終わるそうでなければ...あなたの子供のモデルが他の子供たちには適用されないプロパティの多くを持っていないときだけ良いアイデアをする傾向がありますヌル可能な列。レールの観点からは大丈夫かもしれませんが、データベース上で未処理のSQLを実行するとちょっと醜いことがあります。おそらくPostgreSQLの継承はそれほど速くはありませんが、少なくともそれはすべて私から離れています! :P –
Postgresの継承はシームレスに収まるので、 'type'カラムで十分であるとは思いませんか?私は 'すべての関連する列を返します(と私はあまりにもすべて関連付けられていない列を推測SELECT *'、相続で見てきたものから :/ ...しかし、あなたのDB構造がきれいになり – stuartc