Django создает новую модель для жанра или включает его в модель книги?
У меня есть модель книги, и у каждой книги есть жанр. Я в замешательстве, если 1) я должен создать новую модель для жанра, а затем создать отношения многие-к-одному между книгой и моделью..... или 2) я должен просто включить жанр как поле в модель книги?
Если я хочу получить все книги определенного жанра, то использование 1) сделает поиск быстрее/эффективнее, поскольку я смогу получить все книги, связанные с объектом жанра? Потому что если я использую 2), мне придется просмотреть каждую книгу на предмет наличия в ней указанного жанра.
Если вы повторяете одно и то же значение несколько раз, это форма дублирования данных. Часто дублирование данных является проблемой: представьте, что вы обнаружили опечатку в названии genre
, тогда вам придется обновлять все записи, что дорого. Если вы позже захотите добавить дополнительные данные к жанру, например, описание, то это нужно будет сделать для всех записей книг, что приведет к большой базе данных, и, наконец, это также означает, что вы можете создать жанр только в том случае, если у вас есть хотя бы одна книга с этим жанром. Это все причины, почему это не очень хорошая идея.
Вы обычно создаете модель Genre
, а затем работаете с ForeignKey
от Book
к Genre
, например:
from django.db import models
class Genre(models.Model):
name = models.CharField(max_length=32, unique=True)
def __str__(self):
return self.name
class Book(models.Model):
# …
genre = models.ForeignKey(Genre, on_delete=models.CASCADE)