Разработка без дубликатов ссылок на иностранные ключи в Django - PullRequest
0 голосов
/ 22 июня 2011

Я хочу создать приложение для отслеживания расходов, где каждый пользователь может вводить расходы и классифицировать их по своим категориям.Вот определение модели, которое я использую:

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)

Каждая категория должна быть связана с пользователем, чтобы мы могли отображать каждому пользователю его собственные категории, которые можно выбрать при вводе расходов.По тем же причинам каждая запись о расходах должна быть связана с пользователем.Но в определении расходов у нас есть 2 ссылки на пользовательские модели, одна непосредственно через поле 'user', а другая через поле 'category', в котором есть пользовательская ссылка.

Я считаю, что несколько ссылок, подобных этойэто плохо.Есть ли лучший способ смоделировать это?Я понимаю, что мы можем узнать пользователя по ссылке на категорию, но это выглядит окольным путем.

1 Ответ

1 голос
/ 22 июня 2011

Хотя ваша база данных не нормализована на 100%, в вашем случае я не считаю, что вторая ссылка избыточна. И «расход», и «категория» являются четко определенными объектами, которые принадлежат пользователю. Если позже вы захотите изменить свой внешний ключ, чтобы разрешить нулевую категорию или ManyToManyField, вы сразу же заметите, что оба пользовательских поля обязательны для заполнения. Поиск по пользователю также намного проще для БД и разработчика, когда есть столбец.

...