問題タブ [single-table-inheritance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
219 参照

inheritance - propel 1.5.2 での継承の問題

propel 1.3 と 1.4 では、次の継承構造がうまく機能しました。

ただし、propel 1.5 では、新しい継承を作成するときに言う

次のエラーが表示されます

これをほぼ解決するために、 extends セクションから lib.propel を削除できます。しかし、継承クラスを参照する継承を作成すると、同じエラーが発生します。

(lib.propel の有無にかかわらず)

これがバグなのか設定の問題なのかはわかりませんが、この状況を扱ったドキュメントが見つかりません。上に貼り付けた表の baseClass からわかるように、ここに使用するクラスと、rwf.lib という別のディレクトリにあるクラスがあるため、lib.propel を記述できるようにする必要があると思います。

誰かが私を正しい方向に向けてくれることを願っています。

0 投票する
1 に答える
1080 参照

ruby-on-rails - Ruby on Rails でのコントローラーの継承 -- 親クラスでのモデルとコントローラーへのアクセス

親の時間を持つ StudentHours と TeacherHours で単一テーブルの継承を使用しています。

モデル コードはほとんどが hour.rb にあり、student_hour.rb と teacher_hour.rb にはほとんどありません。

ここで、ほとんどのコントローラー コードも重複していることに気付きました。そのため、hours_controller を作成して、students_controller と teacher_controller の親にしました。Hours_controller は TeacherHours.new などのモデル オブジェクトをインスタンス化するため、次のような子クラスにアクセサーを作成しました。

...その後、hours_controller は単に MyModel.new を呼び出します

他のモデルが参照されることもあり、ビューで「render」を呼び出すこともあるので、それらの子クラスにもアクセサーを作成しました。

他の人がこれを行っている例が見つかりません。それで、これは何らかの理由で悪いのでしょうか、それとももっと良い方法がありますか?

0 投票する
3 に答える
692 参照

ruby-on-rails - Rails の単一テーブル継承はどのように機能しますか?

ユーザーテーブルと、新しく作成した教師があります。教師はユーザーのサブクラスであるため、足場ジェネレーターを使用して教師テーブルを生成し、モデルを変更して、教師がユーザーのサブクラスになるようにします。その後、db:migrate を実行しました。それから、私はに行きます

http://localhost:3000/teachers/new

エラーが表示されます:

それで、私の質問は私が何を間違えたのですか?ユーザー登録を行うためのページを作成したいのですが、ユーザーは教師/生徒にしかなれません。でも、先生の記録を追加することはできません... ...さらに、私はに行きます

http://localhost:3000/users/new

ユーザーが自分のユーザーを「教師」または「学生」に登録できるようにするコンボボックスが必要です。しかし、私が期待したようにすべてがうまくいかないようです。私は何をする必要がありますか?大変お世話になりました。

0 投票する
4 に答える
33903 参照

java - 休止状態の単一テーブル継承とスーパークラスのフィールドを識別子列として使用

Hibernateエンティティ階層には次の種類のクラスがあります。私は2つの具体的なサブクラスとを作成しようとしていSub1ClassますSub2Classfieldこれらは、で定義されている識別子列()で区切られていますMappedSuperClassEntitySuperClass他のエンティティによって参照される抽象エンティティクラスがあります。Sub1Class他のエンティティは、実際に参照しているか、またはを参照しているかどうかを気にする必要はありませんSub2Class

これは実際に可能ですか?現在、このエラーが発生します(列定義は、Sub1ClassとEntitySuperClassで2回継承されるため):

に追加@MappedSuperClassするとEntitySuperClass、hiberanteからアサーションエラーが発生します。クラスがエンティティであり、マップされたスーパークラスであるかどうかはわかりません。@Entityから削除するEntitySuperClassと、クラスはエンティティではなくなり、他のエンティティから参照できなくなります。

MappedSuperClassは外部パッケージの一部であるため、可能であれば変更しないでください。

私のクラス:

0 投票する
3 に答える
16943 参照

ruby-on-rails - 単一テーブル継承を使用したRailsのActiveRecordクラスのタイプの変更

私には2つのタイプのクラスがあります:

これは、Authlogicの認証システムを使用してacts_as_authenticします。この継承は、単一テーブル継承を使用して実装されます

新しいユーザーが登録する場合、私は彼をユーザーとして登録します。ただし、同じメールアドレスのBaseUserが既にある場合は、BaseUserからUserにすべてのデータをコピーして新しいユーザーを作成するのではなく、そのBaseUserをデータベース内のUserに変更したいと思います。 id)。これは可能ですか?ありがとう。

0 投票する
3 に答える
1926 参照

