Текущее время: Пт, авг 01 2025, 15:00

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 15:14 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
Имеются в наличии пользовательские Z-таблицы (около 50 штук),
которые имеют следующую структуру:

Ключ (1-3 поля: BUKRS, VKORG, BWART, и т.д. )
Параметр (char40)

Вопрос следующий, как лучше сделать:

1. Оставить всё как есть, и использовать SELECT для чтения таблиц

2. Для каждой таблицы сделать FM или Class: ZCL_TABLNAME

3. Сделать один FM/Class для всех 50 таблиц, где имя таблицы и ключ будет задаваться в параметрах, и SELECT для каждой из таблиц будет генерироваться динамически

4. Вместо 50 таблиц сделать одну, и один fm/class соответственно


Я склоняюсь к варианту номер 2 по следующим причинам:
1.) Возможность отследить где в коде используется та или иная таблица через "where used"
(что невозможно вариантах в 3 или 4)

2.) Буферизация данных

Минус варианта это то, что для 50 таблиц должно быть создано 50 fm/class. Придётся писать генератор.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 18:00 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 01 2005, 13:23
Сообщения: 303
Откуда: Питер
Пол: Мужской
Сделать 1 ФМ в который передавать все параметры, а внутри селект:

select (from_clause)
from (table)
INTO TABLE (name_tab)
where (where_clause).

_________________
Всему своё время...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 18:08 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
Встречный вопрос: а зачем нужны 50 таблиц? Нельзя их количество уменьшить?
Вам нужны выборки именно в виде таблиц 1:1 или какие-то агрегированные выборки по нескольким таблицам?
Нельзя ли использовать VIEW и меньшее количество функций/классов? Может стоит глянуть в сторону persistence objects.

Что касается буферизации - почему не загонять в буфер сами таблицы, тогда и обычные селекты быстро бегать будут...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 18:31 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
Konstantin Anikeev написал:
Встречный вопрос: а зачем нужны 50 таблиц? Нельзя их количество уменьшить?
Вам нужны выборки именно в виде таблиц 1:1 или какие-то агрегированные выборки по нескольким таблицам?
Нельзя ли использовать VIEW и меньшее количество функций/классов? Может стоит глянуть в сторону persistence objects.

Что касается буферизации - почему не загонять в буфер сами таблицы, тогда и обычные селекты быстро бегать будут...


50 таблиц - это пользовательские "Customizing Tables", с помощью которых можно включать или отключать ту или иную порцию кода в User-Exits. Количество можно уменьшить, как я уже говорил, вплоть до одной единственной таблицы. Агрегированных выборок не делается.

Например:

VIEW здесь не поможет, так как выбор скорее или между 50 разными таблицами/объектами, или между 1 единственной.

50 таблиц:
Key (Ключ1, Ключ2, Ключ3)
Параметр
Активирован-Деактивирован

ZUSEREXIT01

SELECT active INTO lv_active
FROM ZTABLE050
WHERE key1 = param1
AND key2 = param2
AND key3 = param3
AND param = param4.

IF lv_active = 'X'.
* Execute our code here
ENDIF.


1 большая таблица
Key ( Название оригинальной таблицы, Ключ1, Ключ2, Ключ3)
Параметр
Активирован-Деактивирован

ZUSEREXIT01

SELECT active INTO lv_active
FROM ZTABLE_ALL
WHERE tabname = 'ZTABLE050'
AND key1 = param1
AND key2 = param2
AND key3 = param3
AND param = param4.

IF lv_active = 'X'.
* Execute our code here
ENDIF.



Тут скорее вопрос даже не в технической реализации, а в архитектурной - что лучше: иметь 50 маленьких таблиц, и для каждой писать отдельный код, или одну большую со своими проблемами.

