Я работаю с Django некоторое время, и теперь, когда мое «дерево» и вся БД заполнены данными (примечание: существующая база данных), мне было интересно, действительно ли «одна модель на таблицу» на данный момент лучше, чем"одна модель на выбор".
У меня есть одна таблица - objtree.Здесь хранятся все узлы (бренды, категории, теги и т. Д.).Как вы можете себе представить, он интенсивно используется в моей администрации.Сегодня мне пришлось добавить еще один внешний ключ для другой таблицы, но у меня уже есть 2 внешних ключа.Проблема в том, что я использую эту модель практически для всего, НО внешние ключи используются редко, не говоря уже о третьем, который будет использоваться один раз.Поскольку в каждой из этих таблиц содержится не менее 20 тыс. Строк, а внешние ключи используются редко, мне интересно, не лучше ли использовать «один класс модели на выбор» - по скорости .
Повлияет ли этот подход на скорость?До сих пор это работало нормально для меня (модель на таблицу), но разве это не излишество для такой большой базы данных?
Любое мнение приветствуется.
С уважением
Редактировать:
Вот модель.3 внешних ключа нужны редко, но, как и сейчас, они выбираются в любом случае, даже если они мне не нужны (возможно, есть простой способ указать, какой из них я не хочу использовать при выполнении, например, Model.objects.all()
).
Таким образом, вопрос в том, будет ли лучше иметь, скажем, 3 модели, где я бы использовал внешние ключи соответственно.Повлияет ли это на скорость?Или это плохой подход?Может быть, я делаю что-то не так, я не знаю.
class Objtree(models.Model):
node_id = models.AutoField(
primary_key = True
)
type_id = models.IntegerField()
parent_id = models.IntegerField()
sort_order = models.IntegerField(
null = True,
blank = True
)
name = models.CharField(
unique = True,
max_length = 255,
blank = True
)
lft = models.IntegerField()
rgt = models.IntegerField()
depth = models.IntegerField()
added_on = models.DateTimeField()
updated_on = models.DateTimeField()
status = models.IntegerField()
point_to = models.IntegerField(
null = True,
blank = True
)
node = models.ForeignKey(
'Objtree_labels',
verbose_name = 'Objtree_labels',
to_field = 'node_id'
)
specs = models.ForeignKey(
'OptionSpecs',
verbose_name = 'OptionSpecs',
db_column = 'node_id',
null = True,
blank = True
)
ct = models.ForeignKey(
'CategoryTemplate',
verbose_name = 'CategoryTemplate',
db_column = 'node_id',
to_field = 'group_id',
null = True,
blank = True
)