Re[9]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 12.10.06 08:31
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Я в одном продукте подсмотрел очень интересное решение для упорядочивания. Там в при первоначальной вставке порядковые номера писались как обычно 1, 2, 3, ..., но тип был не целочисленный, а с плавающей точкой. Если впоследствии возникала необходимость добавить новыю запись между двумя существующими, то использовали среднее от соседних порядковых номеров. Посмотри, возможно и тебе этот вариант подойдет.


Я уже думал об этом. Не понял только, нет ли тут подводных камней.
Re[8]: [Oracle] Поиск пропусков в последовательности
От: wildwind Россия  
Дата: 12.10.06 08:44
Оценка:
Здравствуйте, anonymous, Вы писали:

L>>А для чего если не секрет? Уж не для упорядочивания ли?


A>Для него.


Не могли бы вы подробнее описать что за объекты у вас упорядочиваются, по какому критерию, да и вообще предметную область.

Есть подозрение, что вы занимаетесь преодолением собственноручно возведенных преград, то есть, попросту говоря, лишней работой.
Re[9]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 12.10.06 08:56
Оценка:
Здравствуйте, wildwind, Вы писали:

L>>>А для чего если не секрет? Уж не для упорядочивания ли?

A>>Для него.
W>Не могли бы вы подробнее описать что за объекты у вас упорядочиваются, по какому критерию, да и вообще предметную область.
W>Есть подозрение, что вы занимаетесь преодолением собственноручно возведенных преград, то есть, попросту говоря, лишней работой.

Есть просто некий список. Пользователь должен иметь возможность вручную выстроить элементы этого списка в нужном ему порядке просто переставля их с места на место (в клиенте это D'n'D). У элементов этого списка есть числовое свойство, по значению которого определяется порядок следования элементов (от меньшего к большему). При перемещении элемента значение этого свойства меняется.
Re[10]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 12.10.06 08:57
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, Lloyd, Вы писали:


L>>Я в одном продукте подсмотрел очень интересное решение для упорядочивания. Там в при первоначальной вставке порядковые номера писались как обычно 1, 2, 3, ..., но тип был не целочисленный, а с плавающей точкой. Если впоследствии возникала необходимость добавить новыю запись между двумя существующими, то использовали среднее от соседних порядковых номеров. Посмотри, возможно и тебе этот вариант подойдет.

A>Я уже думал об этом. Не понял только, нет ли тут подводных камней.

Например, при длительном использовании возможна ситуация, когда среднее от двух чисел нельзя будет отличить от одного из этих чисел.
Re[11]: [Oracle] Поиск пропусков в последовательности
От: Lloyd Россия  
Дата: 12.10.06 09:14
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Например, при длительном использовании возможна ситуация, когда среднее от двух чисел нельзя будет отличить от одного из этих чисел.


Это не при длительном,а при о-о-о-о-о-чень длительном.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: [Oracle] Поиск пропусков в последовательности
От: FunnyRabbit Россия  
Дата: 12.10.06 09:19
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, anonymous, Вы писали:


L>>>А для чего если не секрет? Уж не для упорядочивания ли?


A>>Для него.


L>Я в одном продукте подсмотрел очень интересное решение для упорядочивания. Там в при первоначальной вставке порядковые номера писались как обычно 1, 2, 3, ..., но тип был не целочисленный, а с плавающей точкой. Если впоследствии возникала необходимость добавить новыю запись между двумя существующими, то использовали среднее от соседних порядковых номеров. Посмотри, возможно и тебе этот вариант подойдет.


Сам так делаю давно.
То что меня не убивает, делает меня умнее.
Re[11]: [Oracle] Поиск пропусков в последовательности
От: FunnyRabbit Россия  
Дата: 12.10.06 09:20
Оценка: 7 (1)
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, anonymous, Вы писали:


A>>Здравствуйте, Lloyd, Вы писали:


L>>>Я в одном продукте подсмотрел очень интересное решение для упорядочивания. Там в при первоначальной вставке порядковые номера писались как обычно 1, 2, 3, ..., но тип был не целочисленный, а с плавающей точкой. Если впоследствии возникала необходимость добавить новыю запись между двумя существующими, то использовали среднее от соседних порядковых номеров. Посмотри, возможно и тебе этот вариант подойдет.

A>>Я уже думал об этом. Не понял только, нет ли тут подводных камней.

A>Например, при длительном использовании возможна ситуация, когда среднее от двух чисел нельзя будет отличить от одного из этих чисел.


В принцыпе сможешь реорганизовывать последовательноть раз в месяц. Думаю тогда проблем не возникнет.
То что меня не убивает, делает меня умнее.
Re[10]: [Oracle] Поиск пропусков в последовательности
От: wildwind Россия  
Дата: 12.10.06 10:31
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Есть просто некий список.

