Какой лучший способ организовать отношения в Джанго? Плоская или древовидная?

У меня есть 3 модели

client

loan

installment - одна часть кредита

Должен ли я сделать:

loan-foreignKey(client)
installment-foreignKey(loan)

и получить клиентские взносы примерно так:

loans = client.loan.all()
result = array()
foreach(loans as loan):
    result = result + loan.installments.all()
return result;

или я должен сделать это так:

loan-foreignKey(client)
installment-foreignKey(client)
installment-foreignKey(loan)

и просто:client.installment.all()

Первый способ выглядит более чистым с точки зрения программиста (без спагетти вокруг, без дублированных полей), но я беспокоюсь о производительности (вам нужно искать базу данных по всем кредитам, а затем по частям в этих кредитах)

2 ответа

Согласно Zen of Python: Flat лучше, чем вложенный. Вы должны думать о своих моделях как об объектах и ​​применять принципы объектно-ориентированного программирования.

Подумайте о сущностях, которые у вас есть, и примените отношения, имитирующие их реальное взаимодействие

"Программы должны быть написаны для того, чтобы люди могли их читать, и только для машин".

Если клиент в обеих моделях одинаковый, дублировать его не следует. Что касается производительности читать дальше select_related(), only() а также defer() в Django документах.

Другие вопросы по тегам