sql - ビューで結合された単一テーブル継承または複数のテーブルを使用する必要がありますか?

ノートテーブルがあるとしましょう。メモは、特定のアカウント、注文明細、または注文に関するものにすることができます。

  • アカウントに関する注記は、特定の注文ラインまたは注文には適用されません。
  • 注文明細に関する注記は、親注文と注文に添付されているアカウントにも適用されます。
  • 注文に関する注記は、添付のアカウントにも適用されますが、注文ラインには適用されません。

NOTES表

クライアントを表示すると、何らかの形で関連しているすべてのメモを表示できるという考え方です。最初に、上記のそれぞれについてメモテーブルを作成し、ビューでそれらを結合しました。ここでの問題は、レコードの編集/削除にあります。メモは、特定のアイテムで、またはアカウントまたは注文の一般的なメモビューで編集/削除できます。この方法はそれをより困難にしました。

次に、単一テーブル継承パターンに切り替えました。私のメモテーブルには、AccountId、OrderId、およびOrde​​rLineIdのnull許容値があります。また、レコードを明示的に識別するためにNoteTypeIdを追加しました。更新/削除シナリオの管理がはるかに簡単です。

このアプローチにはまだいくつかの問題と質問があります。

  • 整合性-複雑な制約はSQLやコードで設定できますが、ほとんどのDBAはSTIアプローチを望んでいません。
  • 多数のnullの概念が議論されています(ただし、SQL 2008のパフォーマンスはnull値の格納に基づいて改善されたと思います)
  • RDBMSのテーブルは、コードでオブジェクトを表す必要はありません。テーブルの正規化は、テーブルが一意のオブジェクトである必要があるとは言いません。私は前の2つの文が真実であると信じています、あなたは何と言いますか?

ここでいくつか議論しました。 データベース内のnull許容列の乱用は「コードの臭い」ですか?私はイアンに同意すると言わざるを得ませんが、反対の見方もいくつか望んでいます。

0 投票する
4 に答える
20453 参照

ruby-on-rails - STI を使用するときに ActiveRecord オブジェクトを別のクラスにキャストする方法は?

現在、ActiveRecord の単一テーブル継承を使用しています。

モデルの 1 つをタイプ A から B にキャストするにはどうすればよいですか? 彼らは同じ親を持っています。

0 投票する
1 に答える
262 参照

ruby-on-rails - 複数のデータ ソースから同じモデルを作成する

これは主に設計パターンの問題です。複数のソースから作成するためのデータを取得する 1 つのタイプのモデルがあります。たとえば、あるレコードは API から作成され、別のレコードは Nokogiri を使用したスクリーン スクレイピングによって作成されます。

私の問題は、これらのさまざまなデータ ソースをどのように抽象化するかということです。現在、モデルの属性を設定するために使用する同じハッシュを返す lib クラスを構築しています。しかし、これはSTIを使用するケースではないのではないかと思います. または、これを行う他の方法がある場合、私は考えていません。

0 投票する
1 に答える
179 参照

java - これは休止状態の良いデザインですか?

SINGLE_TABLE 継承に親エンティティServiceと子ExtendedServiceがあります。

3 番目のエンティティServiceCollectorには、エンティティService と ExtendedService の両方を含める必要があります。これは固定要件であり、この設計ではポリモーフィズムを使用して実現できます。

問題: 親クラスの Service のみを取得する必要があることが非常に多いため、識別子の列でクエリを実行します...これは私の目的にとって悪い設計だと思います。そうではありませんか?

これは単純な例です。実際、私は多くの Service サブクラスを持っています。たとえば、さまざまな製品を販売するショップでは、各製品が異なるプロパティを持つことができると考えてください。

前もって感謝します。

0 投票する
1 に答える
692 参照

entity-framework-4 - Entity Framework 4 の TPH 継承シナリオでナビゲーション プロパティを識別子として使用する

外部キー/ナビゲーション プロパティをディスクリミネータとして使用して TPH 継承階層を作成しようとしていますが、正しく作成するのに問題があります。

次のエンティティがあります。

withPlaneIdCarIdbeign FK。データベースに対応するテーブルがあり、VS2010 EF ウィザードを使用して概念モデルを作成できます。Personエンティティには、2 つのナビゲーションプロパティCarPlane.

ここで、Person から 2 つの型を派生させたいと思います。

そこで、エンティティ Pilot を追加し、それを Person にマップするように指示し、 condition を追加しますPlaneId is not null。この時点で、Visual Studio (または edmgen だと思います) は、プロパティがPerson.PlaneId with 'IsNull=false' condition must be mapped.

私の次のステップは何ですか?私はさまざまなアプローチを試みましたが、うまくいかないようです。どんな洞察も大歓迎です。