JPAを使用する場合、特に新しいプロジェクトを開始する場合はどちらが優れていますか? エンティティの設計から始めて JPA にデータベースを生成させるか、データベース スキーマから始めてツールにエンティティ クラスを生成させるか?
私は小さな会社の一員です。私はソフトウェア開発者と DBA の両方です。アプリケーションとデータベースの設計は完全に自由です
プロジェクトを始めたばかりです
JPAを使用する場合、特に新しいプロジェクトを開始する場合はどちらが優れていますか? エンティティの設計から始めて JPA にデータベースを生成させるか、データベース スキーマから始めてツールにエンティティ クラスを生成させるか?
私は小さな会社の一員です。私はソフトウェア開発者と DBA の両方です。アプリケーションとデータベースの設計は完全に自由です
プロジェクトを始めたばかりです
データベースを設計する場合は、スキーマから始めます。ソフトウェアを書きたい場合は、エンティティから始めます。ORM のポイントは、オブジェクト モデルを格納するデータベースを気にせずにオブジェクト モデルについて考えることができるようにすることです。そのため、この種の質問は、領域間のクロスオーバーをほのめかすことによって、実際には問題をやや混乱させます。あなたはソフトウェア開発者ですか、それとも DBA ですか? それは、JPA を使用しているという事実よりもはるかに、正しい答えを決定するものです。
それは自分のニーズに依存します。通常、製品開発環境には、データベースの設計、インターフェイスの設計、および実装に取り組むさまざまなチームがあります。したがって、その場合、すでにデータベース設計からJPAエンティティを生成する以外に選択肢はありません。次に、最初から始めて、何をしているのかがわかっている場合は、おそらく独自のエンティティ(Javaクラス)の作成を開始し、そこからデータベースを生成できます。
うーん - どちらでもない?JPA の威力は、一方から他方を生成する必要がないことです。エンティティまたはデータベース スキーマの生成は、既に配置されている場合に適した出発点となる可能性があります。しかし、生成されたものは、長期的に使用したいものではありません。
マッピングの片側を考慮せずに単純に設計することはできません。データベースを他のアプリケーションと共有する場合は、データベース スキーマをより重視する必要があります。アプリケーションに複雑なモデルがある場合は、最初にオブジェクト モデルに注目し、アプリケーションの開発中に明らかになったユース ケースによってオブジェクト モデルを推進できるようにします。
私は最初にオブジェクト モデルから始める傾向があります (バッキング データベースがなくても)。これにより、アプリケーションの動作を早期に確認し、本当に構築したいものを感じ取ることができます。ただし、データベースとの統合は後ではなく前に行う必要があります。その制約はすぐにオブジェクト モデルに課されるためです。:-)
データベーススキームを選択することをお勧めします。一部の機能はJPAで生成されたデータベースでは使用できないためです。JPAでは、列にデフォルト値を指定できません。JPAで許可される属性については、ここを確認してください。
それはあなた次第です。トップダウンアプローチかボトムアップアプローチか。このスキーマがアプリケーション専用である場合は、チームメンバーとアナリストがORMまたはDBをどのように理解しているかを確認してください。私の経験では、アナリストはテーブルの観点からよりよく理解しています。ただし、クラスやUMLダイアグラムの観点から議論するのが適切な場合は、JPAを使用してください。また、DBAとビルドエンジニアの見解も考慮に入れてください。
完全な柔軟性があり、DB スキーマに制限されておらず、Java アプリケーションでクリーンなオブジェクト モデルが必要な場合は、まずモデルから始めて、モデルからスキーマを生成します。また、Jackson (または GSON) などのテクノロジを使用して、クリーンなモデルからクリーンな JSON 表現を生成し、オブジェクトの通信形式として使用することもできます。
最初に DB スキーマを実行し、そこからモデル クラスをリバース エンジニアリングすると、リレーショナル概念がモデル クラスに浸透し、貧弱な (汚染された) モデルが作成されます。
要約すると、手を縛られていて、既存のスキーマにマップする必要がない限り、最初にモデル化を行います。