Вычисляемые поля
Модератор: kdv
Вычисляемые поля
Firebird, Delphi6, FibPlus
У меня такой вопрос: имеется 5 таблиц, связаных по очереди как мастер-деталь. Я в датасете каждой таблицы создаю вычисляемое поле, которое есть конкатенация поля из мастер таблицы и поля из деталь таблицы (А эти вычисляемые поля отображаю на форме в отдельном поле Memo (скажем так, в "представлении")).
Вопрос в том, не сильно скажется на самой БД и приложении (в плане производительности и быстродействия) такое количество вычисляемых полей?
У меня такой вопрос: имеется 5 таблиц, связаных по очереди как мастер-деталь. Я в датасете каждой таблицы создаю вычисляемое поле, которое есть конкатенация поля из мастер таблицы и поля из деталь таблицы (А эти вычисляемые поля отображаю на форме в отдельном поле Memo (скажем так, в "представлении")).
Вопрос в том, не сильно скажется на самой БД и приложении (в плане производительности и быстродействия) такое количество вычисляемых полей?
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно. Ладно там остатки где-нидь сохранить и потом быстрее выдавать текущие, а тут я не вижу никакой нужды засорять БД такими полями.santilaas писал(а):И что теперь делать - в смысле - без вычисляемых полей?
А если всего по БД их (вычисляемых полей) в сумме где-то штук 13 будет - это разве много для БД, состоящей из 60 таблиц
>Dioxin
>хотя я вседа прямым копированием сохраняю
>повыгонял... позакрывал... инода даж сервер перегрузил и вперед
Это, случайно, не твой топег на sql.ru про 2 мега данных и 160 мегов транзакций?

Прошу прощения, если я что не так понял, но:
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
И ещё:
Да, а меня ещё такой вопрос: какая-то разница (опять же в плане скорости, эффективности) есть между полями, созданными через computed by и полями, созданными в Delphi (в DataSet-е), кроме того, что в Delphi у меня больше возможностей по их созданию
- из этих слов я понял, что: 1) не надо создавать такие поляЗачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
И ещё:
- но ведь вычисляемые поля в БД не хранятся.засорять БД такими полями
Да, а меня ещё такой вопрос: какая-то разница (опять же в плане скорости, эффективности) есть между полями, созданными через computed by и полями, созданными в Delphi (в DataSet-е), кроме того, что в Delphi у меня больше возможностей по их созданию
Помедитируй над тем, что при выполнении запроса-джойна оптимизатор строит план и карту доступа ко всем страницам, содержащим нужные записи из всех таблиц, разом, а при доставании каждого поля по отдельности подзапросами выполняет их столько раз, сколько записей в основной таблице (а это и есть суть таких computed полей, о которых ты говоришь) и всё станет ясно.
Ivan_Pisarevsky
Но опять же повторю - мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц), разве нельзя этого сделать без ущерба для БД.
А что по-этому поводу скажет уважаемый мной KVD?
- виноват - понял, что ты имел ввиду.Прошу прощения, если я что не так понял, но:
Цитата:
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно
- из этих слов я понял, что: 1) не надо создавать такие поля
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
Но опять же повторю - мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц), разве нельзя этого сделать без ущерба для БД.
А что по-этому поводу скажет уважаемый мной KVD?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
- т.е получается при перемещении по записям мне нужно будет перезапускать запрос?Сджойнил и выдал
- т.е. вообще, на самом деле, у меня есть таблица "Потребители", а у каждого из них указывается адрес (т.е первичный ключ последней из 5-ти таблиц (например, таблицы "Строения")). Ну а в таблице "Потребители", я делаю lookup-поле, как раз ссылающееся на моё вычисляемое поле (полный адрес).мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц)
Таким образом, если я отдельно открываю форму "Потребители", то на ней в поле ввода отображается мой полный адрес. В этом случае можно использовать вычисляемое поле???
Merlin, я у тебя не спрашиваю учить меня строить запросы или ещё что.
Я просто спрашиваю совета - и жду ответа (притом на мои последние вопросы по сути ответом будет Да или Нет) от людей, у которых возможно были такие же ситуации, а ежели мне что-то не понятно в их ответе, я прошу уточнения - иначе вообще для чего форум.
А насчёт:
Если надоели мои сообщения, читай другие, может там кто буквари читает.
Я просто спрашиваю совета - и жду ответа (притом на мои последние вопросы по сути ответом будет Да или Нет) от людей, у которых возможно были такие же ситуации, а ежели мне что-то не понятно в их ответе, я прошу уточнения - иначе вообще для чего форум.
А насчёт:
- книжки я читаю, притом неплохие, но бывают ситуации, когда нужен совет опытного человека.Иди букварь читай
Если надоели мои сообщения, читай другие, может там кто буквари читает.
Merlin, только не злись. Я все-таки не пойму, почему плохо, если я в датасете создаю Calc-поле типа этого:
- зачем их вообще тогда там придумали, вы мне объясните.
Код: Выделить всё
DM.DataSetAddress_Calc.AsString:= DM.DataSetTable1Name.AsString +
DM.DataSetTable2Name.AsString + DM.DataSetTable3Name.AsString + DM.DataSetTable4Name.AsString + DM.DataSetTable5Name.AsString