2012-02-26 8 views
1

私はGUIアプリケーションを使用してERDを使用してデータベースを設計するのが好きです。現在私は無料のMySQLWorkbenchのEER図を使用しています。Djangoのデータベースをどのように設計すればよいですか?

私がERDのように見えると、私はフォワードエンジニアのERDをMySQLWorkbenchで実際のデータベースを作成します。その後、django-admin.py inspectdbからリバースエンジニアを使ってMySQLデータベースをDjangoのmodels.pyのPythonスニペットコードの出力にイントロスペクションします。

しかし、私はinspectdbの出力を取って手動で好みに合わせて編集する必要があります。私が本当にやりたくない1つの特別な部分は、多対多の関係から各結合テーブルを手動で削除することです。

Django用に設計されたGUI ERD設計プログラムがありますか?

+0

おそらく、inspectdbをsomeapp/management/commands/my_inspectdb.pyにコピーしてそれを適用することができます。 – jpic

+2

guiでDBを設計する必要がある理由は何ですか?ダイアグラムが必要な場合は、djangoのすべてのモデルを作成し、既存のdbからダイアグラムを生成してみましょう。 – miki725

+0

Djangoからデータベースを作成し、MySQLワークベンチのダイアグラムをリバースエンジニアリングする方が簡単ではないでしょうか?それはあなたに多くの時間を節約します。 –

答えて

3

モデルをデータベースレベルで設計する場合は、記述したとおりに、正確に行う必要があります.SQLを設計し、それをDjangoモデルに変換する必要があります。

これはDjangoアプリケーションを設計する通常の方法ではありません。典型的には、必要なモデルを設計し、パフォーマンス上の問題を解決する必要がある場合のみ、スキーマ設計に多くの労力をかけます。 Djangoモデルは、実際にはリレーショナルデータベースの抽象概念ではありません。アプリケーションの永続オブジェクトの抽象概念であり、リレーショナルデータベース上で実装されます。

明示的なスキーマ設計をしたい/したくないことは何も問題はありませんが、それはあなたの外れ値になります(ほとんどのWeb devlelopersはそうしません)。したがって、あなたのニーズに合ったツール。

最も近いのは、Django command extensionsの一部であるgraph_modelsコマンドです。これにより、モデルを視覚化することができます(まだPythonコードで記述していますが、視覚的表現はより速く反復するのに役立ちます)。

+2

スキーマを明示的に設計していない場合、Djangoアプリケーションでテーブルが適切に正規化されていることがわかります? – hobbes3

+3

hobbes3:かなり。 Django/PHP/RoRの人々の多くは正規化を気にしません。それは必ずしも正しかったとは言えませんが、それは文化です。多くのWebアプリケーションではデータベースが非常にシンプルで無関係であるか、または非正規化が実際にパフォーマンスに役立ちます。一般的な(必ずしも正しいとは限りませんが)姿勢は何か簡単なものから始めることです。パフォーマンスの問題がある場合にのみ、人間のプログラマーではなくDBサーバーに合わせてスキーマを変更します。 – kdt

+2

文化の説明に感謝します。正規化について気にしない...うわーは、私がデータベースの本で学んだものではありません。しかし、私はあなたがそれを簡単に保つように言った方法が好きです。それは私にとって理にかなっています:-)。 – hobbes3

3

djangoアプリのデータベースレイアウトを設計するのは普通ではありません。そのようにすると、最適ではないデザインにつながる可能性があります。

代わりに、モデルクラスをどのようにクエリするか、そしてForeignKey(とその他のリレーションタイプ)が動作する方法を考慮して、モデルクラスを設計してください。あなたがこれをしないと、あなたのアプリが概念的な不一致に苦しんでいることが分かります。