2011-01-20 33 views
2

私は、次の(簡体字)のモデルではDjangoを使用しています:ジャンゴ - 管理ツリー構造

class Entity(models.Model): 
    name = models.CharField(max_length=30) 

class Person(models.Model): 
    last_name = models.CharField(max_length=30) 
    first_name = models.CharField(max_length=30) 
    entity = models.ForeignKey(Entity) 

私は(と、拡張子によって、人に)エンティティモデルに階層機能を追加したいと思います。

質問:私がシステムの安定性と高速なクエリスピードよりもメンテナンスしやすいことを考えれば、どの実装をお勧めしますか?(2000年のリーフとノードのエンティティ間で受け入れられないクエリの速度は悪くなります。

1)SQLデータベース内でネストされたセットとして階層ツリーを実装し、通常のフィールド操作でアクセスする。または

2)Django以外の階層ツリーを通常のPythonツリー(Nodeクラスなど)として実装し、Djangoモデルメソッドを使用して階層情報にアクセスしますか?

おかげで、

マイク

答えて

2

私はあなたの選択肢が本当に相互に排他的であるとは思わない - あなたには、いくつかのデータベースといくつかの非データベース要素を持つことになりますやってしまうもの。

私はModified Pre-Order Tree Traversalアルゴリズムの素晴らしいファンであり、優れたDjangoの実装であるdjango-mpttです。

ネストセットでデッドセットされている場合は、django-treebeardを参照してください。これは、近接リストとマテリアライズドパスを提供します。