問題タブ [class-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.
sql - この実体関連をより正規化できますか
アーティスト
ArtistFolder
フォルダ
スケッチ
私が今欲しいのはこれです:
1人のアーティストがN個のスケッチを持っています。
テーブルSketchに新しいフィールドを追加する必要があります:ArtistId
フォルダのスケッチを挿入するとき、このフィールドは常に空/nullになります。
あなたが知っているより良いデザインはありますか?
c# - Entity Framework で型テーブルとテーブル継承を組み合わせる
table+class 、さまざまなタイプの を表すA
別の table+class 、およびから継承するtable+classがあるとします。AType
A
B
A
B
は特定のタイプの ですA
が、データ レベルで他のタイプの に適合するには複雑すぎるためA
、スキーマ レベルで独自のテーブルが必要です。もちろん、それは独自のクラスです。
B
はまだ のタイプなA
ので、 をAType
表すレコードが必要B
であり、実際にはtype
である レコードのフィールドはのそのレコードを指します。また、から継承するテーブルとクラスをさらに追加し、それらの PK をハードコーディングできるようにしたいと考えています。A
B
AType
A
ここで、SQL を直接使用していた場合A
、PK として負の値を持つ の継承者のレコードを作成したことになります。そうすれば、正の PK を持つデータ レベルで追加された新しいAType
は、ハードコーディングされたスキーマ レベルのレコードと競合することはありませんA
。見なくてもソフトタイプAType
。
私は Entity Framework を初めて使用するので、従来の方法を試す前にハッカー スタイルのソリューションを適用したくありません。では、Entity Framework でこの問題に取り組むための規則は何ですか?
database-design - さまざまなテーブルを指すFK列
プロジェクトでここで説明されているようなテーブルを使用するように誰かが私に提案しました。理由はわかりませんが、それは良い考えではないと思います。
MyTable(MyTableId PK、タイプINT NOT NULL、MyForeignKey INT NOT NULL)
MyForeignKeyは、Typeの値に応じて、さまざまなテーブルのデータを指すことができます。もちろん、そのようなモデルを使用してFKの整合性を強制することはできませんが、この議論はそれを使用しないのに十分ですか?
これを使用できる場所の例を示します。さまざまなオブジェクトに関するNotesを保存するためのNotesテーブルがシステムにあるとします。ユーザー、ドキュメントなどに関するメモ。通常、私はこれを次のようにモデル化します。
メモ(NoteId PK、Text VARCHAR(4000)、UserId INT NULL、DocumentId INT NULL、...)
私の同僚が提案しているのは、代わりにそのようなテーブルを用意することです。
メモ(NoteId PK、Text VARCHAR(4000)、ObjectType、ObjectId)
2番目の実装では、ObjectTypeは、ObjectIdがUsersテーブルまたはDocumentsテーブルの行を指しているかどうかを示します。別のタイプのオブジェクトを追加する場合は、データベース構造とコードの変更が少なくて済むという利点があります。
各ソリューションの長所と短所は何ですか?
注:無数のオブジェクトタイプが存在することはありません。10未満のままにする必要があります。
実際、私たちの実際のシナリオはもう少し複雑です。これは、ユーザーがさまざまなタイプのオブジェクト(ドキュメント、メモ、イベントなど)にアクセスできる場合とできない場合がある許可システムと関係があります。
したがって、今のところ私のデータベースモデルには、これらのオブジェクトのテーブルと、オブジェクトとユーザー(UserDocuments、UserNotes、UserEventsなど)との関係を作成するための追加のテーブルがあります。アクセス許可は、これらのリンクテーブルの属性を介して設定されます。
私の同僚は、代わりにこのような単一のパーミッションテーブルを持つことを提案しています
パーミッション(PermissionId PK、UserId INT、ObjectType、ObjectId、...その他のパーミッションフィールド...)
これは良い考えですか?
また、これをEAVまたはOpen Schemaと呼ぶことはできますか?それは私がそれらのトピックについて読んだものとまったく同じではありません。
python - SQLAlchemy、テーブル継承による結合クエリのフィルタリング
まず最初に、私がやろうとしていることがスモーク クラックであることが判明した場合は申し訳ありません。私は決して DB や SQLA の専門家ではありません。=)
テーブル継承を使用して Contact から継承する Person と Organization の 2 つのクラスがあります。( Person.id は Contact.id の fkey です)、正常に動作しています。
検索ボックスから検索して、すべての連絡先のリストを取得したい。通常、一連のことをしたいときは、次のようにします。
そして、他の場所でクエリが実行されます。問題は、連絡先オブジェクトのリストを取得したいのですが、検索フォームの「名前」ボックスに入力された値から、すべて Organization.name、Person.name_last、および Person.name_first でフィルタリングしたいことです。1 つのクエリでこれを行う方法がわかりません。それが可能かどうかもわかりません。ただし、結果がインターリーブされた 2 つの個別のクエリを使用することは避けたいと思います。
上記を可能にするフィルタリングカンフーはありますか?すなわち
- 次のすべての連絡先を取得します。
- 連絡先が個人の場合、name_last または name_first が一致する
- 連絡先が組織の場合、名前が一致している
ありがとう
イアン
ruby-on-rails - Ruby on Rails の継承
私はRailsアプリケーションで次のモデル構造を実現したいと考えています.Value、DecimalValue、およびTextValueの3つの個別のテーブルがあり、DecimalValueとTextValueはValueから継承されます。Value には ID のみを含める必要があり、子テーブルはその ID を参照する必要があります。このベースの ROR を実装するにはどうすればよいですか?
値モデル (id、タイプ) DecimalValue (value_id、value:decimal) TextValue (value_id、value:string)
前もって感謝します!
doctrine-orm - Doctrine2: マップされたスーパークラスの OneToMany
私のDB構造は次のとおりです。
仕事:
- CTIテーブルワーク
- Workを拡張するMappedSuperclassテーブルAbstractImageWork
- AbstractImageWorkを拡張した最終テーブルPhotoWork
コメント:
- MappedSuperclassテーブルコメント
- Commentを拡張する最終テーブルWorkComment
WorkCommentはWorkに対して ManyToOne の関係を持っています:
WorkはWorkCommentと OneToMany の関係にあります。
問題は、Doctrine がスキーマの更新中に次のエラーを表示することです。
これは、 MappedSuperclass AbstractImageWorkがWorkとPhotoWorkの中間にあることに関係していると思いますが、実際にはこの関係を MappedSuperclass ではなく CTI テーブルに置きました..では、Doctrine はなぜこのように動作するのでしょうか?
何か案は?
inheritance - Doctrine2 継承とクエリビルダー
Doctrine 2.1 で継承を使用しています:
Fiche はマスター エンティティであり、Artist は Fiche から派生したものです。
so : フィッシュ -> アーティスト
次に、 Abonnement という別のリポジトリにこのメソッドがあります。
Abonnement ORM の定義は次のとおりです。
ここでの問題は、常に Fiche ではなく Artist エンティティを渡すことで、次のエラーが発生します。
タイプ 'Teelt\FicheBundle\Entity\Artist' の式は、このコンテキストでは許可されていません。
したがって、アーティストから Fiche を取得する必要があると思います...同じオブジェクトなので、悪いように聞こえます!
c# - 階層ごとのテーブルと将来の証明
NHibernate を使用してデータベースに「コマンド」を保存するアプリケーションに取り組んでいます。各コマンドには一連の引数があります。たとえば、「sleep」コマンドには持続時間があり、「set text」には文字列値があります。これらのコマンドはすべて、同じCommand
基本タイプから派生します。
データベースへの影響を最小限に抑えながら、将来的にコマンドを追加できるようにしたいと考えています。私の最初の反応は、階層ごとのテーブルパターンを使用することです。必要なスキーマの変更は、コマンド テーブルに列を追加することだけだからです。
また、TPH パターンを使用することも検討しましたが、特定の列ではなく汎用列をマッピングし、それらをクラス自体の特定の (厳密に型指定された) プロパティ値に変換します (つまり、マップされた汎用文字列プロパティを厳密に型指定されたパブリック プロパティでシャドウします)。 . そうすれば、コマンドが必要とする可能性のあるほとんどの引数に等しい列数があれば、テーブルをまったく変更する必要がありません。これらは私の頭の中では少しハックに思えましたが...
データベース設計と NHibernate の使用に比較的慣れていないので、誰かがこれらのアプローチの穴を指摘したり、より良い方法を提案したりできますか? 将来の拡張と単純な C# API を可能にしながら、スキーマの変更を (可能な限り) 回避しようとしています。
java - 同じ階層の各サブクラスのコレクションを 1 つの所有クラスにマップする方法は?
Hibernate 4.0.0.Final に裏打ちされた JPA 2.0 アノテーションを使用して、同じ階層の各サブクラスのコレクションを 1 つの所有クラスにマップする方法を知っている人はいますか?
少し複雑なので、ここに例を示します。階層クラスは次のようになります。
これはすべて問題ないように見えます。オブジェクトを永続化すると、オブジェクトが適切な識別子と適切な所有者とともにデータベースに格納されることがわかります。
これが私の「所有」クラスです-その注釈について特別なことは何もありません:
2 つの List コレクションにはゲッターがあります。getSubClassOnes() を呼び出すと、関連付けられているすべてのエンティティのバッグが、SubClassOne 型として返されます。データベースに SubClassTwo 識別子があるエンティティも含まれます。getSubClassTwos() を呼び出すと、SubClassTwos のバッグのように見えるものを取得しますが、実行時にコレクションを反復処理すると、これが爆発します
initialize(AbstractPersistentCollection.java:379) [hibernate-c at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112) [hibernate-core-4. org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266) [hibernate-core-4.0.0.Final.jar:4.0.0.Final] で
私が実現したいのは、getSubClassOnes() がクラス SubClassOnes を持つ所有者に関連付けられたコレクションを含むコレクションを返し、getSubClassTwos() が関連する SubClassTwos を持つコレクションを返すことです。どうすればこれを達成できるか知っている人はいますか?
mysql - 2 種類のユーザー向けのデータベース設計
ユーザーが自分の Web サイトでアカウントを作成する方法は 2 つあります。
を。通常の登録フォーム (電子メール、パスワード) b. Facebook Connect 経由の登録 (fb_userid、email)
MySQL (InnoDB エンジン) を使用してこれを実装するベスト プラクティスはどれですか?
私のアプローチ:
何を指示してるんですか?