0

各ユーザーが経費を入力して自分のカテゴリに分類できる経費追跡アプリケーションを作成したいと考えています。私が使用するモデル定義は次のとおりです。

from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    user = models.ForeignKey(User, related_name="my_categories")
    name = models.CharField(max_length=50)

class Expense(models.Model):
    date = models.DateField()
    amount = models.IntegerField()
    description = models.TextField()
    category = models.ForeignKey(Category)
    user = models.ForeignKey(User)

各カテゴリはユーザーに関連付ける必要があります。これにより、各ユーザーが経費を入力する際に​​選択する独自のカテゴリを表示できるようになります。同様の理由で、各経費レコードはユーザーに関連付ける必要があります。しかし、Expense の定義では、User モデルへの 2 つの参照があります。1 つは「user」フィールドから直接、もう 1 つはユーザー参照を持つ「category」フィールドからです。

このような複数の参照は悪いことだと思います。これをモデル化するより良い方法はありますか?カテゴリ参照からユーザーを特定できることは理解していますが、それは遠回しな方法に思えます。

4

1 に答える 1

1

あなたのデータベースは 100% 正規化されていませんが、あなたの場合、2 番目の参照が冗長であるとは思いません。「経費」と「カテゴリ」はどちらも明確に定義されたエンティティであり、ユーザーに属します。後で外部キーを変更して null カテゴリを許可するか、ManyToManyField に変更する場合は、両方のユーザー フィールドが必要であることがすぐにわかります。列がそこにある場合、ユーザーによる検索もデータベースと開発者にとってはるかに簡単です。

于 2011-06-22T18:32:51.617 に答える