問題タブ [legacy-database]
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.
grails - Spring Security Grails プラグインは既存のデータベース スキーマで動作しますか?
最近、既存のデータベース スキーマに Grails + Spring Security を実装したいという状況に遭遇しました。データベースには、ユーザー テーブル、ロール ベースのテーブル、およびロールとユーザーの関係テーブルが既にありました。ユーザー ドメインを既存のスキーマにマップすることはできますが、ロールとユーザー ロールを結び付けようとすると問題が発生します。
何か案は?これは理にかなっていますか、それとももっと情報を含める必要がありますか?
frameworks - レガシ データベースがある場合、フレームワークをあきらめるべきですか?
どこを見ても、(どの言語の) フレームワークも新しい実装に合わせて調整されているようです。また、レガシー データベースのフレームワークで ORM を使用することは、通常のことではないようです。
私はデータベースを持っています.20年ほど前のもので、それらすべてにWebフロントエンドが必要です.いくつかは別々のWebページにあり、いくつかは1つのページにデータベースを組み合わせています. 他のものはそれほど古いものではありませんが、Oracle、Sql Server、FoxPro でさえ制御できません。私がしなければならないことのほとんどで、新しいデータベースはありません。それらはすべて既存のものです。
フレームワークは私にとって間違ったソリューションですか? フレームワークなしで MVC を使用できますか? mvc 以外の実装を避けるために何をすべきかわかりません。
考えてくれてありがとう。
編集:
多くのレガシー データベースがあり、それらで ORM を使用するのは非常に難しいようです。ORMなしでMVCパターンを持つことは可能ですか? それを可能にするフレームワークを推奨できる人はいますか?
あらゆる言語とあらゆるプラットフォームを使用できます。PHP、Python、Java、C# など。フレームワークを接着しても問題ありません。私は気にしない。私が望まないのはハックです。つまり、フレームワークが、コードの一部 (別名ハック) によって意図されていたことを実行しないようにすることです。違反はありません。私はそのように始めたくないだけです。
私の主な関心事は、ロジックとプレゼンテーションのレイヤーを混ぜ合わせないことを意識して、ややモダンにすることです。私は、すべてが混ざり合っている古典的な ASP の古い世界から来ましたが、それはもう望んでいません。
nhibernate - レガシー データベース - NHibernate を使用する必要がありますか?
複合キーを含む従来のデータベースで立ち往生しており、データベースを変更する余地がありません。
問題は、キーの一部が各外部キーにも使用されていることのようです。したがって、次のようなテーブル A と B がある場合:
あ
- 会社 (PK)
- 援助 (PK)
- someMoreInfo
B
- 会社(PK、FK)
- 入札 (PK)
- 援助 (FK)
- someOtherInfo
テーブル B の会社フィールドは、テーブル B の PK であり、テーブル A への FK に使用されます。私が試したすべてのことで、Repeated column in mapping
例外が発生しました。
したがって、これは「どうすればよいか」という質問ではありません (解決策がある場合は、これが単なる私の想像であり、実際に問題がなければ幸運だと思いますが…)正しい」質問です。
- nhibernate を使用して、このようなデータベースにアクセスすることは可能でしょうか (すべてのテーブルを参照なしで 1:1 にマッピングすることは別として)
- いい考えだと思いますか?
- 私の状況を考えると、代替手段は何ですか (つまり、これが得意な O/R マッパーはいますか)?
sql - .NETMVC2からDjangoに変換する
.NETMVC2アプリは過剰に設計されています。そのデータモデルはしっかりしていますが、他のすべては混乱しています。
DjangoをMSSQLデータベースに「ポイント」して、既存のDB構造から基本的なスキャフォールディングおよび管理インターフェイスを生成する方法はありますか?
hibernate - 従来のデータベース構造 Hibernate マッピングの問題
次のデータベース構造のマッピングに問題があります (簡潔にするために、PK/FK といくつかの余分な列だけで短縮されています:
ポリシー
Policy_Id (PK) ...
危険
Risk_Id (PK) ...
パーティ
Party_Id (PK) ...
パーティーの役割
- PartyRole_Id (PK)
- Party_Id (FK not-null)
- Policy_Id (外部キー)
- Risk_Id (外部キー)
- Party_Role_Type
したがって、PartyRole テーブルには、パーティをポリシーにリンクする行や、同じパーティをリスクにリンクする行を含めることができます。基本的に、これは多対多の結合テーブルですが、多対多の関係 (Party<->Policy と Party<->Risk の 1 つ) の両方を組み合わせています。Party_Role_Type は POLICY または PARTY のいずれかであり、行が属する関係を識別するための識別子として効果的に機能します。
この構造を、ポリシー、パーティ、リスク、パーティロールの 4 つのエンティティでモデル化しようとしました。マッピングは次のとおりです。 コード:
すべての Java pojo はこのマッピングに一致するように設定され、オブジェクトがコレクションで追加または削除されると、すべての関連付けが正しく設定されます。ポリシーは集約ルートと見なされるため、Hibernate によって保存されるときに、ポリシーに関連付けられたパーティを保存したいと考えています。ポリシーとリスク (および関連するすべての役割) に関係者を追加すると、次の例外が発生します。
原因: java.sql.BatchUpdateException: 整合性制約違反: 外部キーに親がありません。FK_PARTY_ROLE_POLICY テーブル: PARTY_ROLE
なにが問題ですか?また、これはこの関係をマッピングする最良の方法ですか? 中間エンティティを使用せずに、この関係を何らかの形でマッピングする機会はありますか? 助けてくれてありがとう。
nhibernate - 主キーが2つのフィールド(1つは挿入時に設定され、1つはID)で構成されているデータベースをマップするにはどうすればよいですか?
私は現在、SQL Server 2000データベースを使用して古いASPアプリケーションに取り組んでおり、.NETとNHibernateを使用して新しいテクノロジに移植しようとしています。
そのDBでは、すべてのテーブルに次のように作成された複合IDがあります。
つまり、各テーブルの主キーは次のもので構成されます。
- アイテムが作成されたSQLServerインスタンスのIDであるXXXSqlId
IDENTITY
新しい行が挿入されたときにインクリメントされるフィールドであるXXXIncId
重要なのSqlId
は、レプリケーションが発生すると、レコードがデータベースから別のデータベースに移動され、複製XXXIncId
が発生する可能性があるということです。残念ながら、多くのアプリケーションがデータベーススキーマに依存しているため、データベーススキーマを変更することはできません(これは確かに苦痛です)。
これは、テーブル間に関係が存在する場合は常に、のように両方のフィールドを指定する必要があることも意味しcreatedByIncId , createdBySqlId
ます。
この構造をNHibernate(流暢かどうか)でマッピングするための最良の方法を探していますが、ブロックされています。私は次の解決策を検討しました:
- SqlIdおよびIncId(最も自然なソリューション)でComposite-IDを使用しますが、IncIdはデータベースによって生成され、CompositeIDは「生成された」属性をサポートしないため、機能しません。
- これらのフィールドを完全に無視し、「rowguid」を実際のIDと見なします。これは、「複合ID」をリンクとして使用する必要があるエンティティ間の関係を試さない限り、うまく機能します...
- カスタムコンポジットユーザータイプ(
ICompositeUserType
)を使用する:ただし、これをエンティティのIDとして使用することはできません。
私の質問は質問1615647にかなり似ていますが、答えは私にとって満足のいくものではありません。
フォローする別のリードのアイデアはありますか?
hibernate - 2つのエンティティが複合主キーを使用しているが異なる列名を使用しているJPAOneToOneアソシエーション?
多くの複合キーを使用するデータベースでHibernateを使用しようとしていますが、それが多くの頭痛の種となっています。残念ながら、スキーマを変更することはできないため、フィールド間で多くの追加のマッピングを行う必要があります。JPA1.0およびHibernate3.3の使用に制限されています。
これまでの最大の問題は、2つの値の複合キーを使用して2つのエンティティを1対1で関連付けることです。この場合、テーブルにはこれらの列の名前が異なります(DBには、各列のテーブル固有のプレフィックス。)
クエリを実行するたびに、次の例外が発生します。
これらのテーブルの2つのクラス、InvestorIssuerEntityとInvestorIssuerEmailEntityには、オプションの@OneToOneアソシエーションがあります(場合によっては、InvestorIssuerにはInvestorIssuerEmailに一致するレコードがありません)。
2つのエンティティに@EmbeddableIdと同じクラスを使用し、次に次のように@AttributeOverridesを使用して、タイプの不一致の問題を回避しようとしました。
ただし、これら2つのエンティティに対してのみ変更を行い、他のエンティティには@IdClassアプローチを使用しました(エンティティに@IdClassまたは@EmbeddableIdのみを使用し、両方を使用しない場合ですか?)
「エンティティのマッピングで列が繰り返される」などの他の問題が発生したため、このアプローチに戻って、他の回避策があるかどうかを確認しました。
誰かがこの問題を回避するための解決策を持っていますか?StackOverflowを見回しましたが、関連付けで使用されている複合キーの名前が異なる場合はありません。
注: 以下の提案を試した後でも、次のエラーが発生します:org.hibernate.MappingException:エンティティのマッピングで繰り返される列:com.business.entity.InvestorIssuerEntity列:T090_091_INVESTOR_ID(insert = "false"update=でマッピングする必要があります「false」)
InvestorIssuerEntityからすべての関連付けを削除しても、同じ問題が発生しました。エラーは、複合キークラスの@Columnアノテーションを削除したときにのみ解消されました。もちろん、investorIdがマップされていないため、クエリは機能しませんでした。複合キーを除いて、T090_091_INVESTOR_IDのすべての言及をすでに削除しているため、Hibernateが「マッピングで繰り返される列」を見つけた場所がわかりません。
InvestorIssuerEntityには、同じ主キーで結合を行う他の関連付けがありますが、関連付けられたエンティティには、複合キーに追加の列もあります。@EmbeddedIdを使用したら、それらをすべてのエンティティに使用することになっていますか?他のクラスには引き続き@IdClassを使用します。しかし、それではどのようにしてどこでも「繰り返し列」が発生するのでしょうか。
fluent-nhibernate - Fluent NHibernate with Legacy database 複合質問
これらの質問が何度も出されていることは承知していますが、質問の中には 6 か月以上かかるものもあり、製品は進化しています。
本物のプロによって新しく設計されたデータベース スキーマがあり、その構造は美しく、Enterprise Architect にあり、必要なデータベース エンジン タイプに生成する準備ができています。まだ捨てたくない。その約 3-4k テーブル。
本当にいくつかの質問があります。スタックやさまざまなブログを読んで、NHibernate を使用する場合、自動マッピングと規則を備えた Fluent NHibernate が、従来のデータベースとうまく統合されるドメイン層を構築するための最良の方法であることを理解しています。私はそれが主観的であることを知っていますが、それはまだ本当ですか?
FH を使用して既存のデータベースにマップし、それが大規模にどのように機能するかを確認する例またはオープン ソース プロジェクトはありますか。
また、私が行く前に、これに商用ツールセットを使用した経験がある人はいますか? 現時点での芸術の状態は何ですか。バンドル全体を見てきましたが、ドキュメントの多くはグリーンフィールド向けであり、FH が除外された場合に何が最善の選択になるかを判断するのは困難です. 最良の選択を決定するには、正式な製品テスト、指標、作成されたレポートが必要ですが、経験は重要です。
ありがとう。どんな助けでも大歓迎です。ボブ。
ruby-on-rails - Rails でレガシー データベース ビューを処理する
私はルビーとレールを初めて使用し、データベース ビューと組み合わせて MVC 手法を概念化するのに苦労しています。レポートの生成に使用されるいくつかのビューを持つレガシー データベースを扱っています。
私が迷っているのは、データベース ビューを実際にどのように使用するかということです。モデルに入れるべきですか?もしそうなら、それは正確にどのように見えるでしょうか?
例として、従来のデータベースには qryTranscriptByGroup というビューがあります。従来のアプリケーションでは、「SELECT * FROM qryTranscriptByGroup WHERE group='test_group'」などの SQL ステートメントで使用されます。これにより、通常は 100 未満の少数のレコードが返されます。
モデル Transcript を作成する場合、Transcript.find_by_group(group) のようなメソッドをどのように定義しますか? 同様に、このコンテキストでは無効になるため、他の「検索」メソッドを防ぐ必要があるように思われます。
ビューが読み取り専用であり、作成、更新、または破棄の試みを防ぐ必要があるという事実もあります。
おそらく、私はこれについて完全に間違った方法で進んでいます。肝心なのは、ユーザーに関する情報 (トランスクリプト) を表すいくつかのテーブル (モデル?) から情報を取得する必要があるということです。実際には 1 人以上のユーザー (トランスクリプトは複数形)。
-ありがとう!
ruby-on-rails - 複数のレガシーデータベースを1つのRailsアプリに移行する
いくつかの(古い)Drupalサイトがあり、1つの新しいRailsアプリに置き換える必要があります。その新しいサイトには、すべての古いDrupalコンテンツが含まれている必要があります。その古いDrupalコンテンツは部分的に壊れています(7年近くの醜いアップグレード、廃止されたモジュールなどのため)。Drupalであるという事実はほとんど関係がなく、いくつかの不整合、奇妙な命名、および不適切に正規化されたテーブルを引き起こすという事実だけです。
Railsアプリにインポートする必要のあるコンテンツは単純です。コンテンツ(ブログエントリ)、添付ファイル(画像)、コメントです。2つのデータベースが「古くなっている」(本番環境ではない)、さらに2つのデータベースが本番環境にあるという贅沢がありますが、しばらくの間(数時間、数日)ダウン/ロックされます。したがって、移行の速度を最適化する必要はなく、完全に保存する必要もありません(つまり、移行の実行中に投稿されたコメントを失う余裕があります)
Rails(3)アプリはほとんどが実行され、Active-recordの規則のみを使用します。
制約(壊れた、一貫性のないデータベース、マージが必要ないくつかのデータベース)のために、新しいRailsアプリを醜い、一貫性のないレガシーデータベースに接続するのではなく、このための移行を作成することを好みます。
私の質問は次のとおりです。
- Railsへのインポートを容易にする環境、gem、またはツールはありますか?たとえば、一部のDSLで新旧からの単純なマッピングを可能にするものはありますか。
- または、移行を完全にSQLで記述する方が簡単ですか?古いデータをRailsアプリに適合する構造に変換するSQLクエリですか?移行はMySQL->MySQLからです。
- または、Activerecordを古いデータベースに接続し、各行/結果をループしてObject.saveを実行する必要があります。私のRailsアプリで?