|
|
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
На предприятии ведется учет определенных сумм по каждому сотруднику за день. Сотрудник может выполнять те или иные операции, и для каждого типа операции для данного сотрудника хранится количество обработанных единиц этой операции на определенное число. Грубо говоря, для этого используется таблица с полями ID_сотрудника, ID_операции, Дата, Количество. Соответственно, информация о сотрудниках и об операциях хранится в отдельных, связанных с этой, таблицах (если не углубляться). На клиенте это должно выглядеть так: пользователь выбирает сотрудника и месяц и видит таблицу, в которой представлено число единиц каждой операции за каждое число месяца. То есть, после столбцов, описывающих операцию, следуют столбцы, связанные с числами месяца (31 столбец для простоты). При этом, пользователь также и вводит данные о выполненных единицах операций через эту таблицу. Вопрос заключается в том, в каком виде лучше получать информацию непосредственно из БД. 1. Полагаю, можно написать хранимую процедуру, которая сама сформирует таблицу в нужном виде, и мне останется только привязать к этой таблице элемент управления, что-то подредактировав при необходимости. Мне этот вариант нравится тем, что не потребуется особо сложной прослойки между клиентом и SQL сервером. 2. Можно загрузить нужные записи из таблицы о совершенных операциях, а потом программно создать таблицу с требуемой структурой и заполнить ее самостоятельно. При этом, потребуется подгрузить и две другие таблицы (можно, конечно, выбрать все одной таблицей, но тогда передаваемые данные о сотрудниках и операциях будут повторяться, что мне не очень нравится). Этот вариант для меня выглядит более каноничЪным, ибо, все-таки, оформлением данных нужно заниматься на уровне, внешнем по отношению к БД. Может быть, есть еще какие-то варианты? Как же именно продумать схему взаимодействия, чтобы не допустить грубых нарушений стандартов разработки и обеспечить возможность гибкой работы с данными и их представлением? В данный момент я разрабатываю клиент-серверное предложение, и в процессе проектирования возник такой вопрос. Но он интересен для меня и безотносительно к конкретной системе. MS SQL SERVER + ADO.NET(C#). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2011, 15:19 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
WarAnt, эту тему могут туда перенести или мне нужно ее там создать заново? Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2011, 15:37 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
InnerCloister, > и видит таблицу, в которой представлено число единиц каждой операции за каждое число месяца сколько этих операций и они постоянны или меняются (добаляются новые)? данные вводит один человек или несколько могут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2011, 17:04 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
koJIo6ok, операции не меняются в течении месяца, но они в любом случае будут загружаться из БД. С базой работает много человек, хотя каждый сотрудник, по идее, сам должен вводить свои данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2011, 22:05 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
InnerCloister То есть, после столбцов, описывающих операцию, следуют столбцы, связанные с числами месяца (31 столбец для простоты)Столбцы или строки? Если строки, то результат банально группируется по дате, если столбцы то результат группируется по дате и транспонируется (что на одно действие больше) InnerCloister При этом, пользователь также и вводит данные о выполненных единицах операций через эту таблицу.Вводит он наверное не через таблицу а через форму заполняя ID_сотрудника, ID_операции, Дата, Количество InnerCloister а потом программно создать таблицу с требуемой структуройЭто вы на сервере программно табличку создаете? InnerCloister и заполнить ее самостоятельноСУБД разучились делать группировку InnerCloister но тогда передаваемые данные о сотрудниках и операциях будут повторяться, что мне не очень нравитсяЭкономим копейки сетевого трафика. InnerCloister Этот вариант для меня выглядит более каноничЪным, ибо, все-таки, оформлением данных нужно заниматься на уровне, внешнем по отношению к БД.Да, да СУБД не умеют выполнять джойны это не каноничЪно InnerCloister Как же именно продумать схему взаимодействия, чтобы не допустить грубых нарушений стандартов разработки и обеспечить возможность гибкой работы с данными и их представлением?Данные лежат в СУБД, с этим никто не спорит, интерфейсом заведует клиент с этим тоже никто не спорит. Куда положить логику (джойны, проверки, вычисления и т.п.) однозначного ответа не имеется. Надо смотреть на приложение. Я, как ДБА потащил бы все в СУБД (код поближе к данным), девелопер наоборот тащил бы код из СУБД (обеспечивал бы гибкость и независимость от СУБД) на свое поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 02:52 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
SERG1257, таблица на форме имеет следующие поля: [Код операции][Наименование операции][Единица измерения][Расценка][1][2]...[31] Вводит он наверное не через таблицу а через форму заполняя ID_сотрудника, ID_операции, Дата, Количество Для ввода данных нужна именно таблица на весь месяц, т.к. люди привыкли работать в Excel с подобными таблицами. Сотрудник и месяц выбираются из списков, а все операции, которые есть на данный месяц, висят в таблице. Нужно только ввести количество каждой операции за каждое число. Это вы на сервере программно табличку создаете? Ну, на том приложении, которое будет принимать сообщения от клиента, отправлять запросы на SQL сервер и передавать данные клиенту. Возможно, реально это будет реализовано внутри клиентского приложения. Экономим копейки сетевого трафика. В любой ситуации есть самое лучшее решение. И вряд ли оно приведет к нерациональному использованию ресурсов, даже незначительно. Буду, наверное, программно реализовывать, все-таки, с MS SQL server не очень много работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 08:45 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
InnerCloisterтаблица на форме имеет следующие поля: [Код операции][Наименование операции][Единица измерения][Расценка][1][2]...[31] Плохая таблица. Данные не нормализованы. Получить такое ПРЕДСТАВЛЕНИЕ для удобства отображения на клиенте можно, легко и разными способами, но хранить НУЖНО в виде нормальной таблицы: [Дата операции][Код операции][Наименование операции][Единица измерения][Расценка][1][2]...[31] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 09:06 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
InnerCloisterSERG1257, таблица на форме имеет следующие поля: [Код операции][Наименование операции][Единица измерения][Расценка][1][2]...[31] Вводит он наверное не через таблицу а через форму заполняя ID_сотрудника, ID_операции, Дата, Количество Для ввода данных нужна именно таблица на весь месяц, т.к. люди привыкли работать в Excel с подобными таблицами. Сотрудник и месяц выбираются из списков, а все операции, которые есть на данный месяц, висят в таблице. Нужно только ввести количество каждой операции за каждое число. Как данные выводятся в форме не имеет никакого отношения к тому, как данные храняться в базе. В конце концов это может быть вьюха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 09:13 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
Программист-Любитель, мы тут о хранении не говорим. Это другой вопрос. Схему данных я пока дорабатываю, в целом там уже все нормально, но я думаю над возможностью обеспечить некоторые дополнительные условия на уровне БД. Мы от этого абстрагируемся, считая, что данные хранятся в нормальном виде. В любом случае, на выходе с сервера они будут скомпонованы так, как мне потребуется. Упрощенное описание схемы данных есть в первом посте. Кстати, в этой не нормализованной таблице данные тоже не дублируются. Не так уж она и плоха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 09:13 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
Программист-Любитель, авторПолучить такое ПРЕДСТАВЛЕНИЕ для удобства отображения на клиенте можно, легко и разными способами Я не особо сомневаюсь, что такую таблицу можно получить средствами SQL сервера. Меня волнует, насколько легко потом будет с ней работать, чтобы привести в нужный вид на клиенте. Я имею в виду оформление, контроль ввода данных и т.д. Если я буду создавать таблицу программно, я точно знаю, что я смогу с ней сделать. Но если есть более правильный путь, я готов его освоить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 09:18 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
Главное - НЕ ХРАНИТЬ первичные данные в той форме, которую вы разрисовали. У меня клиентом MS SQL выступает Access ADP, там приходится применять некие трюки для реализации редактируемости данных в форме даты-по-столбикам. 1. Самый простой по реализации. Форма даты-по-столбикам ридонли. Но из любой ячейки можно провалиться в вектор всех операций сотрудника по заданной дате или в вектор операций по всем датам по заданному сотруднику, которые нормально редактируются. 2. Форма на отвязном рекордсете. Реадктруется. Но событие обновления каждой ячейки перехватывается и дублируется запись в первичные нормализованные данные. 3. Форма на временной таблице. Таблица с датами-по-столбикам заполняется данным из первичной нормализованной таблицы. Редактируется. По кнопке Сохранить массово обновляются первичные нормализованные данные. Для других, более гибких инструментрариев типа VS второй способ, наверное, самое выгодный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 09:32 |
|
||
|
Представление данных для клиента
|
|||
|---|---|---|---|
|
#18+
InnerCloister, узкая и длинная таблица почти всегда предпочтительнее широкой, потому что скуль гораздо комфортнее обрабатывает строки, чем столбцы. А преобразовывать данные туда обратно можно на любой стороне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2011, 09:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37441115&tid=1542025]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 534ms |

| 0 / 0 |