Маленькие легче поддерживать и выделять права доступа для разных пользователей. Большая таблица - универсальна, но стандартными средствами не обеспечить доступ пользователей только к части данных. К тому же, хотелось бы видеть, где именно используется тот или иной параметр с помощью "Where Used".


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 18:50 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
Тогда одна таблица с дополнительным полем в ключе (например USER_EXIT_NAME)... И одна функция/класс для выборки из таблицы.
Потом по функции/методу легко найдете все места использования... Тут есть один, но очень большой плюс, если вам потом надо будет расширить таблицу (создать еще одну), например для ведения прав доступа - то менять надо будет только обработку внутри класса. Все уже измененные места остаются нетронутыми.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 20:01 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
Konstantin Anikeev написал:
Тогда одна таблица с дополнительным полем в ключе (например USER_EXIT_NAME)... И одна функция/класс для выборки из таблицы.
Потом по функции/методу легко найдете все места использования... Тут есть один, но очень большой плюс, если вам потом надо будет расширить таблицу (создать еще одну), например для ведения прав доступа - то менять надо будет только обработку внутри класса. Все уже измененные места остаются нетронутыми.


Спасибо, приведенное Вами решение вполне разумно. Это скорее всего и есть самый оптимальный вариант в нашем случае, если начинать с нуля.

Но обращение к этим 50 таблицам имеется в 500 местах, и такое радикальное изменение архитектуры не примется с большой радостью, не говоря уже о переписывании.

Если мы оставим 50 таблиц, и у нас будет выбор или 50 вариантов SELECT/функций/классов, или же одна функция/класс с динамическим SELECT, на все 50 таблиц, чтобы Вы выбрали?

Я все-таки склоняюсь к 50 вариантам SELECT/функций/классов.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Пн, апр 13 2009, 22:31 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
Я бы выбирал исходя из логики.
Если использование таблиц сходное - один динамический вызов на все. Я бы использовал для доступа к таблицам экземпляры одного класса. В этом случае всегда можно найти по использованию класса, какой осуществляется вызов. В связке с хорошей документацией - должно работать.
Если из таблиц получаются различные по бизнес-логике данные - свои классы на каждую таблицу(группы таблиц). Хотя лично я, в силу природной лени, пытался бы этого избежать.
Насколько я понял - у вас первый вариант.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 01:34 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Есть опасность что при таком подходе со временем 50 таблиц превратятся в 500

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 05:47 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
останется только наколбасить к ним своё ZSPRO :D

Помоему перебор - столько таблиц городить ради вобщемто тривиальной задачи.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 13:30 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, июн 15 2007, 16:24
Сообщения: 98
Как вариант - свести таки к одной таблице, заменив все остальные view-шками.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 15:57 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
Konstantin Anikeev написал:
Я бы выбирал исходя из логики.
Если использование таблиц сходное - один динамический вызов на все. Я бы использовал для доступа к таблицам экземпляры одного класса. В этом случае всегда можно найти по использованию класса, какой осуществляется вызов. В связке с хорошей документацией - должно работать.
Если из таблиц получаются различные по бизнес-логике данные - свои классы на каждую таблицу(группы таблиц). Хотя лично я, в силу природной лени, пытался бы этого избежать.
Насколько я понял - у вас первый вариант.


В том то и дело, что не сходное. И ключи совсем разные.

И да, данные разные по бизнес логике, поэтому и склоняюсь сейчас все-таки больше к последнему варианту. Конечно, оптимально было бы использовать всего одну таблицу, но как я уже говорил, это будет кардинальным изменением архитектуры.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 15:57 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
DKiyanov написал:
Есть опасность что при таком подходе со временем 50 таблиц превратятся в 500


В этом то все и дело, поэтому приходится искать новые решения.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 15:59 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
pberezin написал:
останется только наколбасить к ним своё ZSPRO :D

Помоему перебор - столько таблиц городить ради вобщемто тривиальной задачи.


Свой ZSPRO уже есть :)

Ну, это все до меня было сделано, что смогу то сделаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Вт, апр 14 2009, 16:01 
Ассистент
Ассистент

Зарегистрирован:
Пт, янв 23 2009, 13:31
Сообщения: 49
Откуда: Москва
Пол: Мужской
Николай Рыжов написал(а):
Как вариант - свести таки к одной таблице, заменив все остальные view-шками.


Да, спасибо, этот вариант рассматривается.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Пользовательские таблицы: Один динамический SELECT или one-class-per-table
СообщениеДобавлено: Ср, апр 15 2009, 13:29 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Maxus написал:
2. Для каждой таблицы сделать FM или Class: ZCL_TABLNAME

Кем-то это уже обсуждалось, если не ошибаюсь.
Был рассмотрен вариант использования The Persistence Service

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB