Вычисляемые поля

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Вычисляемые поля

Сообщение santilaas » 24 апр 2006, 14:02

Firebird, Delphi6, FibPlus
У меня такой вопрос: имеется 5 таблиц, связаных по очереди как мастер-деталь. Я в датасете каждой таблицы создаю вычисляемое поле, которое есть конкатенация поля из мастер таблицы и поля из деталь таблицы (А эти вычисляемые поля отображаю на форме в отдельном поле Memo (скажем так, в "представлении")).
Вопрос в том, не сильно скажется на самой БД и приложении (в плане производительности и быстродействия) такое количество вычисляемых полей?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 24 апр 2006, 14:13

Сильно. А ещё может сказаться на ресторабельности.

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 24 апр 2006, 14:31

Сильно. А ещё может сказаться на ресторабельности
-что есть ресторабельность???

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 24 апр 2006, 15:07

Ресторабельность я так понял от англ. Restore... и скорее всего термин означает восстановимость из файла бэкапа...
хотя я вседа прямым копированием сохраняю
повыгонял... позакрывал... инода даж сервер перегрузил и вперед

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 25 апр 2006, 05:19

И что теперь делать - в смысле - без вычисляемых полей?
А если всего по БД их (вычисляемых полей) в сумме где-то штук 13 будет - это разве много для БД, состоящей из 60 таблиц

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 25 апр 2006, 09:03

santilaas писал(а):И что теперь делать - в смысле - без вычисляемых полей?
А если всего по БД их (вычисляемых полей) в сумме где-то штук 13 будет - это разве много для БД, состоящей из 60 таблиц
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно. Ладно там остатки где-нидь сохранить и потом быстрее выдавать текущие, а тут я не вижу никакой нужды засорять БД такими полями.

>Dioxin
>хотя я вседа прямым копированием сохраняю
>повыгонял... позакрывал... инода даж сервер перегрузил и вперед
Это, случайно, не твой топег на sql.ru про 2 мега данных и 160 мегов транзакций? :lol:

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 25 апр 2006, 14:47

Прошу прощения, если я что не так понял, но:
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно
- из этих слов я понял, что: 1) не надо создавать такие поля
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
И ещё:
засорять БД такими полями
- но ведь вычисляемые поля в БД не хранятся.

Да, а меня ещё такой вопрос: какая-то разница (опять же в плане скорости, эффективности) есть между полями, созданными через computed by и полями, созданными в Delphi (в DataSet-е), кроме того, что в Delphi у меня больше возможностей по их созданию

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 25 апр 2006, 16:06

Помедитируй над тем, что при выполнении запроса-джойна оптимизатор строит план и карту доступа ко всем страницам, содержащим нужные записи из всех таблиц, разом, а при доставании каждого поля по отдельности подзапросами выполняет их столько раз, сколько записей в основной таблице (а это и есть суть таких computed полей, о которых ты говоришь) и всё станет ясно.

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 28 апр 2006, 05:41

Ivan_Pisarevsky
Прошу прощения, если я что не так понял, но:
Цитата:
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно
- из этих слов я понял, что: 1) не надо создавать такие поля
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
- виноват - понял, что ты имел ввиду.
Но опять же повторю - мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц), разве нельзя этого сделать без ущерба для БД.

А что по-этому поводу скажет уважаемый мной KVD?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 28 апр 2006, 08:35

Я не kdv, но скажу что такие вещи обычно формируются на клиенте или в SP.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 28 апр 2006, 08:39

Но опять же повторю - мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц), разве нельзя этого сделать без ущерба для БД.

Ну и проблема-то в чем ? Сджойнил и выдал.
И никакого ущерба, откуда ему взяться?

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 28 апр 2006, 15:10

Сджойнил и выдал
- т.е получается при перемещении по записям мне нужно будет перезапускать запрос?
мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц)
- т.е. вообще, на самом деле, у меня есть таблица "Потребители", а у каждого из них указывается адрес (т.е первичный ключ последней из 5-ти таблиц (например, таблицы "Строения")). Ну а в таблице "Потребители", я делаю lookup-поле, как раз ссылающееся на моё вычисляемое поле (полный адрес).
Таким образом, если я отдельно открываю форму "Потребители", то на ней в поле ввода отображается мой полный адрес. В этом случае можно использовать вычисляемое поле???

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 28 апр 2006, 15:26

Иди букварь читай. Грабера что ли. Или здесь на сайте статью про джойны хотя бы.

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 28 апр 2006, 15:52

Merlin, я у тебя не спрашиваю учить меня строить запросы или ещё что.
Я просто спрашиваю совета - и жду ответа (притом на мои последние вопросы по сути ответом будет Да или Нет) от людей, у которых возможно были такие же ситуации, а ежели мне что-то не понятно в их ответе, я прошу уточнения - иначе вообще для чего форум.
А насчёт:
Иди букварь читай
- книжки я читаю, притом неплохие, но бывают ситуации, когда нужен совет опытного человека.

Если надоели мои сообщения, читай другие, может там кто буквари читает.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 апр 2006, 16:05

вычисляемые поля с select - суть зло. этого мало?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 28 апр 2006, 17:22

Пожалуй, я таки как-нить поменяю ник на МП и отведу здесь душу по полной :-D

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 30 апр 2006, 15:09

Merlin, только не злись. Я все-таки не пойму, почему плохо, если я в датасете создаю Calc-поле типа этого:

Код: Выделить всё

DM.DataSetAddress_Calc.AsString:= DM.DataSetTable1Name.AsString +
DM.DataSetTable2Name.AsString + DM.DataSetTable3Name.AsString + DM.DataSetTable4Name.AsString + DM.DataSetTable5Name.AsString
- зачем их вообще тогда там придумали, вы мне объясните.

Dioxin
Сообщения: 26
Зарегистрирован: 03 июн 2005, 08:35

Сообщение Dioxin » 02 май 2006, 09:42

2Ivan_Pisarevsky
>Это, случайно, не твой топег на sql.ru про 2 мега данных и 160 мегов >транзакций?

Нет, не мой!!!

Ответить