29.04.2008, 15:51 | #1 |
Участник
|
оптимальное кол-во полей в таблице
Существуют-ли рекомендации относительно количества полей в таблице (Ax3), может на размер записи?
Вопрос возник при добалении очередного поля в параметры клиента CustTable. Т.е. возможен следующий подход: создать отдельную связанную таблицу (например CustTableAdv) и доп. поля/параметры справочника уже прописывать там. Я вижу и плюс и минус такого подхода: плюс: при добавлении достаточно большого количества полей стандартный функционал не будет "гонять" все эти дополнительные поля по коду (понятно что технический прогресс решает большинство проблем при написании неоптимального кода, тем не менее хочу оптимально) минус: Дробление информации и необходимость повторного поиска записи при необходимости получения параметра из другой таблицы (безспорно что многое зависит от задачи и необходимости иметь единовременный доступ к множеству полей таблицы). Ваше мнение.
__________________
--- SHiSHok |
|
29.04.2008, 16:09 | #2 |
Гость
|
Цитата:
ЗЫ: Усложнение жизни путем создания доп. таблицы не особая проблема, но по моему мнению без веской причины такая доп. таблица особого смысла не имеет. А + и - вроде бы описали достаточно точно. Последний раз редактировалось lagr221374; 29.04.2008 в 16:22. |
|
29.04.2008, 17:08 | #3 |
Member
|
Смотря как вы к этим данным будете доступаться.
Вот тут стоит почитать, если ожидаются большие объемы данных. dynamicsmatters: Performance and InventDim Также обратите внимание, что CustTable кэшируется. Думаю, что с принципом работы механизма кэширования вы знакомы.
__________________
С уважением, glibs® |
|
30.04.2008, 07:12 | #4 |
Участник
|
Подобный подход уже использовался моими коллегами и был признан нежизнеспособным. Одна из проблем навскидку: при необходимости отобразить поля из разных таблиц на одном гриде вам вне всяких сомнений потребуется inner join. Представим себе, что для старых записей в первой таблице (custTable) записей в новой таблице нет - соответственно, в гриде вы их просто не увидите. Для того, чтобы их все-таки увидеть, необходимо писать отдельный job, создающий такие записи... В общем, долгая песня.
__________________
Денис Балуев. |
|
30.04.2008, 10:53 | #5 |
Участник
|
Цитата:
Сообщение от denny
Одна из проблем навскидку: при необходимости отобразить поля из разных таблиц на одном гриде вам вне всяких сомнений потребуется inner join. Представим себе, что для старых записей в первой таблице (custTable) записей в новой таблице нет - соответственно, в гриде вы их просто не увидите. Для того, чтобы их все-таки увидеть, необходимо писать отдельный job, создающий такие записи... В общем, долгая песня.
Цитата:
Цитата:
Сообщение от SHiSHok
Вопрос возник при добалении очередного поля в параметры клиента CustTable.
Т.е. возможен следующий подход: создать отдельную связанную таблицу (например CustTableAdv) и доп. поля/параметры справочника уже прописывать там. Я вижу и плюс и минус такого подхода: плюс: при добавлении достаточно большого количества полей стандартный функционал не будет "гонять" все эти дополнительные поля по коду (понятно что технический прогресс решает большинство проблем при написании неоптимального кода, тем не менее хочу оптимально) |
|
|
За это сообщение автора поблагодарили: leva (1). |
30.04.2008, 13:05 | #6 |
Участник
|
В целом согласен с gl00mie.
Я бы выделил в отдельную таблицу поля, если: 1. это группа логически связанных полей, причем относительно большая 2. эти связанные поля у многих строк таблицы-источника заполняться не будут Ну например, если к строкам журналов переноса надо добавить пяток полей (я сейчас не касаюсь того, насколько им там место). Но для других журналов они будут бесполезны, а таблица как известно для них всех используется одна. |
|
30.04.2008, 15:55 | #7 |
Участник
|
Немного по ограничениям MSSQL2k:
Length of a string containing SQL statements (batch size) = 65,536 * Network packet size1 Columns per base table = 1,024 Bytes per row = 8,060 Философия обьектной модели это замечательно, но зачастую приходится бороться за производительность системы (особенно с течением времени). Так вот одной из целей проекта я всегда ставлю выбор такого решения, которое в дальнейшем не приведет (минимально отразится) к ухудшению производительности приложения. А вот тут хорошобы цифры реальные иметь для анализа (опятьже с цифрами уже можно будет взвесить что важнее: красота обьектной модели или производительность, а может оно и совпадет ;-) ).
__________________
--- SHiSHok |
|
30.04.2008, 16:08 | #8 |
Участник
|
Цитата:
Сообщение от SHiSHok
Философия обьектной модели это замечательно, но зачастую приходится бороться за производительность системы (особенно с течением времени). Так вот одной из целей проекта я всегда ставлю выбор такого решения, которое в дальнейшем не приведет (минимально отразится) к ухудшению производительности приложения. А вот тут хорошобы цифры реальные иметь для анализа
Понятно, что при работе с СУБД нужно думать о производительности, но если посмотреть на то, что в куче мест стандартного приложения методы дергают записи из таблиц целиком, чтобы взять одно поле, то такие попытки улучшить производительность начинают выглядеть как сизифов труд... Мне кажется, надо все же "плясать от" предметной области, а оптимизацией заниматься уже после - по факту. Потому что если изначально реализовать "неадекватную" структуру данных, то никакие такие мелкие хитрости и оптимизации не спасут. Ну сколько у вас записей в таблице клиентов, сотня, тысяча?.. Посмотрите на тот же номенклатурный справочник, сколько в него полей понапихано, а ведь там бывают десятки тысяч записей - и ничего, работает система как-то... |
|
30.04.2008, 16:26 | #9 |
Участник
|
Опять же обеими руками поддержу gl00mie.
Правило 5 Стиля программирования на C, выражающий точку зрения на философию UNIX: "Данные преобладают. При правильной и хорошо организованной структуре данных, алгоритмы становятся очевидными. Структуры данных, а не алгоритмы, являются центральной частью в программировании." |
|
30.04.2008, 18:31 | #10 |
Участник
|
Никто не говорит о принципиальной невозможности. Но работать с тем же номенклатурным справочником как с четырьмя (пятью!) отдельными записями в разных таблицах, согласитесь, неудобно. Ради чистоты замысла (ах, у нас повторяющиеся поля в закупке, хранении и продаже!) и примерно 30 полей (извините, аксапты под рукой нет) регулярно получаем вопросы новичков про импорт InventTable и пустой справочник номенклатур после этого, отдельную процедуру в check and fix для исправления данного безобразия, пункт в FAQ. Как раз в данном случае игра на мой взгляд свеч не стоила.
__________________
Денис Балуев. |
|
Теги |
документация, ax3.0 |
|
|