Неужели у вас такая секретная разработка? Я ведь не зря прошу конкретики, что за объекты.

A>Пользователь должен иметь возможность вручную выстроить элементы этого списка в нужном ему порядке просто переставля их с места на место (в клиенте это D'n'D). У элементов этого списка есть числовое свойство, по значению которого определяется порядок следования элементов (от меньшего к большему). При перемещении элемента значение этого свойства меняется.


Что-то в этом роде я и предполагал. Почему этот порядок является атрибутом объекта? Ведь пользователей много, и у каждого могут быть свои представления о порядке.
Re[11]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 12.10.06 10:53
Оценка:
Здравствуйте, wildwind, Вы писали:

A>>Есть просто некий список.

W>Неужели у вас такая секретная разработка? Я ведь не зря прошу конкретики, что за объекты.

Нет, не настолько. ) Это список абонентов, объект — абонент, т. е. его название и позиция в списке.

A>>Пользователь должен иметь возможность вручную выстроить элементы этого списка в нужном ему порядке просто переставля их с места на место (в клиенте это D'n'D). У элементов этого списка есть числовое свойство, по значению которого определяется порядок следования элементов (от меньшего к большему). При перемещении элемента значение этого свойства меняется.

W>Что-то в этом роде я и предполагал. Почему этот порядок является атрибутом объекта? Ведь пользователей много, и у каждого могут быть свои представления о порядке.

Нет, ответственный за порядок пользователь будет один, а критерии порядка описаны, только алгоритмизировать их нельзя без внесения избыточных данных. Например, список: "Секретарь", "Зам. начальника", "Начальник" должен быть отсортирован так: "Начальник", "Секретарь", "Зам. начальника", потому что так удобнее и так принято. Какой тут может быть алгоритм? Только пользователь в этом случае может отсортировать правильно.
Re[12]: [Oracle] Поиск пропусков в последовательности
От: wildwind Россия  
Дата: 12.10.06 13:32
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Нет, ответственный за порядок пользователь будет один, а критерии порядка описаны, только алгоритмизировать их нельзя без внесения избыточных данных. Например, список: "Секретарь", "Зам. начальника", "Начальник" должен быть отсортирован так: "Начальник", "Секретарь", "Зам. начальника", потому что так удобнее и так принято. Какой тут может быть алгоритм? Только пользователь в этом случае может отсортировать правильно.


Нет, что-то у вас в консерватории (модели UI или требованиях) неправильно. Если это атрибут объекта или группы объектов, то use-case "вручную выстроить элементы этого списка в нужном ему порядке" не может иметь место, мое настроение сегодня или мои отношения с абонентом "Секретарь" тут не причем. Если же это пользовательское предпочтение, то и хранить его надо не в объекте, а в профиле пользователя (а он обычно располагается даже не в БД).

Но мы уклонились от темы, это уже оффтопик; если хотите продолжить обсуждение, голосуйте за отделение ветки и перенос в usability.
Re[13]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 12.10.06 13:46
Оценка:
Здравствуйте, wildwind, Вы писали:

A>>Нет, ответственный за порядок пользователь будет один, а критерии порядка описаны, только алгоритмизировать их нельзя без внесения избыточных данных. Например, список: "Секретарь", "Зам. начальника", "Начальник" должен быть отсортирован так: "Начальник", "Секретарь", "Зам. начальника", потому что так удобнее и так принято. Какой тут может быть алгоритм? Только пользователь в этом случае может отсортировать правильно.

W>Нет, что-то у вас в консерватории (модели UI или требованиях) неправильно. Если это атрибут объекта или группы объектов, то use-case "вручную выстроить элементы этого списка в нужном ему порядке" не может иметь место, мое настроение сегодня или мои отношения с абонентом "Секретарь" тут не причем. Если же это пользовательское предпочтение, то и хранить его надо не в объекте, а в профиле пользователя (а он обычно располагается даже не в БД).

Не могу понять что не так. Действительно "настроение сегодня или отношения с абонентом" тут не при чём. Просто все привыкли, что "Начальник" должен быть первым в списке, потом, очевидно, должен идти его секретарь и т. д. Так удобнее искать. И выходит что это свойство, по которому происходит сортировка, своеобразный ранг (rank) абонента. И выставить его можно только вручную.

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

W>Но мы уклонились от темы, это уже оффтопик; если хотите продолжить обсуждение, голосуйте за отделение ветки и перенос в usability.


Попробуем.
Re[14]: [Oracle] Поиск пропусков в последовательности
От: Horror_Infinity Россия  
Дата: 12.10.06 15:03
Оценка: +1
Здравствуйте, anonymous, Вы писали:

A>Не могу понять что не так. Действительно "настроение сегодня или отношения с абонентом" тут не при чём. Просто все привыкли, что "Начальник" должен быть первым в списке, потом, очевидно, должен идти его секретарь и т. д. Так удобнее искать. И выходит что это свойство, по которому происходит сортировка, своеобразный ранг (rank) абонента. И выставить его можно только вручную.


А не проще ли тогда ввести в таблицу то самое поле RANK и впоследствии в выборках ориентироваться на него? Тога и не придется городить огород с поиском пропусков.

A>Смысл в том, что для всех пользователей этот список должен выглядеть одинаково. И за то, как он будет выглядеть, отвечает одно единственное лицо.

Как раз пресловутое поле RANK и позволит это сделать.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[10]: [Oracle] Поиск пропусков в последовательности
От: Igor Trofimov  
Дата: 12.10.06 18:27
Оценка:
A>Есть просто некий список. Пользователь должен иметь возможность вручную выстроить элементы этого списка в нужном ему порядке просто переставля их с места на место

Я обычно при решении этой задачи (а она действительно часто возникает, зря тут говорят, что это не нужно), использую следующие соображения:

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

* Когда нужно поменять два элемента местами — достаточно поменять местами значения их "ранга"

И зачем "заполнять дырки" — непонятно совершенно
Re[11]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 13.10.06 05:01
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

A>>Есть просто некий список. Пользователь должен иметь возможность вручную выстроить элементы этого списка в нужном ему порядке просто переставля их с места на место

iT>Я обычно при решении этой задачи (а она действительно часто возникает, зря тут говорят, что это не нужно), использую следующие соображения:
iT>* Когда элемент добавляется — можно просто взять очередное значение, например, из генератора. Лишь бы было больше, чем у всех остальных элементов. При этом новый элемент встает в конец списка.

Я так и делаю.

iT>* Когда нужно поменять два элемента местами — достаточно поменять местами значения их "ранга"

iT>И зачем "заполнять дырки" — непонятно совершенно

Тут немного другое. К примеру, у нас есть 10 элементов и мы хотим 10-ый сделать 2-ым. Для этого мы перетаскиваем этот 10-ый элемент на 2-ой, после чего нужно сдвинуть элементы со 2-ого по 9-ый, чтобы освободить место для бывшего 10-го. Но, если у нас отсутствует, к примеру, 5-ый элемент, то сдвигать нужно только элементы со 2-ого по 4-ый. Поэтому и нужен поиск дырок.

Естественно если обозначать позиции дробными числами, сдвигать ничего не потребуется. См. обсуждение в этой же теме.
Re[15]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 13.10.06 05:39
Оценка:
Здравствуйте, Horror_Infinity, Вы писали:

A>>Не могу понять что не так. Действительно "настроение сегодня или отношения с абонентом" тут не при чём. Просто все привыкли, что "Начальник" должен быть первым в списке, потом, очевидно, должен идти его секретарь и т. д. Так удобнее искать. И выходит что это свойство, по которому происходит сортировка, своеобразный ранг (rank) абонента. И выставить его можно только вручную.

H_I>А не проще ли тогда ввести в таблицу то самое поле RANK и впоследствии в выборках ориентироваться на него? Тога и не придется городить огород с поиском пропусков.

Так это поле там и есть, просто пользователь ег не видит. Пользователю вообще ни к чему знать о его существовании, для него это должна быть простая ручная сортировка.

A>>Смысл в том, что для всех пользователей этот список должен выглядеть одинаково. И за то, как он будет выглядеть, отвечает одно единственное лицо.

H_I>Как раз пресловутое поле RANK и позволит это сделать.
Re[16]: [Oracle] Поиск пропусков в последовательности
От: Horror_Infinity Россия  
Дата: 13.10.06 05:53
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Так это поле там и есть, просто пользователь ег не видит. Пользователю вообще ни к чему знать о его существовании, для него это должна быть простая ручная сортировка.


ИМХО, неправильно это... Потому что от подобных ручных сортировок обычно серверу становится очень плохо... А ну, как у тебя в последовательности не найдется свободных дырок? И записей, которые надо будет отсортировать, будет порядка миллиона? Ты представляешь, сколько серверных ресурсов уйдет на то, чтоб сдвинуть последовательность? Нет уж... На мой взгляд надо разрешить пользователю оперировать полем RANK, не влезая в общую нумерацию объектов. В конечном счете, если возникнет необходимость пронумеровать объекты последовательно для, например, отчета, можно воспользоваться псевдостолбцом ROWNUM, нежели городить тяженый и неудобоваримый код.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[17]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 13.10.06 06:09
Оценка:
Здравствуйте, Horror_Infinity, Вы писали:

A>>Так это поле там и есть, просто пользователь ег не видит. Пользователю вообще ни к чему знать о его существовании, для него это должна быть простая ручная сортировка.

H_I>ИМХО, неправильно это... Потому что от подобных ручных сортировок обычно серверу становится очень плохо... А ну, как у тебя в последовательности не найдется свободных дырок? И записей, которые надо будет отсортировать, будет порядка миллиона? Ты представляешь, сколько серверных ресурсов уйдет на то, чтоб сдвинуть последовательность?

Гарантированно не будет столько записей, Максисмум сто и то вряд ли.

H_I>Нет уж... На мой взгляд надо разрешить пользователю оперировать полем RANK, не влезая в общую нумерацию объектов. В конечном счете, если возникнет необходимость пронумеровать объекты последовательно для, например, отчета, можно воспользоваться псевдостолбцом ROWNUM, нежели городить тяженый и неудобоваримый код.


Ну нельзя пользователю показывать это поле, потому что оно поставит его в тупик. Он просто не поймёт что это, нет аналогии, нет алгоритма, есть просто знание о том, какой порядок следования элементов правильный. И для пользователя проще и понятнее перетащить мышкой элемент списка, чем оперировать ничего не значащими для него цифрами.
Re[18]: [Oracle] Поиск пропусков в последовательности
От: Horror_Infinity Россия  
Дата: 13.10.06 06:34
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Гарантированно не будет столько записей, Максисмум сто и то вряд ли.


Блажен, кто верует... Сто записей — это все так говорят. А самое интересное начинается потом...

A>Ну нельзя пользователю показывать это поле, потому что оно поставит его в тупик. Он просто не поймёт что это, нет аналогии, нет алгоритма, есть просто знание о том, какой порядок следования элементов правильный. И для пользователя проще и понятнее перетащить мышкой элемент списка, чем оперировать ничего не значащими для него цифрами.


А ты и не показывай! Пусть себе юзер таскает крысой хоть все записи одновременно! Но ты оперируй полем RANK при этом. Тебе даже необязательно его показывать в запросе. А значения в нем поставь с шагом, например, в 1000. И пусть себе пользак таскает их — записи гарантированно не пересекутся при твоих исходных данных. Как говорится, и забор не надо городить, и условия задачи будут выполнены.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[19]: [Oracle] Поиск пропусков в последовательности
От: anonymous Россия http://denis.ibaev.name/
Дата: 13.10.06 06:40
Оценка:
Здравствуйте, Horror_Infinity, Вы писали:

A>>Гарантированно не будет столько записей, Максисмум сто и то вряд ли.

H_I>Блажен, кто верует... Сто записей — это все так говорят. А самое интересное начинается потом...

Тут физические ограничения, количество абонентов в отделе или цехе не может быть очень большим.

A>>Ну нельзя пользователю показывать это поле, потому что оно поставит его в тупик. Он просто не поймёт что это, нет аналогии, нет алгоритма, есть просто знание о том, какой порядок следования элементов правильный. И для пользователя проще и понятнее перетащить мышкой элемент списка, чем оперировать ничего не значащими для него цифрами.

H_I>А ты и не показывай! Пусть себе юзер таскает крысой хоть все записи одновременно! Но ты оперируй полем RANK при этом. Тебе даже необязательно его показывать в запросе. А значения в нем поставь с шагом, например, в 1000. И пусть себе пользак таскает их — записи гарантированно не пересекутся при твоих исходных данных. Как говорится, и забор не надо городить, и условия задачи будут выполнены.

Понятно, пришли к тому, что обсуждалось чуть ранее: http://rsdn.ru/forum/?mid=2159483
Автор: Lloyd
Дата: 12.10.06
Re[12]: [Oracle] Поиск пропусков в последовательности
От: Igor Trofimov  
Дата: 14.10.06 09:21
Оценка:
A>Тут немного другое. К примеру, у нас есть 10 элементов и мы хотим 10-ый сделать 2-ым.

Rank   Element
-----------------
123    Элемент 1
127    Элемент 2
345    Элемент 3
456    Элемент 4
789    Элемент 5
890    Элемент 6
912    Элемент 7
1023   Элемент 8
1198   Элемент 9
8765   Элемент 10

Просто берем и изменяем две записи, меняя местами их значения Rank:
Rank   Element
-----------------
127    Элемент 10
8765   Элемент 2


Зачем вообюще что-то сдвигать??? Тебе важно лишь относительное значение рангов, больше/меньше, потому что это определяет сортировку.
Их абсолютное значение тебя совсем не колышет! А значит, ситуация с бырками и без дырок — одинаковы!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.