У меня есть Firebird базу данных, которая, скажем, есть таблицы А и В, которые выглядят так:Database Design вопрос
TableA
TableB's Id | SomeNumber | OtherNumber | ComputedByField | OtherIntField
1 5 200 SomeNumber*OtherNumber 10
1 2 70 ... 20
TableB
Id | Sum | Sum
1 Sum of OtherIntFIeld Sum of ComputedByField
where TableA'sId = TableB's Id
Но теперь, когда TableB является из-за этого вычисление становится заселенным (он находится на расстоянии 2 тыс. строк).
Так что мой вопрос: должен ли я отбрасывать поле Table12 computedby
и добавлять его прямо в TableB, и когда новые строки таблицы TableA добавляются для изменения соответствующей строки вручную? (Это должно быть быстрее, но мне это не очень нравится)
Редактировать: проблема с производительностью возникает из-за того, что есть два поля computedby
, которые выполняют точно такой же запрос через TableA, но возвращают разные поля. Я думаю, что это часть, которая нуждается в оптимизации.
Edit2: Строки вычисляются следующим образом
TABLEB_FIELD_X COMPUTED BY ((
select SUM(TableA.FieldX) from TableA
where TableA.FAT_ID = TableB.ID
))
TABLEB_FIELD_Y COMPUTED BY ((
select SUM(TableA.FieldY) from TableA
where TableA.FAT_ID = TableB.ID
))
Основной вопрос, который я считаю, исходит из того, эти два независимых полей запроса одни и те же строки из TableA они просто получить другое поле в качестве результата.
Это плохо поставленный вопрос, потому что в нем отсутствуют важные детали. Например, как вы рассчитали суммы? – MaD70