Страница 1 из 1
Вычисляемые поля
Добавлено: 24 апр 2006, 14:02
santilaas
Firebird, Delphi6, FibPlus
У меня такой вопрос: имеется 5 таблиц, связаных по очереди как мастер-деталь. Я в датасете каждой таблицы создаю вычисляемое поле, которое есть конкатенация поля из мастер таблицы и поля из деталь таблицы (А эти вычисляемые поля отображаю на форме в отдельном поле Memo (скажем так, в "представлении")).
Вопрос в том, не сильно скажется на самой БД и приложении (в плане производительности и быстродействия) такое количество вычисляемых полей?
Добавлено: 24 апр 2006, 14:13
Merlin
Сильно. А ещё может сказаться на ресторабельности.
Добавлено: 24 апр 2006, 14:31
santilaas
Сильно. А ещё может сказаться на ресторабельности
-что есть ресторабельность???
Добавлено: 24 апр 2006, 15:07
Dioxin
Ресторабельность я так понял от англ. Restore... и скорее всего термин означает восстановимость из файла бэкапа...
хотя я вседа прямым копированием сохраняю
повыгонял... позакрывал... инода даж сервер перегрузил и вперед
Добавлено: 25 апр 2006, 05:19
santilaas
И что теперь делать - в смысле - без вычисляемых полей?
А если всего по БД их (вычисляемых полей) в сумме где-то штук 13 будет - это разве много для БД, состоящей из 60 таблиц
Добавлено: 25 апр 2006, 09:03
Ivan_Pisarevsky
santilaas писал(а):И что теперь делать - в смысле - без вычисляемых полей?
А если всего по БД их (вычисляемых полей) в сумме где-то штук 13 будет - это разве много для БД, состоящей из 60 таблиц
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно. Ладно там остатки где-нидь сохранить и потом быстрее выдавать текущие, а тут я не вижу никакой нужды засорять БД такими полями.
>Dioxin
>хотя я вседа прямым копированием сохраняю
>повыгонял... позакрывал... инода даж сервер перегрузил и вперед
Это, случайно, не твой топег на sql.ru про 2 мега данных и 160 мегов транзакций?

Добавлено: 25 апр 2006, 14:47
santilaas
Прошу прощения, если я что не так понял, но:
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно
- из этих слов я понял, что: 1) не надо создавать такие поля
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
И ещё:
засорять БД такими полями
- но ведь вычисляемые поля в БД не хранятся.
Да, а меня ещё такой вопрос: какая-то разница (опять же в плане скорости, эффективности) есть между полями, созданными через computed by и полями, созданными в Delphi (в DataSet-е), кроме того, что в Delphi у меня больше возможностей по их созданию
Добавлено: 25 апр 2006, 16:06
Merlin
Помедитируй над тем, что при выполнении запроса-джойна оптимизатор строит план и карту доступа ко всем страницам, содержащим нужные записи из всех таблиц, разом, а при доставании каждого поля по отдельности подзапросами выполняет их столько раз, сколько записей в основной таблице (а это и есть суть таких computed полей, о которых ты говоришь) и всё станет ясно.
Добавлено: 28 апр 2006, 05:41
santilaas
Ivan_Pisarevsky
Прошу прощения, если я что не так понял, но:
Цитата:
Зачем хранить такой странный агрегат, если его вычисление в запросе для сервера нисколько ненапряжно
- из этих слов я понял, что: 1) не надо создавать такие поля
2) в принципе это никаких тормозов не вызывает (т.е можно и создавать такие поля)
- виноват - понял, что ты имел ввиду.
Но опять же повторю - мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц), разве нельзя этого сделать без ущерба для БД.
А что по-этому поводу скажет уважаемый мной KVD?
Добавлено: 28 апр 2006, 08:35
Dimitry Sibiryakov
Я не kdv, но скажу что такие вещи обычно формируются на клиенте или в SP.
Добавлено: 28 апр 2006, 08:39
Ivan_Pisarevsky
Но опять же повторю - мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц), разве нельзя этого сделать без ущерба для БД.
Ну и проблема-то в чем ? Сджойнил и выдал.
И никакого ущерба, откуда ему взяться?
Добавлено: 28 апр 2006, 15:10
santilaas
Сджойнил и выдал
- т.е получается при перемещении по записям мне нужно будет перезапускать запрос?
мне надо пользователю отображать скажем полный адрес (а он например, формируется из 5-ти таблиц)
- т.е. вообще, на самом деле, у меня есть таблица "Потребители", а у каждого из них указывается адрес (т.е первичный ключ последней из 5-ти таблиц (например, таблицы "Строения")). Ну а в таблице "Потребители", я делаю lookup-поле, как раз ссылающееся на моё вычисляемое поле (полный адрес).
Таким образом, если я отдельно открываю форму "Потребители", то на ней в поле ввода отображается мой полный адрес. В этом случае можно использовать вычисляемое поле???
Добавлено: 28 апр 2006, 15:26
Merlin
Иди букварь читай. Грабера что ли. Или здесь на сайте статью про джойны хотя бы.
Добавлено: 28 апр 2006, 15:52
santilaas
Merlin, я у тебя не спрашиваю учить меня строить запросы или ещё что.
Я просто спрашиваю совета - и жду ответа (притом на мои последние вопросы по сути ответом будет Да или Нет) от людей, у которых возможно были такие же ситуации, а ежели мне что-то не понятно в их ответе, я прошу уточнения - иначе вообще для чего форум.
А насчёт:
Иди букварь читай
- книжки я читаю, притом неплохие, но бывают ситуации, когда нужен совет опытного человека.
Если надоели мои сообщения, читай другие, может там кто буквари читает.
Добавлено: 28 апр 2006, 16:05
kdv
вычисляемые поля с select - суть зло. этого мало?
Добавлено: 28 апр 2006, 17:22
Merlin
Пожалуй, я таки как-нить поменяю ник на МП и отведу здесь душу по полной

Добавлено: 30 апр 2006, 15:09
santilaas
Merlin, только не злись. Я все-таки не пойму, почему плохо, если я в датасете создаю Calc-поле типа этого:
Код: Выделить всё
DM.DataSetAddress_Calc.AsString:= DM.DataSetTable1Name.AsString +
DM.DataSetTable2Name.AsString + DM.DataSetTable3Name.AsString + DM.DataSetTable4Name.AsString + DM.DataSetTable5Name.AsString
- зачем их вообще тогда там придумали, вы мне объясните.
Добавлено: 02 май 2006, 09:42
Dioxin
2Ivan_Pisarevsky
>Это, случайно, не твой топег на sql.ru про 2 мега данных и 160 мегов >транзакций?
Нет, не мой!!!